mirror of
https://github.com/yiisoft/yii2.git
synced 2025-08-22 19:31:02 +08:00
fixed profiling panel sorting.
This commit is contained in:
@ -53,9 +53,9 @@ class Profile extends Base
|
|||||||
'pageSize' => 10,
|
'pageSize' => 10,
|
||||||
],
|
],
|
||||||
'sort' => [
|
'sort' => [
|
||||||
'attributes' => ['category', 'info', 'duration'],
|
'attributes' => ['category', 'seq', 'duration', 'info'],
|
||||||
'defaultOrder' => [
|
'defaultOrder' => [
|
||||||
'duration' => SORT_DESC,
|
'seq' => SORT_ASC,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
|
@ -61,7 +61,7 @@ class ProfilingPanel extends Panel
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculates given request profile messages timings.
|
* Calculates given request profile messages timings.
|
||||||
* @return array timings
|
* @return array timings [token, category, timestamp, traces, nesting level, elapsed time]
|
||||||
*/
|
*/
|
||||||
protected function calculateTimings()
|
protected function calculateTimings()
|
||||||
{
|
{
|
||||||
@ -75,21 +75,19 @@ class ProfilingPanel extends Panel
|
|||||||
|
|
||||||
foreach ($messages as $i => $log) {
|
foreach ($messages as $i => $log) {
|
||||||
list($token, $level, $category, $timestamp, $traces) = $log;
|
list($token, $level, $category, $timestamp, $traces) = $log;
|
||||||
|
$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[] = [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);
|
ksort($timings);
|
||||||
while (($last = array_pop($stack)) !== null) {
|
|
||||||
$timings[] = [count($stack), $last[0], $last[2], $now - $last[3], $last[4]];
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->_timings = $timings;
|
return $this->_timings = array_values($timings);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function save()
|
public function save()
|
||||||
@ -113,12 +111,14 @@ class ProfilingPanel extends Panel
|
|||||||
$this->_models = [];
|
$this->_models = [];
|
||||||
$timings = $this->calculateTimings();
|
$timings = $this->calculateTimings();
|
||||||
|
|
||||||
foreach($timings as $profileTiming) {
|
foreach($timings as $seq => $profileTiming) {
|
||||||
$this->_models[] = [
|
$this->_models[] = [
|
||||||
'duration' => $profileTiming[3] * 1000, #in milliseconds
|
'duration' => $profileTiming[5] * 1000, // in milliseconds
|
||||||
'category' => $profileTiming[2],
|
'category' => $profileTiming[1],
|
||||||
'info' => $profileTiming[1],
|
'info' => $profileTiming[0],
|
||||||
'level' => $profileTiming[0],
|
'level' => $profileTiming[4],
|
||||||
|
'timestamp' => $profileTiming[2],
|
||||||
|
'seq' => $seq,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,11 +12,23 @@ echo GridView::widget([
|
|||||||
'filterUrl' => $panel->getUrl(),
|
'filterUrl' => $panel->getUrl(),
|
||||||
'columns' => [
|
'columns' => [
|
||||||
['class' => 'yii\grid\SerialColumn'],
|
['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',
|
'attribute' => 'duration',
|
||||||
'value' => function ($data) {
|
'value' => function ($data) {
|
||||||
return sprintf('%.1f ms',$data['duration']);
|
return sprintf('%.1f ms',$data['duration']);
|
||||||
},
|
},
|
||||||
|
'options' => [
|
||||||
|
'width' => '10%',
|
||||||
|
],
|
||||||
],
|
],
|
||||||
'category',
|
'category',
|
||||||
[
|
[
|
||||||
|
Reference in New Issue
Block a user