PDF converter
* distributed under the OSL-3.0 License
*
* @package Html2pdf
* @author Laurent MINGUET
* @copyright 2017 Laurent MINGUET
*/
namespace Spipu\Html2Pdf\Debug;
/**
* Class Debug
*/
class Debug implements DebugInterface
{
/**
* @var float
*/
protected $startTime;
/**
* @var float
*/
protected $lastTime;
/**
* @var int
*/
protected $level = 0;
/**
* @var bool
*/
protected $htmlOutput;
/**
* Debug constructor
*
* @param bool $htmlOutput
*/
public function __construct($htmlOutput = true)
{
$this->htmlOutput = $htmlOutput;
}
/**
* display a debug line
*
* @param string $name
* @param string $timeTotal
* @param string $timeStep
* @param string $memoryUsage
* @param string $memoryPeak
*
* @return void
*/
protected function displayLine($name, $timeTotal, $timeStep, $memoryUsage, $memoryPeak)
{
$output =
str_pad($name, 30, ' ', STR_PAD_RIGHT).
str_pad($timeTotal, 12, ' ', STR_PAD_LEFT).
str_pad($timeStep, 12, ' ', STR_PAD_LEFT).
str_pad($memoryUsage, 15, ' ', STR_PAD_LEFT).
str_pad($memoryPeak, 15, ' ', STR_PAD_LEFT);
if ($this->htmlOutput) {
$output = ''.$output.'
';
}
echo $output."\n";
}
/**
* Start the debugger
*
* @return Debug
*/
public function start()
{
$time = microtime(true);
$this->startTime = $time;
$this->lastTime = $time;
$this->displayLine('step', 'time', 'delta', 'memory', 'peak');
$this->addStep('Init debug');
return $this;
}
/**
* stop the debugger
*
* @return Debug
*/
public function stop()
{
$this->addStep('Before output');
return $this;
}
/**
* add a debug step
*
* @param string $name step name
* @param boolean $level (true=up, false=down, null=nothing to do)
*
* @return Debug
*/
public function addStep($name, $level = null)
{
// if true : UP
if ($level === true) {
$this->level++;
}
$time = microtime(true);
$usage = memory_get_usage();
$peak = memory_get_peak_usage();
$type = ($level === true ? ' Begin' : ($level === false ? ' End' : ''));
$this->displayLine(
str_repeat(' ', $this->level) . $name . $type,
number_format(($time - $this->startTime)*1000, 1, '.', ' ').' ms',
number_format(($time - $this->lastTime)*1000, 1, '.', ' ').' ms',
number_format($usage/1024, 1, '.', ' ').' Ko',
number_format($peak/1024, 1, '.', ' ').' Ko'
);
$this->lastTime = $time;
// it false : DOWN
if ($level === false) {
$this->level--;
}
return $this;
}
}