microtime(TRUE), 'stop' => FALSE, 'memory_start' => function_exists('memory_get_usage') ? memory_get_usage() : 0, 'memory_stop' => FALSE ); } } /** * Set a benchmark stop point. * * @param string benchmark name * @return void */ public static function stop($name) { if (isset(self::$marks[$name]) AND self::$marks[$name]['stop'] === FALSE) { self::$marks[$name]['stop'] = microtime(TRUE); self::$marks[$name]['memory_stop'] = function_exists('memory_get_usage') ? memory_get_usage() : 0; } } /** * Get the elapsed time between a start and stop. * * @param string benchmark name, TRUE for all * @param integer number of decimal places to count to * @return array */ public static function get($name, $decimals = 4) { if ($name === TRUE) { $times = array(); $names = array_keys(self::$marks); foreach ($names as $name) { // Get each mark recursively $times[$name] = self::get($name, $decimals); } // Return the array return $times; } if ( ! isset(self::$marks[$name])) return FALSE; if (self::$marks[$name]['stop'] === FALSE) { // Stop the benchmark to prevent mis-matched results self::stop($name); } // Return a string version of the time between the start and stop points // Properly reading a float requires using number_format or sprintf return array ( 'time' => number_format(self::$marks[$name]['stop'] - self::$marks[$name]['start'], $decimals), 'memory' => (self::$marks[$name]['memory_stop'] - self::$marks[$name]['memory_start']) ); } } // End Benchmark