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)