forked from PHPCSStandards/PHP_CodeSniffer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTiming.php
133 lines (106 loc) · 3.05 KB
/
Timing.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
127
128
129
130
131
132
133
<?php
/**
* Timing functions for the run.
*
* @author Greg Sherwood <gsherwood@squiz.net>
* @copyright 2006-2015 Squiz Pty Ltd (ABN 77 084 670 600)
* @license https://github.com/PHPCSStandards/PHP_CodeSniffer/blob/master/licence.txt BSD Licence
*/
namespace PHP_CodeSniffer\Util;
class Timing
{
/**
* Number of milliseconds in a minute.
*
* @var int
*/
const MINUTE_IN_MS = 60000;
/**
* Number of milliseconds in a second.
*
* @var int
*/
const SECOND_IN_MS = 1000;
/**
* The start time of the run in microseconds.
*
* @var float
*/
private static $startTime;
/**
* Used to make sure we only print the run time once per run.
*
* @var boolean
*/
private static $printed = false;
/**
* Start recording time for the run.
*
* @return void
*/
public static function startTiming()
{
self::$startTime = microtime(true);
}//end startTiming()
/**
* Get the duration of the run up to "now".
*
* @return float Duration in milliseconds.
*/
public static function getDuration()
{
if (self::$startTime === null) {
// Timing was never started.
return 0;
}
return ((microtime(true) - self::$startTime) * 1000);
}//end getDuration()
/**
* Convert a duration in milliseconds to a human readable duration string.
*
* @param float $duration Duration in milliseconds.
*
* @return string
*/
public static function getHumanReadableDuration($duration)
{
$timeString = '';
if ($duration >= self::MINUTE_IN_MS) {
$mins = floor($duration / self::MINUTE_IN_MS);
$secs = round((fmod($duration, self::MINUTE_IN_MS) / self::SECOND_IN_MS), 2);
$timeString = $mins.' mins';
if ($secs >= 0.01) {
$timeString .= ", $secs secs";
}
} else if ($duration >= self::SECOND_IN_MS) {
$timeString = round(($duration / self::SECOND_IN_MS), 2).' secs';
} else {
$timeString = round($duration).'ms';
}
return $timeString;
}//end getHumanReadableDuration()
/**
* Print information about the run.
*
* @param boolean $force If TRUE, prints the output even if it has
* already been printed during the run.
*
* @return void
*/
public static function printRunTime($force=false)
{
if ($force === false && self::$printed === true) {
// A double call.
return;
}
if (self::$startTime === null) {
// Timing was never started.
return;
}
$duration = self::getDuration();
$duration = self::getHumanReadableDuration($duration);
$mem = round((memory_get_peak_usage(true) / (1024 * 1024)), 2).'MB';
echo "Time: $duration; Memory: $mem".PHP_EOL.PHP_EOL;
self::$printed = true;
}//end printRunTime()
}//end class