Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Component/Utility/Timer.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | af1871eacc83 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/lib/Drupal/Component/Utility/Timer.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,76 @@ +<?php + +namespace Drupal\Component\Utility; + +/** + * Provides helpers to use timers throughout a request. + * + * @ingroup utility + */ +class Timer { + + static protected $timers = []; + + /** + * Starts the timer with the specified name. + * + * If you start and stop the same timer multiple times, the measured intervals + * will be accumulated. + * + * @param $name + * The name of the timer. + */ + public static function start($name) { + static::$timers[$name]['start'] = microtime(TRUE); + static::$timers[$name]['count'] = isset(static::$timers[$name]['count']) ? ++static::$timers[$name]['count'] : 1; + } + + /** + * Reads the current timer value without stopping the timer. + * + * @param string $name + * The name of the timer. + * + * @return int + * The current timer value in ms. + */ + public static function read($name) { + if (isset(static::$timers[$name]['start'])) { + $stop = microtime(TRUE); + $diff = round(($stop - static::$timers[$name]['start']) * 1000, 2); + + if (isset(static::$timers[$name]['time'])) { + $diff += static::$timers[$name]['time']; + } + return $diff; + } + return static::$timers[$name]['time']; + } + + /** + * Stops the timer with the specified name. + * + * @param string $name + * The name of the timer. + * + * @return array + * A timer array. The array contains the number of times the timer has been + * started and stopped (count) and the accumulated timer value in ms (time). + */ + public static function stop($name) { + if (isset(static::$timers[$name]['start'])) { + $stop = microtime(TRUE); + $diff = round(($stop - static::$timers[$name]['start']) * 1000, 2); + if (isset(static::$timers[$name]['time'])) { + static::$timers[$name]['time'] += $diff; + } + else { + static::$timers[$name]['time'] = $diff; + } + unset(static::$timers[$name]['start']); + } + + return static::$timers[$name]; + } + +}