stages = array(); $this->databaseUsage = array('queries'=>0, 'clock'=>0); $this->databaseQueryLog = ''; $this->prevUsage = $this->startUsage = $this->getCurrent(); } /** * Return an array representing the resource usage as of now. */ public function getCurrent() { $usage = array( 'files' => count(get_included_files()), 'queries' => $this->databaseUsage['queries'], 'ram' => function_exists('memory_get_usage') ? memory_get_usage() : 0, 'clock' => array_sum(explode(' ', microtime())), 'mysql' => $this->databaseUsage['clock'], ); if (function_exists('getrusage')) { $rusage = getrusage(); $usage['cpu'] = $rusage["ru_utime.tv_sec"] + $rusage["ru_stime.tv_sec"] + ($rusage["ru_utime.tv_usec"] + $rusage["ru_stime.tv_usec"]) / 1000000; } else $usage['cpu'] = 0; $usage['other'] = $usage['clock'] - $usage['cpu'] - $usage['mysql']; return $usage; } /** * Mark the beginning of a new stage of script execution and store usages accordingly. * @param $stage */ public function mark($stage) { $usage = $this->getCurrent(); $this->stages[$stage] = $this->delta($this->prevUsage, $usage); $this->prevUsage = $usage; } /** * Logs query and updates database usage stats. * @param $query * @param $usedtime * @param $gotrows * @param $gotcolumns */ public function logDatabaseQuery($query, $usedtime, $gotrows, $gotcolumns) { $this->databaseUsage['clock'] += $usedtime; if (strlen($this->databaseQueryLog) < 1048576) { // don't keep track of big tests $rowcolstring = ''; if (is_numeric($gotrows)) $rowcolstring .= ' - ' . $gotrows . ($gotrows == 1 ? ' row' : ' rows'); if (is_numeric($gotcolumns)) $rowcolstring .= ' - ' . $gotcolumns . ($gotcolumns == 1 ? ' column' : ' columns'); $this->databaseQueryLog .= $query . "\n\n" . sprintf('%.2f ms', $usedtime*1000) . $rowcolstring . "\n\n"; } $this->databaseUsage['queries']++; } /** * Output an (ugly) block of HTML detailing all resource usage and database queries. */ public function output() { $totaldelta = $this->delta($this->startUsage, $this->getCurrent()); $stages = $this->stages; $stages['total'] = $totaldelta; ?> $stagedelta) : ?>
Total PHP MySQL Other RAM
Time (ms) % Time (ms) % File count Time (ms) % Query count Time (ms) % Amount %
$value) $delta[$key] = max(0, $value-@$oldusage[$key]); return $delta; } }