-
Notifications
You must be signed in to change notification settings - Fork 0
/
Accumulator.php
126 lines (94 loc) · 2.64 KB
/
Accumulator.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<?php
namespace BaseXMS;
class Accumulator
{
private $data;
private $memoryUsage;
/**
* @param string $identifier
* @param float $microtime
*/
public function start( $identifier, $microtime = null )
{
$microtime = $microtime ? $microtime : microtime( true );
$this->data[ $identifier ][ 'start' ][] = $microtime;
if( !isset( $this->data[ $identifier ][ 'accumulation' ] ) )
{
$this->data[ $identifier ][ 'accumulation' ] = 0;
}
}
public function stop( $identifier, $microtime = null )
{
$microtime = $microtime ? $microtime : microtime( true );
if( !empty( $this->data[ $identifier ][ 'start' ] ) )
{
$start = array_pop( $this->data[ $identifier ][ 'start' ] );
$diff = $microtime - $start;
$this->data[ $identifier ][ 'accumulation' ] += $diff;
}
}
public function memory_usage( $identifier )
{
$this->memoryUsage[ $identifier ] = memory_get_usage();
}
public function getData()
{
return $this->data;
}
public function getDataAsHtml()
{
$return = '';
if( !empty( $this->data ) )
{
$return .= '<table border="1">';
foreach( $this->data as $identifier => $entry )
{
$return .= '<tr>';
$return .= '<td>' . $identifier . '</td>';
$return .= '<td>' . number_format( ( $entry[ 'accumulation' ] ) * 1000, 4 ) . ' ms' . '</td>';
$return .= '</tr>';
}
$return .= '</table>';
}
if( !empty( $this->memoryUsage ) )
{
$this->memoryUsage[ 'peak' ] = memory_get_peak_usage();
$return .= '<table border="1">';
foreach( $this->memoryUsage as $identifier => $value )
{
$unit = array('b','kb','mb','gb','tb','pb');
$return .= '<tr>';
$return .= '<td>' . $identifier . '</td>';
$return .= '<td>' . round( $value / pow( 1024,( $i = floor( log( $value, 1024 ) ) ) ), 2 ).' '.$unit[$i] . '</td>';
$return .= '</tr>';
}
$return .= '</table>';
}
return $return;
}
public function getDataAsText()
{
$return = '';
if( !empty( $this->data ) )
{
foreach( $this->data as $identifier => $entry )
{
$return .= $identifier . "\t";
$return .= number_format( ( $entry[ 'accumulation' ] ) * 1000, 4 ) . ' ms' . "\n";
}
}
$return .= "\n";
if( !empty( $this->memoryUsage ) )
{
$this->memoryUsage[ 'peak' ] = memory_get_peak_usage();
foreach( $this->memoryUsage as $identifier => $value )
{
$unit = array('b','kb','mb','gb','tb','pb');
$return .= $identifier . "\n";
$return .= round( $value / pow( 1024,( $i = floor( log( $value, 1024 ) ) ) ), 2 ).' '.$unit[$i] . "\n";
}
}
return $return;
}
}
?>