Index: trunk/core/kernel/utility/debugger.php =================================================================== diff -u -r932 -r945 --- trunk/core/kernel/utility/debugger.php (.../debugger.php) (revision 932) +++ trunk/core/kernel/utility/debugger.php (.../debugger.php) (revision 945) @@ -7,6 +7,7 @@ if(!defined('DBG_USE_SHUTDOWN_FUNC')) define('DBG_USE_SHUTDOWN_FUNC',1); if(!defined('DBG_HANDLE_ERRORS')) define('DBG_HANDLE_ERRORS', isset($_REQUEST['debug_host']) ? 0 : 1); if(!defined('DBG_RAISE_ON_WARNINGS')) define('DBG_RAISE_ON_WARNINGS',0); + if(!defined('DBG_SHOW_MEMORY_USAGE')) define('DBG_SHOW_MEMORY_USAGE',1); if(!defined('DOC_ROOT')) define('DOC_ROOT',$_SERVER['DOCUMENT_ROOT']); if(!defined('WINDOWS_ROOT')) define('WINDOWS_ROOT','w:'); @@ -37,15 +38,24 @@ var $OptionsMap = Array('shutdown_func' => 1, 'error_handler' => 2, 'output_buffer' => 4, 'highlight_output' => 8); + + /** + * Amount of memory used by debugger itself + * + * @var Array + * @access private + */ + var $memoryUsage=Array(); + function Debugger() { + $this->memoryUsage['error_handling']=0; // memory amount used by error handler $this->appendRequest(); } function initOptions() { - } function setOption($name,$value) @@ -387,6 +397,8 @@ */ function printReport($returnResult = false) { + $this->memoryUsage['debugger_start']=memory_get_usage(); + // show php session if any $this->appendSession(); @@ -614,20 +626,45 @@ } memoryUsage['debugger_finish']=memory_get_usage(); + $this->memoryUsage['print_report']=$this->memoryUsage['debugger_finish']-$this->memoryUsage['debugger_start']; + $this->memoryUsage['total']=$this->memoryUsage['print_report']+$this->memoryUsage['error_handling']; if($returnResult) { $ret = ob_get_contents(); ob_clean(); + if( ConstOn('DBG_SHOW_MEMORY_USAGE') ) $ret.=$this->getMemoryUsageReport(); return $ret; } else { ob_end_flush(); + if( ConstOn('DBG_SHOW_MEMORY_USAGE') ) echo $this->getMemoryUsageReport(); } } /** + * Format's memory usage report by debugger + * + * @return string + * @access private + */ + function getMemoryUsageReport() + { + $info=Array('printReport'=>'print_report', + 'saveError'=>'error_handling', + 'Total'=>'total'); + $ret=Array(); + foreach($info as $title => $value_key) + { + $ret[]=$title.': '.$this->formatSize($this->memoryUsage[$value_key]); + } + return implode('
',$ret); + } + + + /** * User-defined error handler * * @param int $errno @@ -638,13 +675,16 @@ */ function saveError($errno, $errstr, $errfile = '', $errline = '', $errcontext = '') { - //echo 'error ['.$errno.'] = ['.$errstr.']
'; + $memory_used=Array(); + $memory_used['begin']=memory_get_usage(); + $errorType = $this->getErrorNameByCode($errno); if(!$errorType) { trigger_error('Unknown error type ['.$errno.']', E_USER_ERROR); return false; } + if( strpos($errfile,'eval()\'d code') !== false ) { $errstr = '[EVAL, line '.$errline.']: '.$errstr; @@ -660,7 +700,8 @@ $this->TraceNextError=false; } $this->Data[] = Array('no' => $errno, 'str' => $errstr, 'file' => $errfile, 'line' => $errline, 'context' => $errcontext, 'debug_type' => 'error'); - + $memory_used['end']=memory_get_usage(); + $this->memoryUsage['error_handling']+=$memory_used['end']-$memory_used['begin']; if( substr($errorType,0,5) == 'Fatal') { echo ''; @@ -675,6 +716,35 @@ fclose($fp); } + /** + * Formats file/memory size in nice way + * + * @param int $bytes + * @return string + * @access public + */ + function formatSize($bytes) + { + if ($bytes >= 1099511627776) { + $return = round($bytes / 1024 / 1024 / 1024 / 1024, 2); + $suffix = "TB"; + } elseif ($bytes >= 1073741824) { + $return = round($bytes / 1024 / 1024 / 1024, 2); + $suffix = "GB"; + } elseif ($bytes >= 1048576) { + $return = round($bytes / 1024 / 1024, 2); + $suffix = "MB"; + } elseif ($bytes >= 1024) { + $return = round($bytes / 1024, 2); + $suffix = "KB"; + } else { + $return = $bytes; + $suffix = "Byte"; + } + $return .= ' '.$suffix; + return $return; + } + } function ConstOn($const_name)