false, 'count'=>0, 'sum'=>0, 'realmem'=>0, 'emalloc'=>0, ); } public static function resume($timerName) { if (!self::$_enabled) { return; } if (empty(self::$_timers[$timerName])) { self::reset($timerName); } if (self::$_memory_get_usage) { self::$_timers[$timerName]['realmem_start'] = memory_get_usage(true); self::$_timers[$timerName]['emalloc_start'] = memory_get_usage(); } self::$_timers[$timerName]['start'] = microtime(true); self::$_timers[$timerName]['count'] ++; } public static function start($timerName) { self::resume($timerName); } public static function pause($timerName) { if (!self::$_enabled) { return; } $time = microtime(true); // Get current time as quick as possible to make more accurate calculations if (empty(self::$_timers[$timerName])) { self::reset($timerName); } if (false!==self::$_timers[$timerName]['start']) { self::$_timers[$timerName]['sum'] += $time-self::$_timers[$timerName]['start']; self::$_timers[$timerName]['start'] = false; if (self::$_memory_get_usage) { self::$_timers[$timerName]['realmem'] += memory_get_usage(true)-self::$_timers[$timerName]['realmem_start']; self::$_timers[$timerName]['emalloc'] += memory_get_usage()-self::$_timers[$timerName]['emalloc_start']; } } } public static function stop($timerName) { self::pause($timerName); } public static function fetch($timerName, $key='sum') { if (empty(self::$_timers[$timerName])) { return false; } elseif (empty($key)) { return self::$_timers[$timerName]; } switch ($key) { case 'sum': $sum = self::$_timers[$timerName]['sum']; if (self::$_timers[$timerName]['start']!==false) { $sum += microtime(true)-self::$_timers[$timerName]['start']; } return $sum; case 'count': $count = self::$_timers[$timerName]['count']; return $count; case 'realmem': if (!isset(self::$_timers[$timerName]['realmem'])) { self::$_timers[$timerName]['realmem'] = -1; } return self::$_timers[$timerName]['realmem']; case 'emalloc': if (!isset(self::$_timers[$timerName]['emalloc'])) { self::$_timers[$timerName]['emalloc'] = -1; } return self::$_timers[$timerName]['emalloc']; default: if (!empty(self::$_timers[$timerName][$key])) { return self::$_timers[$timerName][$key]; } } return false; } public static function getTimers() { return self::$_timers; } /** * Output SQl Zend_Db_Profiler * */ public static function getSqlProfiler($res) { if(!$res){ return ''; } $out = ''; $profiler = $res->getProfiler(); if($profiler->getEnabled()) { $totalTime = $profiler->getTotalElapsedSecs(); $queryCount = $profiler->getTotalNumQueries(); $longestTime = 0; $longestQuery = null; foreach ($profiler->getQueryProfiles() as $query) { if ($query->getElapsedSecs() > $longestTime) { $longestTime = $query->getElapsedSecs(); $longestQuery = $query->getQuery(); } } $out .= 'Executed ' . $queryCount . ' queries in ' . $totalTime . ' seconds' . "
"; $out .= 'Average query length: ' . $totalTime / $queryCount . ' seconds' . "
"; $out .= 'Queries per second: ' . $queryCount / $totalTime . "
"; $out .= 'Longest query length: ' . $longestTime . "
"; $out .= 'Longest query:
' . $longestQuery . "
"; } return $out; } }