Merge pull request #6707 from nupplaphil/6691-rendertime-fix
Fixing Rendertime
This commit is contained in:
commit
1637835461
2 changed files with 96 additions and 55 deletions
|
@ -32,6 +32,16 @@ class Profiler implements ContainerInterface
|
||||||
*/
|
*/
|
||||||
private $rendertime;
|
private $rendertime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* True, if the Profiler should measure the whole rendertime including functions
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isRendertime()
|
||||||
|
{
|
||||||
|
return $this->rendertime;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param bool $enabled True, if the Profiler is enabled
|
* @param bool $enabled True, if the Profiler is enabled
|
||||||
* @param bool $renderTime True, if the Profiler should measure the whole rendertime including functions
|
* @param bool $renderTime True, if the Profiler should measure the whole rendertime including functions
|
||||||
|
@ -119,18 +129,76 @@ class Profiler implements ContainerInterface
|
||||||
$this->callstack['parser'] = [];
|
$this->callstack['parser'] = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the rendertime string
|
||||||
|
*
|
||||||
|
* @return string the rendertime
|
||||||
|
*/
|
||||||
|
public function getRendertimeString()
|
||||||
|
{
|
||||||
|
$output = '';
|
||||||
|
|
||||||
|
if (!$this->enabled || !$this->rendertime) {
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($this->callstack["database"])) {
|
||||||
|
$output .= "\nDatabase Read:\n";
|
||||||
|
foreach ($this->callstack["database"] as $func => $time) {
|
||||||
|
$time = round($time, 3);
|
||||||
|
if ($time > 0) {
|
||||||
|
$output .= $func . ": " . $time . "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isset($this->callstack["database_write"])) {
|
||||||
|
$output .= "\nDatabase Write:\n";
|
||||||
|
foreach ($this->callstack["database_write"] as $func => $time) {
|
||||||
|
$time = round($time, 3);
|
||||||
|
if ($time > 0) {
|
||||||
|
$output .= $func . ": " . $time . "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isset($this->callstack["cache"])) {
|
||||||
|
$output .= "\nCache Read:\n";
|
||||||
|
foreach ($this->callstack["cache"] as $func => $time) {
|
||||||
|
$time = round($time, 3);
|
||||||
|
if ($time > 0) {
|
||||||
|
$output .= $func . ": " . $time . "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isset($this->callstack["cache_write"])) {
|
||||||
|
$output .= "\nCache Write:\n";
|
||||||
|
foreach ($this->callstack["cache_write"] as $func => $time) {
|
||||||
|
$time = round($time, 3);
|
||||||
|
if ($time > 0) {
|
||||||
|
$output .= $func . ": " . $time . "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isset($this->callstack["network"])) {
|
||||||
|
$output .= "\nNetwork:\n";
|
||||||
|
foreach ($this->callstack["network"] as $func => $time) {
|
||||||
|
$time = round($time, 3);
|
||||||
|
if ($time > 0) {
|
||||||
|
$output .= $func . ": " . $time . "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save the current profiling data to a log entry
|
* Save the current profiling data to a log entry
|
||||||
*
|
*
|
||||||
* @param LoggerInterface $logger The logger to save the current log
|
* @param LoggerInterface $logger The logger to save the current log
|
||||||
* @param string $message Additional message for the log
|
* @param string $message Additional message for the log
|
||||||
*/
|
*/
|
||||||
public function saveLog(LoggerInterface $logger, $message = '')
|
public function saveLog(LoggerInterface $logger, $message = '')
|
||||||
{
|
{
|
||||||
// Write down the performance values into the log
|
|
||||||
if (!$this->enabled) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$duration = microtime(true) - $this->get('start');
|
$duration = microtime(true) - $this->get('start');
|
||||||
$logger->info(
|
$logger->info(
|
||||||
$message,
|
$message,
|
||||||
|
@ -149,57 +217,10 @@ class Profiler implements ContainerInterface
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!$this->rendertime) {
|
if ($this->isRendertime()) {
|
||||||
return;
|
$output = $this->getRendertimeString();
|
||||||
|
$logger->info($message . ": " . $output, ['action' => 'profiling']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$o = '';
|
|
||||||
if (isset($this->callstack["database"])) {
|
|
||||||
$o .= "\nDatabase Read:\n";
|
|
||||||
foreach ($this->callstack["database"] as $func => $time) {
|
|
||||||
$time = round($time, 3);
|
|
||||||
if ($time > 0) {
|
|
||||||
$o .= $func . ": " . $time . "\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isset($this->callstack["database_write"])) {
|
|
||||||
$o .= "\nDatabase Write:\n";
|
|
||||||
foreach ($this->callstack["database_write"] as $func => $time) {
|
|
||||||
$time = round($time, 3);
|
|
||||||
if ($time > 0) {
|
|
||||||
$o .= $func . ": " . $time . "\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isset($this->callstack["cache"])) {
|
|
||||||
$o .= "\nCache Read:\n";
|
|
||||||
foreach ($this->callstack["cache"] as $func => $time) {
|
|
||||||
$time = round($time, 3);
|
|
||||||
if ($time > 0) {
|
|
||||||
$o .= $func . ": " . $time . "\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isset($this->callstack["cache_write"])) {
|
|
||||||
$o .= "\nCache Write:\n";
|
|
||||||
foreach ($this->callstack["cache_write"] as $func => $time) {
|
|
||||||
$time = round($time, 3);
|
|
||||||
if ($time > 0) {
|
|
||||||
$o .= $func . ": " . $time . "\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (isset($this->callstack["network"])) {
|
|
||||||
$o .= "\nNetwork:\n";
|
|
||||||
foreach ($this->callstack["network"] as $func => $time) {
|
|
||||||
$time = round($time, 3);
|
|
||||||
if ($time > 0) {
|
|
||||||
$o .= $func . ": " . $time . "\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$logger->info($message . ": " . $o, ['action' => 'profiling']);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -177,5 +177,25 @@ class ProfilerTest extends MockedTest
|
||||||
}
|
}
|
||||||
|
|
||||||
$profiler->saveLog($this->logger, 'test');
|
$profiler->saveLog($this->logger, 'test');
|
||||||
|
|
||||||
|
$output = $profiler->getRendertimeString();
|
||||||
|
|
||||||
|
foreach ($data as $perf => $items) {
|
||||||
|
foreach ($items['functions'] as $function) {
|
||||||
|
// assert that the output contains the functions
|
||||||
|
$this->assertRegExp('/' . $function . ': \d+/', $output);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test if no rendertime is set
|
||||||
|
*/
|
||||||
|
public function testNoRenderTime()
|
||||||
|
{
|
||||||
|
$profiler = new Profiler(true, false);
|
||||||
|
|
||||||
|
$this->assertFalse($profiler->isRendertime());
|
||||||
|
$this->assertEmpty($profiler->getRendertimeString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue