PITS /
00896: Make StopWatch more informative and more flexible
Summary: Make StopWatch more informative and more flexible
Created: 2007-03-01 10:10
Status: Open
Category: Feature
From: Daniel Rairigh
Assigned:
Priority: 31
I am trying to revive this old proposal by suggesting a slightly different StopWatch with three main changes to the one in core:
- Move formatting to
StopWatchHTML(), so that customizing the output is possible without editingpmwiki.php. - Show time deltas instead of total times (and include total elapsed time at the end), because this way it is easier to notice abnormalities.
- Change time format to miliseconds, because:
- benchmarking web applications in the second range is strange: if a page takes longer than a second to generate, consider an angry visitor;
- it helps to notice that PmWiki is sometimes rather slow and, perhaps, prompts to investigate the bottlenecks.
Proposed code below. -- Rogut279s October 05, 2009, at 06:00 PM
function StopWatch($x) {
global $StopWatch, $EnableStopWatch;
if (!$EnableStopWatch) return;
static $wlast=0, $ulast=0, $n=0;
list($us,$wtime)=explode(' ', microtime());
$wtime+=$us;
if (!$wlast) $wlast=$wtime;
$StopWatch[++$n] = array($x, ($wtime-$wlast)*1000);
$wlast=$wtime;
if ($EnableStopWatch!=2) return;
$dat = getrusage();
$utime = $dat['ru_utime.tv_sec']*1000+$dat['ru_utime.tv_usec']/1000;
if (!$ulast) $ulast=$utime;
$StopWatch[$n][] = $utime-$ulast;
$ulast=$utime;
}
function StopWatchHTML($pagename, $print=0) {
global $StopWatch, $EnableStopWatch;
StopWatch('now');
$out='<pre>';
$wsum=0; $usum=0;
foreach ((array)$StopWatch as $t) {
$wsum+=$t[1];
if (isset($t[2])) {
$usum+=$t[2];
$out.=sprintf("%3d %3d %s\n", $t[1], $t[2], $t[0]);
}
else $out.=sprintf("%3d %s\n", $t[1], $t[0]);
}
if ($usum) $out.=sprintf("%3d %3d SUM\n", $wsum, $usum);
elseif ($wsum) $out.=sprintf("%3d SUM\n", $wsum);
$out.='</pre>';
if (is_array($StopWatch)) array_pop($StopWatch);
if ($print) echo $out;
return $out;
}
The original proposal below. Sorry for hijacking, but it lay here for 2.5 years without any activity...
Version: 2.1.27
OS: Linux, PHP 4.3.11
Description: This adds a nice header to the StopWatch output and a time delta (makes the length of time that each step requires is clear).
Patch:
--- /home/rairighd/Desktop/pmwiki-2.1.27/pmwiki.php 2006-12-11 09:56:21.000000000 -0500 +++ notes/pmwiki.php 2007-03-01 10:29:01.000000000 -0500-382,17 +382,24function StopWatch($x) { global$StopWatch,$EnableStopWatch; if (!$EnableStopWatch) return; - static $wstart = 0, $ustart = 0; + static $wstart = 0, $ustart = 0, $last=0; list($usec,$sec) = explode(' ',microtime()); - $wtime = ($sec+$usec); - if (!$wstart) $wstart = $wtime; + $wtime = ((float)$sec+(float)$usec); + if (!$wstart) { + $last = $wstart = $wtime; +$StopWatch[] = ($EnableStopWatch== 2)? sprintf("%5s %5s %5s Desc.", 'Elaps', 'Delta', 'CPU') : + sprintf("%5s %5s Desc.", 'Elaps', 'Delta'); + } + $delta = $wtime - $last; + $last = $wtime; + if ($EnableStopWatch!= 2) - {$StopWatch[] = sprintf("%05.2f %s", $wtime-$wstart, $x); return; } + {$StopWatch[] = sprintf("%05.2f %05.2f %s", $wtime-$wstart, $delta, $x); return; } $dat = getrusage(); $utime = ($dat['ru_utime.tv_sec']+$dat['ru_utime.tv_usec']/1000000); if (!$ustart) $ustart=$utime;$StopWatch[] = - sprintf("%05.2f %05.2f %s", $wtime-$wstart, $utime-$ustart, $x); + sprintf("%05.2f %05.2f %05.2f %s", $wtime-$wstart, $delta, $utime-$ustart, $x); } ## AsSpaced converts a string with WikiWords into a spaced version