Commit 35b5b2ef by Qiang Xue

fixed profiling panel sorting.

parent 2df7d0a8
......@@ -53,9 +53,9 @@ class Profile extends Base
'pageSize' => 10,
],
'sort' => [
'attributes' => ['category', 'info', 'duration'],
'attributes' => ['category', 'seq', 'duration', 'info'],
'defaultOrder' => [
'duration' => SORT_DESC,
'seq' => SORT_ASC,
],
],
]);
......
......@@ -61,7 +61,7 @@ class ProfilingPanel extends Panel
/**
* Calculates given request profile messages timings.
* @return array timings
* @return array timings [token, category, timestamp, traces, nesting level, elapsed time]
*/
protected function calculateTimings()
{
......@@ -75,21 +75,19 @@ class ProfilingPanel extends Panel
foreach ($messages as $i => $log) {
list($token, $level, $category, $timestamp, $traces) = $log;
$log[5] = $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[] = [count($stack), $token, $category, $timestamp - $last[3], $traces];
$timings[$last[5]] = [$last[0], $last[2], $last[3], $last[4], count($stack), $timestamp - $last[3]];
}
}
}
$now = microtime(true);
while (($last = array_pop($stack)) !== null) {
$timings[] = [count($stack), $last[0], $last[2], $now - $last[3], $last[4]];
}
ksort($timings);
return $this->_timings = $timings;
return $this->_timings = array_values($timings);
}
public function save()
......@@ -113,12 +111,14 @@ class ProfilingPanel extends Panel
$this->_models = [];
$timings = $this->calculateTimings();
foreach($timings as $profileTiming) {
foreach($timings as $seq => $profileTiming) {
$this->_models[] = [
'duration' => $profileTiming[3] * 1000, #in milliseconds
'category' => $profileTiming[2],
'info' => $profileTiming[1],
'level' => $profileTiming[0],
'duration' => $profileTiming[5] * 1000, // in milliseconds
'category' => $profileTiming[1],
'info' => $profileTiming[0],
'level' => $profileTiming[4],
'timestamp' => $profileTiming[2],
'seq' => $seq,
];
}
}
......
......@@ -13,10 +13,22 @@ echo GridView::widget([
'columns' => [
['class' => 'yii\grid\SerialColumn'],
[
'attribute' => 'seq',
'label' => 'Time',
'value' => function ($data) {
$timeInSeconds = $data['timestamp'] / 1000;
$millisecondsDiff = (int)(($timeInSeconds - (int)$timeInSeconds) * 1000);
return date('H:i:s.',$timeInSeconds) . sprintf('%03d',$millisecondsDiff);
},
],
[
'attribute' => 'duration',
'value' => function ($data) {
return sprintf('%.1f ms',$data['duration']);
},
'options' => [
'width' => '10%',
],
],
'category',
[
......
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