Chris@0: Chris@0: * Chris@0: * For the full copyright and license information, please view the LICENSE Chris@0: * file that was distributed with this source code. Chris@0: */ Chris@0: Chris@0: /** Chris@0: * Utility class for timing. Chris@0: */ Chris@0: class PHP_Timer Chris@0: { Chris@0: /** Chris@0: * @var array Chris@0: */ Chris@0: private static $times = array( Chris@0: 'hour' => 3600000, Chris@0: 'minute' => 60000, Chris@0: 'second' => 1000 Chris@0: ); Chris@0: Chris@0: /** Chris@0: * @var array Chris@0: */ Chris@0: private static $startTimes = array(); Chris@0: Chris@0: /** Chris@0: * @var float Chris@0: */ Chris@0: public static $requestTime; Chris@0: Chris@0: /** Chris@0: * Starts the timer. Chris@0: */ Chris@0: public static function start() Chris@0: { Chris@0: array_push(self::$startTimes, microtime(true)); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Stops the timer and returns the elapsed time. Chris@0: * Chris@0: * @return float Chris@0: */ Chris@0: public static function stop() Chris@0: { Chris@0: return microtime(true) - array_pop(self::$startTimes); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Formats the elapsed time as a string. Chris@0: * Chris@0: * @param float $time Chris@0: * @return string Chris@0: */ Chris@0: public static function secondsToTimeString($time) Chris@0: { Chris@0: $ms = round($time * 1000); Chris@0: Chris@0: foreach (self::$times as $unit => $value) { Chris@0: if ($ms >= $value) { Chris@0: $time = floor($ms / $value * 100.0) / 100.0; Chris@0: Chris@0: return $time . ' ' . ($time == 1 ? $unit : $unit . 's'); Chris@0: } Chris@0: } Chris@0: Chris@0: return $ms . ' ms'; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Formats the elapsed time since the start of the request as a string. Chris@0: * Chris@0: * @return string Chris@0: */ Chris@0: public static function timeSinceStartOfRequest() Chris@0: { Chris@0: return self::secondsToTimeString(microtime(true) - self::$requestTime); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Returns the resources (time, memory) of the request as a string. Chris@0: * Chris@0: * @return string Chris@0: */ Chris@0: public static function resourceUsage() Chris@0: { Chris@0: return sprintf( Chris@0: 'Time: %s, Memory: %4.2fMB', Chris@0: self::timeSinceStartOfRequest(), Chris@0: memory_get_peak_usage(true) / 1048576 Chris@0: ); Chris@0: } Chris@0: } Chris@0: Chris@0: if (isset($_SERVER['REQUEST_TIME_FLOAT'])) { Chris@0: PHP_Timer::$requestTime = $_SERVER['REQUEST_TIME_FLOAT']; Chris@0: } elseif (isset($_SERVER['REQUEST_TIME'])) { Chris@0: PHP_Timer::$requestTime = $_SERVER['REQUEST_TIME']; Chris@0: } else { Chris@0: PHP_Timer::$requestTime = microtime(true); Chris@0: }