From ee994efdf0bfc93f1101eeba74f741851f0a5d9f Mon Sep 17 00:00:00 2001 From: Qiang Xue Date: Tue, 9 Jul 2013 12:33:14 -0400 Subject: [PATCH] polishing debugger. --- framework/yii/db/Command.php | 8 ++-- framework/yii/debug/panels/DbPanel.php | 72 ++++++++++++++++++----------- framework/yii/debug/panels/RequestPanel.php | 4 +- 3 files changed, 51 insertions(+), 33 deletions(-) diff --git a/framework/yii/db/Command.php b/framework/yii/db/Command.php index 719f47f..9ac8459 100644 --- a/framework/yii/db/Command.php +++ b/framework/yii/db/Command.php @@ -275,13 +275,13 @@ class Command extends \yii\base\Component $rawSql = $this->getRawSql(); - Yii::trace("Executing SQL: $rawSql", __METHOD__); + Yii::info($rawSql, __METHOD__); if ($sql == '') { return 0; } - $token = "SQL: $sql"; + $token = $sql; try { Yii::beginProfile($token, __METHOD__); @@ -383,7 +383,7 @@ class Command extends \yii\base\Component $sql = $this->getSql(); $rawSql = $this->getRawSql(); - Yii::trace("Querying SQL: $rawSql", __METHOD__); + Yii::info($rawSql, __METHOD__); /** @var $cache \yii\caching\Cache */ if ($db->enableQueryCache && $method !== '') { @@ -403,7 +403,7 @@ class Command extends \yii\base\Component } } - $token = "SQL: $sql"; + $token = $sql; try { Yii::beginProfile($token, __METHOD__); diff --git a/framework/yii/debug/panels/DbPanel.php b/framework/yii/debug/panels/DbPanel.php index c9d8b7d..d4e68b7 100644 --- a/framework/yii/debug/panels/DbPanel.php +++ b/framework/yii/debug/panels/DbPanel.php @@ -24,10 +24,20 @@ class DbPanel extends Panel public function getSummary() { - $queryCount = count($this->data['messages']) / 2; + $timings = $this->calculateTimings(); + $queryCount = count($timings); + $queryTime = 0; + foreach ($timings as $timing) { + $queryTime += $timing[3]; + } + $queryTime = number_format($queryTime * 1000) . ' ms'; + $url = $this->getUrl(); $output = << - DB queries: $queryCount + + DB queries: $queryCount + time: $queryTime + EOD; return $queryCount > 0 ? $output : ''; @@ -35,34 +45,12 @@ EOD; public function getDetail() { - $messages = $this->data['messages']; - $timings = array(); - $stack = array(); - foreach ($messages as $i => $log) { - list($token, $level, $category, $timestamp) = $log; - $log[4] = $i; - if ($level == Logger::LEVEL_PROFILE_BEGIN) { - $stack[] = $log; - } elseif ($level == Logger::LEVEL_PROFILE_END) { - if (($last = array_pop($stack)) !== null && $last[0] === $token) { - $timings[$last[4]] = array(count($stack), $token, $last[3], $timestamp - $last[3]); - } - } - } - - $now = microtime(true); - while (($last = array_pop($stack)) !== null) { - $delta = $now - $last[3]; - $timings[$last[4]] = array(count($stack), $last[0], $last[2], $delta); - } - ksort($timings); - + $timings = $this->calculateTimings(); $rows = array(); foreach ($timings as $timing) { - $time = date('Y.m.d, H:i:s.', $timing[2]) . round(($timing[2] - floor($timing[2])) * 10000); $duration = sprintf('%.1f ms', $timing[3] * 1000); $procedure = str_repeat('', $timing[0]) . Html::encode($timing[1]); - $rows[] = "$time$duration$procedure"; + $rows[] = "$duration$procedure"; } $rows = implode("\n", $rows); @@ -72,7 +60,6 @@ EOD; - @@ -84,6 +71,37 @@ $rows EOD; } + private $_timings; + + protected function calculateTimings() + { + if ($this->_timings !== null) { + return $this->_timings; + } + $messages = $this->data['messages']; + $timings = array(); + $stack = array(); + foreach ($messages as $i => $log) { + list($token, $level, $category, $timestamp) = $log; + $log[4] = $i; + if ($level == Logger::LEVEL_PROFILE_BEGIN) { + $stack[] = $log; + } elseif ($level == Logger::LEVEL_PROFILE_END) { + if (($last = array_pop($stack)) !== null && $last[0] === $token) { + $timings[$last[4]] = array(count($stack), $token, $last[3], $timestamp - $last[3]); + } + } + } + + $now = microtime(true); + while (($last = array_pop($stack)) !== null) { + $delta = $now - $last[3]; + $timings[$last[4]] = array(count($stack), $last[0], $last[2], $delta); + } + ksort($timings); + return $this->_timings = $timings; + } + public function save() { $target = $this->module->logTarget; diff --git a/framework/yii/debug/panels/RequestPanel.php b/framework/yii/debug/panels/RequestPanel.php index a254929..4a4a484 100644 --- a/framework/yii/debug/panels/RequestPanel.php +++ b/framework/yii/debug/panels/RequestPanel.php @@ -31,11 +31,11 @@ class RequestPanel extends Panel return << - Peak memory: $memory + Memory: $memory
Time Duration Query