2 /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
4 // +----------------------------------------------------------------------+
5 // | Akelos Framework - http://www.akelos.org |
6 // +----------------------------------------------------------------------+
7 // | Copyright (c) 2002-2006, Akelos Media, S.L. & Bermi Ferrer Martinez |
8 // | Released under the GNU Lesser General Public License, see LICENSE.txt|
9 // +----------------------------------------------------------------------+
12 * @package ActiveSupport
13 * @subpackage Reporting
14 * @author Bermi Ferrer <bermi a.t akelos c.om>
15 * @copyright Copyright (c) 2002-2006, Akelos Media, S.L. http://www.akelos.org
16 * @license GNU Lesser General Public License <http://www.gnu.org/copyleft/lesser.html>
19 if(!function_exists('memory_get_usage')){
20 function memory_get_usage()
22 if ( substr(PHP_OS
,0,3) == 'WIN') {
23 $tmp = explode(',"'.getmypid().'",',`TASKLIST
/FO
"CSV"`
);
24 $tmp = explode("\n",$tmp[1]);
25 $tmp = explode('"',trim($tmp[0],'"KB '));
26 return intval(str_replace(array('.',','),array(''),$tmp[count($tmp)-1]))*1024;
36 var $_timer = array();
38 function init($message='Initializing profiler')
40 $this->_timeStart
= $this->getMicrotime();
41 $this->setFlag($message);
44 function getMicrotime()
46 return array_sum(explode(' ',microtime()));
49 function setFlag($flag)
51 $memory = AK_PROFILER_GET_MEMORY ?
memory_get_usage() : 1;
52 $this->_timer
[] = array($this->getMicrotime(), $flag, $memory);
55 function renderReport()
57 $this->setFlag('end');
58 $end_time = $this->getMicrotime();
61 $prev_time = $this->_timeStart
;
62 foreach($this->_timer
as $k=>$timer ){
63 $initial_memory = !isset($initial_memory) ?
$timer[2] : $initial_memory;
64 $average = number_format(100*(($timer[0]-$prev_time)/($end_time-$this->_timeStart
)),4).' %';
66 $memory = ($timer[2]-$initial_memory)/1024;
69 "<li>$average (".($k+
1).") {$timer[1]}\t".
70 number_format($timer[0]-$this->_timeStart
,6)."\t".
71 number_format(($timer[0] - $prev_time),6)."\t".
73 "{$memory} KB (".number_format($timer[2]/1024,2)." KB)\n</li>";
75 $prev_time = $timer[0];
78 $report = array_reverse($report);
79 $this->report
.= "flag\tstarted\telapsed\taverage\n\n\nTotal time: <ul>".join("\n",$report).number_format($end_time-$this->_timeStart
,6)."</ul>\n";
84 if($this->report
== ''){
85 $this->renderReport();
87 Ak
::file_put_contents('profiler_results.txt',$this->report
);
92 if($this->report
== ''){
93 $this->renderReport();