Merge pull request #6707 from nupplaphil/6691-rendertime-fix

Fixing Rendertime
This commit is contained in:
Hypolite Petovan 2019-02-20 12:08:45 -05:00 committed by GitHub
commit 1637835461
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 96 additions and 55 deletions

View File

@ -32,6 +32,16 @@ class Profiler implements ContainerInterface
*/
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 $renderTime True, if the Profiler should measure the whole rendertime including functions
@ -119,18 +129,76 @@ class Profiler implements ContainerInterface
$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
*
* @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
*/
public function saveLog(LoggerInterface $logger, $message = '')
{
// Write down the performance values into the log
if (!$this->enabled) {
return;
}
$duration = microtime(true) - $this->get('start');
$logger->info(
$message,
@ -149,57 +217,10 @@ class Profiler implements ContainerInterface
]
);
if (!$this->rendertime) {
return;
if ($this->isRendertime()) {
$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']);
}
/**

View File

@ -177,5 +177,25 @@ class ProfilerTest extends MockedTest
}
$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());
}
}