|
|
@ -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, |
|
|
|
]; |
|
|
|
]; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|