Commit e3308996 by Qiang Xue

Added call stack display for DB debug panel.

parent 915a3cd7
...@@ -51,7 +51,16 @@ EOD; ...@@ -51,7 +51,16 @@ EOD;
$rows = array(); $rows = array();
foreach ($timings as $timing) { foreach ($timings as $timing) {
$duration = sprintf('%.1f ms', $timing[3] * 1000); $duration = sprintf('%.1f ms', $timing[3] * 1000);
$procedure = str_repeat('<span class="indent">→</span>', $timing[0]) . Html::encode($timing[1]); $procedure = Html::encode($timing[1]);
$traces = $timing[4];
if (!empty($traces)) {
$procedure .= Html::ul($traces, array(
'class' => 'trace',
'item' => function ($trace) {
return "<li>{$trace['file']}({$trace['line']})</li>";
},
));
}
$rows[] = "<tr><td style=\"width: 80px;\">$duration</td><td>$procedure</td>"; $rows[] = "<tr><td style=\"width: 80px;\">$duration</td><td>$procedure</td>";
} }
$rows = implode("\n", $rows); $rows = implode("\n", $rows);
...@@ -85,12 +94,12 @@ EOD; ...@@ -85,12 +94,12 @@ EOD;
$stack = array(); $stack = array();
foreach ($messages as $i => $log) { foreach ($messages as $i => $log) {
list($token, $level, $category, $timestamp) = $log; list($token, $level, $category, $timestamp) = $log;
$log[4] = $i; $log[5] = $i;
if ($level == Logger::LEVEL_PROFILE_BEGIN) { if ($level == Logger::LEVEL_PROFILE_BEGIN) {
$stack[] = $log; $stack[] = $log;
} elseif ($level == Logger::LEVEL_PROFILE_END) { } elseif ($level == Logger::LEVEL_PROFILE_END) {
if (($last = array_pop($stack)) !== null && $last[0] === $token) { if (($last = array_pop($stack)) !== null && $last[0] === $token) {
$timings[$last[4]] = array(count($stack), $token, $last[3], $timestamp - $last[3]); $timings[$last[5]] = array(count($stack), $token, $last[3], $timestamp - $last[3], $last[4]);
} }
} }
} }
...@@ -98,7 +107,7 @@ EOD; ...@@ -98,7 +107,7 @@ EOD;
$now = microtime(true); $now = microtime(true);
while (($last = array_pop($stack)) !== null) { while (($last = array_pop($stack)) !== null) {
$delta = $now - $last[3]; $delta = $now - $last[3];
$timings[$last[4]] = array(count($stack), $last[0], $last[2], $delta); $timings[$last[5]] = array(count($stack), $last[0], $last[2], $delta, $last[4]);
} }
ksort($timings); ksort($timings);
return $this->_timings = $timings; return $this->_timings = $timings;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment