Chris@0
|
1 <?php
|
Chris@0
|
2 /*
|
Chris@0
|
3 * This file is part of the PHP_Timer package.
|
Chris@0
|
4 *
|
Chris@0
|
5 * (c) Sebastian Bergmann <sebastian@phpunit.de>
|
Chris@0
|
6 *
|
Chris@0
|
7 * For the full copyright and license information, please view the LICENSE
|
Chris@0
|
8 * file that was distributed with this source code.
|
Chris@0
|
9 */
|
Chris@0
|
10
|
Chris@0
|
11 /**
|
Chris@0
|
12 * Utility class for timing.
|
Chris@0
|
13 */
|
Chris@0
|
14 class PHP_Timer
|
Chris@0
|
15 {
|
Chris@0
|
16 /**
|
Chris@0
|
17 * @var array
|
Chris@0
|
18 */
|
Chris@0
|
19 private static $times = array(
|
Chris@0
|
20 'hour' => 3600000,
|
Chris@0
|
21 'minute' => 60000,
|
Chris@0
|
22 'second' => 1000
|
Chris@0
|
23 );
|
Chris@0
|
24
|
Chris@0
|
25 /**
|
Chris@0
|
26 * @var array
|
Chris@0
|
27 */
|
Chris@0
|
28 private static $startTimes = array();
|
Chris@0
|
29
|
Chris@0
|
30 /**
|
Chris@0
|
31 * @var float
|
Chris@0
|
32 */
|
Chris@0
|
33 public static $requestTime;
|
Chris@0
|
34
|
Chris@0
|
35 /**
|
Chris@0
|
36 * Starts the timer.
|
Chris@0
|
37 */
|
Chris@0
|
38 public static function start()
|
Chris@0
|
39 {
|
Chris@0
|
40 array_push(self::$startTimes, microtime(true));
|
Chris@0
|
41 }
|
Chris@0
|
42
|
Chris@0
|
43 /**
|
Chris@0
|
44 * Stops the timer and returns the elapsed time.
|
Chris@0
|
45 *
|
Chris@0
|
46 * @return float
|
Chris@0
|
47 */
|
Chris@0
|
48 public static function stop()
|
Chris@0
|
49 {
|
Chris@0
|
50 return microtime(true) - array_pop(self::$startTimes);
|
Chris@0
|
51 }
|
Chris@0
|
52
|
Chris@0
|
53 /**
|
Chris@0
|
54 * Formats the elapsed time as a string.
|
Chris@0
|
55 *
|
Chris@0
|
56 * @param float $time
|
Chris@0
|
57 * @return string
|
Chris@0
|
58 */
|
Chris@0
|
59 public static function secondsToTimeString($time)
|
Chris@0
|
60 {
|
Chris@0
|
61 $ms = round($time * 1000);
|
Chris@0
|
62
|
Chris@0
|
63 foreach (self::$times as $unit => $value) {
|
Chris@0
|
64 if ($ms >= $value) {
|
Chris@0
|
65 $time = floor($ms / $value * 100.0) / 100.0;
|
Chris@0
|
66
|
Chris@0
|
67 return $time . ' ' . ($time == 1 ? $unit : $unit . 's');
|
Chris@0
|
68 }
|
Chris@0
|
69 }
|
Chris@0
|
70
|
Chris@0
|
71 return $ms . ' ms';
|
Chris@0
|
72 }
|
Chris@0
|
73
|
Chris@0
|
74 /**
|
Chris@0
|
75 * Formats the elapsed time since the start of the request as a string.
|
Chris@0
|
76 *
|
Chris@0
|
77 * @return string
|
Chris@0
|
78 */
|
Chris@0
|
79 public static function timeSinceStartOfRequest()
|
Chris@0
|
80 {
|
Chris@0
|
81 return self::secondsToTimeString(microtime(true) - self::$requestTime);
|
Chris@0
|
82 }
|
Chris@0
|
83
|
Chris@0
|
84 /**
|
Chris@0
|
85 * Returns the resources (time, memory) of the request as a string.
|
Chris@0
|
86 *
|
Chris@0
|
87 * @return string
|
Chris@0
|
88 */
|
Chris@0
|
89 public static function resourceUsage()
|
Chris@0
|
90 {
|
Chris@0
|
91 return sprintf(
|
Chris@0
|
92 'Time: %s, Memory: %4.2fMB',
|
Chris@0
|
93 self::timeSinceStartOfRequest(),
|
Chris@0
|
94 memory_get_peak_usage(true) / 1048576
|
Chris@0
|
95 );
|
Chris@0
|
96 }
|
Chris@0
|
97 }
|
Chris@0
|
98
|
Chris@0
|
99 if (isset($_SERVER['REQUEST_TIME_FLOAT'])) {
|
Chris@0
|
100 PHP_Timer::$requestTime = $_SERVER['REQUEST_TIME_FLOAT'];
|
Chris@0
|
101 } elseif (isset($_SERVER['REQUEST_TIME'])) {
|
Chris@0
|
102 PHP_Timer::$requestTime = $_SERVER['REQUEST_TIME'];
|
Chris@0
|
103 } else {
|
Chris@0
|
104 PHP_Timer::$requestTime = microtime(true);
|
Chris@0
|
105 }
|