mirror of
https://github.com/friendica/friendica
synced 2024-11-10 12:22:53 +00:00
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;
|
||||
|
||||
/**
|
||||
* 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']);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue