SOURCES: php-pecl-apd-cvs.patch (NEW), php-pecl-apd-build_fix.patc...

adamg adamg at pld-linux.org
Tue Dec 26 19:37:21 CET 2006


Author: adamg                        Date: Tue Dec 26 18:37:20 2006 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- cvs.patch replaces -build_fix.patch

---- Files affected:
SOURCES:
   php-pecl-apd-cvs.patch (NONE -> 1.1)  (NEW), php-pecl-apd-build_fix.patch (1.1 -> NONE)  (REMOVED)

---- Diffs:

================================================================
Index: SOURCES/php-pecl-apd-cvs.patch
diff -u /dev/null SOURCES/php-pecl-apd-cvs.patch:1.1
--- /dev/null	Tue Dec 26 19:37:20 2006
+++ SOURCES/php-pecl-apd-cvs.patch	Tue Dec 26 19:37:15 2006
@@ -0,0 +1,989 @@
+Index: apd/php_apd.c
+===================================================================
+RCS file: /repository/pecl/apd/php_apd.c,v
+retrieving revision 1.59
+retrieving revision 1.67
+diff -u -r1.59 -r1.67
+--- apd/php_apd.c	28 Sep 2004 03:44:54 -0000	1.59
++++ apd/php_apd.c	11 Dec 2006 06:59:43 -0000	1.67
+@@ -62,7 +62,7 @@
+ #endif
+ ZEND_DLEXPORT void (*old_execute)(zend_op_array *op_array TSRMLS_DC);
+ 
+-ZEND_DLEXPORT void onStatement(zend_op_array *op_array TSRMLS_DC);
++ZEND_DLEXPORT void onStatement(zend_op_array *op_array);
+ ZEND_DECLARE_MODULE_GLOBALS(apd);
+ 
+ /* This comes from php install tree. */
+@@ -360,20 +360,20 @@
+ 		return;
+ 	}
+ 	
+-	if (zend_hash_find(APD_GLOBALS(file_summary), (char *) filename, strlen(filename) + 1, (void *) &filenum) == FAILURE) {
++	if (zend_hash_find(&APD_GLOBALS(file_summary), (char *) filename, strlen(filename) + 1, (void *) &filenum) == FAILURE) {
+ 		filenum = (int *) emalloc(sizeof(int));
+ 		*filenum = ++APD_GLOBALS(file_index);
+ 		APD_GLOBALS(output).file_reference(*filenum, filename);
+-		zend_hash_add(APD_GLOBALS(file_summary), (char *) filename, strlen(filename) + 1, filenum, sizeof(int), NULL);
++		zend_hash_add(&APD_GLOBALS(file_summary), (char *) filename, strlen(filename) + 1, filenum, sizeof(int), NULL);
+ 	}
+ 	APD_GLOBALS(current_file_index) = *filenum;
+ 
+-	if (zend_hash_find(APD_GLOBALS(function_summary), (char *) fname, strlen(fname)+1, (void *) &function_index) == SUCCESS) {
++	if (zend_hash_find(&APD_GLOBALS(function_summary), (char *) fname, strlen(fname)+1, (void *) &function_index) == SUCCESS) {
+ 		APD_GLOBALS(output).enter_function(*function_index, *filenum, linenum);
+ 	} else {
+ 		function_index = (int *) emalloc(sizeof(int));
+ 		*function_index = ++APD_GLOBALS(function_index);
+-		zend_hash_add(APD_GLOBALS(function_summary), (char *) fname, strlen(fname)+1, function_index, sizeof(int), NULL);
++		zend_hash_add(&APD_GLOBALS(function_summary), (char *) fname, strlen(fname)+1, function_index, sizeof(int), NULL);
+ 		APD_GLOBALS(output).declare_function(*function_index, fname, type);
+ 		APD_GLOBALS(output).enter_function(*function_index, *filenum, linenum);
+ 	}
+@@ -393,16 +393,22 @@
+ 		return;
+ 	}
+ 
++#if PHP_MAJOR_VERSION == 5
++#if PHP_MINOR_VERSION < 2
+ #if MEMORY_LIMIT
+ 	allocated = AG(memory_limit);
+ #endif
++#else
++	allocated = zend_memory_usage(0 TSRMLS_CC) - APD_GLOBALS(entry_memory_usage);
++#endif
++#endif
+ 	log_time(TSRMLS_C);	
+-	if (zend_hash_find(APD_GLOBALS(function_summary), fname, strlen(fname) + 1, (void *) &function_index) == SUCCESS) {
++	if (zend_hash_find(&APD_GLOBALS(function_summary), fname, strlen(fname) + 1, (void *) &function_index) == SUCCESS) {
+ 		APD_GLOBALS(output).exit_function(*function_index, allocated);
+ 	} else {
+ 		function_index = (int *) emalloc(sizeof(int));
+ 		*function_index = ++APD_GLOBALS(function_index);
+-		zend_hash_add(APD_GLOBALS(function_summary), fname, strlen(fname)+1, function_index, sizeof(int), NULL);
++		zend_hash_add(&APD_GLOBALS(function_summary), fname, strlen(fname)+1, function_index, sizeof(int), NULL);
+ 		APD_GLOBALS(output).exit_function(*function_index, allocated);
+ 	}
+ }
+@@ -421,7 +427,15 @@
+ 		stime = diff_times(wall_ru.ru_stime, APD_GLOBALS(last_ru).ru_stime);
+ 		rtime = diff_times(clock, APD_GLOBALS(last_clock));
+ 		if(utime || stime || rtime) {
+-			APD_GLOBALS(output).elapsed_time(APD_GLOBALS(current_file_index), zend_get_executed_lineno(TSRMLS_C), utime, stime, rtime);
++            int lineno = 0;
++            if(EG(active_op_array)) {
++				if(EG(active_op_array)->start_op) {
++					lineno = EG(active_op_array)->start_op->lineno;
++				} else if(EG(active_op_array)->opcodes) {
++					lineno = EG(active_op_array)->opcodes->lineno;
++				}
++			} 
++			APD_GLOBALS(output).elapsed_time(APD_GLOBALS(current_file_index), lineno, utime, stime, rtime);
+ 		}
+ 	}
+ 	
+@@ -475,27 +489,14 @@
+    Module Startup and Shutdown Function Definitions
+    --------------------------------------------------------------------------- */
+ 
+-static void php_apd_init_globals(zend_apd_globals *apd_globals) 
+-{
+-	memset(apd_globals, 0, sizeof(zend_apd_globals));   
+-	
+-	apd_globals->function_summary = (HashTable *) malloc(sizeof(HashTable));
+-	apd_globals->file_summary = (HashTable *) malloc(sizeof(HashTable));
+-
+-	zend_hash_init(apd_globals->function_summary, 0, NULL, NULL, 1);
+-	zend_hash_init(apd_globals->file_summary, 0, NULL, NULL, 1);
+-
+-}
+-
+-static void php_apd_free_globals(zend_apd_globals *apd_globals)
++static void php_apd_init_globals(zend_apd_globals *apd_globals)
+ {
+-	free(apd_globals->function_summary);
+-	free(apd_globals->file_summary);
++    memset(apd_globals, 0, sizeof(apd_globals));
+ }
+ 
+ PHP_MINIT_FUNCTION(apd)
+ {
+-	ZEND_INIT_MODULE_GLOBALS(apd, php_apd_init_globals, php_apd_free_globals);
++	ZEND_INIT_MODULE_GLOBALS(apd, php_apd_init_globals, NULL)
+ 	REGISTER_INI_ENTRIES();
+ 	old_execute = zend_execute;
+ 	zend_execute = apd_execute;
+@@ -511,10 +512,11 @@
+ 	void **p;
+ 	int argCount;
+ 	zval **object_ptr_ptr;
++	
+   	fname = apd_get_active_function_name(op_array TSRMLS_CC);
+    	trace_function_entry(EG(function_table), fname, ZEND_USER_FUNCTION,
+ 						zend_get_executed_filename(TSRMLS_C),
+-						zend_get_executed_lineno(TSRMLS_C));
++						EG(in_execution)?zend_get_executed_lineno(TSRMLS_C):0);
+    	old_execute(op_array TSRMLS_CC);
+    	trace_function_exit(fname);
+    	efree(fname);
+@@ -534,7 +536,7 @@
+    	fname = apd_get_active_function_name(execd->op_array TSRMLS_CC);
+    	trace_function_entry(EG(function_table), fname, ZEND_INTERNAL_FUNCTION,
+ 						zend_get_executed_filename(TSRMLS_C),
+-						zend_get_executed_lineno(TSRMLS_C));
++						EG(in_execution)?zend_get_executed_lineno(TSRMLS_C):0);
+ 	execute_internal(execute_data_ptr, return_value_used TSRMLS_CC);
+ 	trace_function_exit(fname);
+ 	efree(fname);
+@@ -545,6 +547,8 @@
+ 
+ PHP_RINIT_FUNCTION(apd)
+ {
++	zend_hash_init(&APD_GLOBALS(function_summary), 0, NULL, NULL, 1);
++	zend_hash_init(&APD_GLOBALS(file_summary), 0, NULL, NULL, 1);
+ 	APD_GLOBALS(output).header = apd_pprof_output_header;
+ 	APD_GLOBALS(output).footer = apd_pprof_output_footer;
+ 	APD_GLOBALS(output).file_reference = apd_pprof_output_file_reference;
+@@ -553,10 +557,13 @@
+ 	APD_GLOBALS(output).enter_function = apd_pprof_output_enter_function;
+ 	APD_GLOBALS(output).exit_function = apd_pprof_output_exit_function;
+ 
++	APD_GLOBALS(pproftrace) = 0;
++	APD_GLOBALS(pprof_file) = NULL;
+ 	APD_GLOBALS(dump_file) = stderr;
+ 	APD_GLOBALS(dump_sock_id) = 0;
+ 	APD_GLOBALS(interactive_mode) = 0;
+ 	APD_GLOBALS(ignore_interactive) = 0;  
++	APD_GLOBALS(entry_memory_usage) = 0;
+ 	gettimeofday(&APD_GLOBALS(last_clock), NULL);
+ 	getrusage(RUSAGE_SELF, &APD_GLOBALS(last_ru));
+ 	APD_GLOBALS(first_ru) = APD_GLOBALS(last_ru);
+@@ -585,8 +592,8 @@
+ 		APD_GLOBALS(dump_sock_id)=0;
+ 	}
+ 
+-	zend_hash_clean(APD_GLOBALS(function_summary));
+-	zend_hash_clean(APD_GLOBALS(file_summary));
++	zend_hash_clean(&APD_GLOBALS(function_summary));
++	zend_hash_clean(&APD_GLOBALS(file_summary));
+ 	APD_GLOBALS(counter)++;
+ 	return SUCCESS;
+ }
+@@ -722,15 +729,15 @@
+ 	APD_GLOBALS(output).header();
+ 
+ 	filename = zend_get_executed_filename(TSRMLS_C);
+-	linenum = zend_get_executed_lineno(TSRMLS_C);
++	linenum = EG(in_execution)?zend_get_executed_lineno(TSRMLS_C):0;
+ 
+ 	fnum = (int *) emalloc(sizeof(int));
+ 	*fnum = APD_GLOBALS(function_index)++;
+-	zend_hash_add(APD_GLOBALS(function_summary), fname, strlen(fname)+1, fnum, sizeof(int), NULL);
++	zend_hash_add(&APD_GLOBALS(function_summary), fname, strlen(fname)+1, fnum, sizeof(int), NULL);
+ 
+ 	filenum = (int *) emalloc(sizeof(int));
+ 	*filenum = APD_GLOBALS(file_index)++;
+-	zend_hash_add(APD_GLOBALS(file_summary), (char *) filename, strlen(filename)+1, filenum, sizeof(int), NULL);
++	zend_hash_add(&APD_GLOBALS(file_summary), (char *) filename, strlen(filename)+1, filenum, sizeof(int), NULL);
+ 
+ 	APD_GLOBALS(output).file_reference(*filenum, filename);
+ 	APD_GLOBALS(output).declare_function(*fnum, fname, ZEND_USER_FUNCTION);
+@@ -738,7 +745,7 @@
+ 
+ 	fnum = (int *) emalloc(sizeof(int));
+ 	*fnum = APD_GLOBALS(function_index)++;
+-	zend_hash_add(APD_GLOBALS(function_summary), ent_fname, strlen(ent_fname)+1, fnum, sizeof(int), NULL);
++	zend_hash_add(&APD_GLOBALS(function_summary), ent_fname, strlen(ent_fname)+1, fnum, sizeof(int), NULL);
+ 
+ 	APD_GLOBALS(output).declare_function(*fnum, ent_fname, ZEND_USER_FUNCTION);
+ 	APD_GLOBALS(output).enter_function(*fnum, *filenum,  linenum);
+@@ -768,43 +775,21 @@
+ 	int issock =0;
+ 	int socketd = 0;
+ 	int path_len;
+-	char *dumpdir;
++	char *dumpdir = NULL, *fragment = "pprof";
++	int dumpdirlen, fragmentlen;
+ 	char path[MAXPATHLEN];
+-	zval  **z_dumpdir;
+-
+-	if(ZEND_NUM_ARGS() > 1 )
+-		{
+-			ZEND_WRONG_PARAM_COUNT();
+-		}
+-	if(ZEND_NUM_ARGS() == 0)
+-		{
+-			if(APD_GLOBALS(dumpdir)) {
+-				dumpdir = APD_GLOBALS(dumpdir);
+-			}
+-			else {
+-				zend_error(E_WARNING, "%s() no dumpdir specified",
+-						   get_active_function_name(TSRMLS_C));
+-				RETURN_FALSE;
+-			}
+-			APD_GLOBALS(pproftrace) = 1;
+-		}
+-	else {
+-		if(zend_get_parameters_ex(1, &z_dumpdir) == FAILURE)
+-			{
+-				ZEND_WRONG_PARAM_COUNT();
+-			}
+-		APD_GLOBALS(pproftrace) = 1;
+ 
+-		convert_to_string_ex(z_dumpdir);
+-		dumpdir = Z_STRVAL_PP(z_dumpdir);
++	dumpdir = APD_GLOBALS(dumpdir);
++	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ss", &dumpdir, &dumpdirlen, &fragment, &fragmentlen) == FAILURE) {
++		return;
+ 	}
+-	
+-	snprintf(path, MAXPATHLEN, "%s/pprof.%05d.%d", dumpdir, getpid(), APD_GLOBALS(counter));
++	APD_GLOBALS(pproftrace) = 1;
++	snprintf(path, MAXPATHLEN, "%s/%s.%05d.%d", dumpdir, fragment, getpid(), APD_GLOBALS(counter));
+ 	if((APD_GLOBALS(pprof_file) = fopen(path, "a")) == NULL) {
+ 		zend_error(E_ERROR, "%s() failed to open %s for tracing", get_active_function_name(TSRMLS_C), path);
+ 	}  
+-
+ 	apd_pprof_header("apd_set_pprof_trace" TSRMLS_CC);
++	RETURN_STRING(path, 1);
+ }  
+ 
+ 
+Index: apd/php_apd.h
+===================================================================
+RCS file: /repository/pecl/apd/php_apd.h,v
+retrieving revision 1.21
+retrieving revision 1.24
+diff -u -r1.21 -r1.24
+--- apd/php_apd.h	10 Mar 2004 16:40:55 -0000	1.21
++++ apd/php_apd.h	2 Nov 2006 21:29:24 -0000	1.24
+@@ -89,7 +89,7 @@
+ extern zend_module_entry apd_module_entry;
+ #define apd_module_ptr &apd_module_entry
+ 
+-#define APD_VERSION "0.9"
++#define APD_VERSION "1.0.2-dev"
+ 
+ #define FUNCTION_TRACE 1
+ #define ARGS_TRACE 2
+@@ -173,8 +173,8 @@
+ ZEND_BEGIN_MODULE_GLOBALS(apd)
+ 	int counter;
+ 	void* stack;
+-	HashTable* function_summary;
+-	HashTable* file_summary;
++	HashTable function_summary;
++	HashTable file_summary;
+ 	char* dumpdir; /* directory for dumping seesion traces to */
+ 	FILE* dump_file; /* FILE for dumping session traces to */
+ 	FILE* pprof_file; /* File for profiling output */
+@@ -183,6 +183,7 @@
+ 	struct timeval last_clock;
+ 	struct rusage first_ru;
+ 	struct rusage last_ru;
++	long entry_memory_usage;
+ 	int function_index;                /* current index of functions for pprof tracing */
+ 	int file_index;                /* current index of functions for pprof tracing */
+ 	int current_file_index;
+Index: apd/pprofp
+===================================================================
+RCS file: /repository/pecl/apd/pprofp,v
+retrieving revision 1.16
+retrieving revision 1.20
+diff -u -r1.16 -r1.20
+--- apd/pprofp	21 Sep 2004 14:05:16 -0000	1.16
++++ apd/pprofp	2 Nov 2006 21:29:24 -0000	1.20
+@@ -5,32 +5,21 @@
+ $con = new Console_Getopt;
+ $args = $con->readPHPArgv();
+ array_shift($args);
+-$shortoptions = 'acg:hiIlmMrRsStTuUO:vzZ';
++$shortoptions = 'aC:cg:hiIlmMrRsStTuUO:vXzZ';
+ $retval = $con->getopt( $args, $shortoptions);
+ if(is_object($retval)) {
+     usage();
+ }
+ $opt['O'] = 20;
++$opt['C'] = 20;
+ foreach ($retval[0] as $kv_array) {
+     $opt[$kv_array[0]] = $kv_array[1];
+ }
+-($dataFile = $retval[1][0]) || usage();
+-if(($DATA = fopen($dataFile, "r")) == FALSE) {
+-    print "Failed to open $dataFile for reading\n";
+-    exit(1);
+-}
+ 
+ $cfg = array();
+-parse_info('HEADER', $DATA, $cfg);
+ 
+-$callstack = array();
+ $calls = array();
+-$indent_cur = 0;
+-$file_hash = array();
+ $mem = array();
+-$t_rtime = 0;
+-$t_stime = 0;
+-$t_utime = 0;
+ $c_rtimes = array();
+ $c_stimes = array();
+ $c_utimes = array();
+@@ -40,107 +29,152 @@
+ $rtotal = 0;
+ $stotal = 0;
+ $utotal = 0;
+-$last_memory = 0;
+-
+-$symbol_hash = array();
++$count = $opt['C'];
+ $symbol_type = array();
++$num = 0;
+ 
+-while($line = fgets($DATA)) {
+-    $line = rtrim($line);
+-    if(preg_match("/^END_TRACE/", $line)){
+-        break;
+-    }
+-    list($token, $data) = preg_split("/ /",$line, 2);
+-    if($token == '!') {
+-	list ($index, $file) = preg_split("/ /", $data, 2);
+-	$file_hash[$index] = $file;
+-	continue;
+-    }
+-    if( $token == '&') {
+-        list ($index, $name, $type) = preg_split("/ /", $data, 3);
+-        $symbol_hash[$index] = $name;
+-	$symbol_type[$index] = $type;
+-        continue;
++if(!$retval[1]) {
++  usage();
++}
++
++$files = array();
++foreach($retval[1] as $f) {
++  $files = array_merge($files, find_files($f));
++}
++shuffle($files);
++foreach($files as $path) {
++  if($count-- == 0) break;
++  if(array_key_exists('v', $opt)) { echo "Processing $path\n"; }
++  $num++;
++  parse_profile($path);
++}
++
++function parse_profile($dataFile) {
++    global $cfg;
++    global $opt;
++    global $calls;
++    global $mem;
++    global $c_rtimes;
++    global $c_stimes;
++    global $c_utimes;
++    global $rtimes;
++    global $stimes;
++    global $utimes;
++    global $rtotal;
++    global $stotal;
++    global $utotal;
++    global $symbol_type;
++
++    $symbol_hash = array();
++
++    $callstack = array();
++    $file_hash = array();
++    $indent_cur = 0;
++
++    if(($DATA = fopen($dataFile, "r")) == FALSE) {
++        return 0;
+     }
+-    if( $token == '+') {
+-        list($index, $file, $line) = preg_split("/ /",$data, 3);
+-        if(array_key_exists('i',$opt) && $symbol_type[$index] == 1) {
++    parse_info('HEADER', $DATA, $cfg);
++    while($line = fgets($DATA)) {
++        $line = rtrim($line);
++        if(preg_match("/^END_TRACE/", $line)){
++            break;
++        }
++        list($token, $data) = preg_split("/ /",$line, 2);
++        if($token == '!') {
++      list ($index, $file) = preg_split("/ /", $data, 2);
++      $file_hash[$index] = $file;
++      continue;
++        }
++        if( $token == '&') {
++            list ($index, $name, $type) = preg_split("/ /", $data, 3);
++            $symbol_hash[$index] = $name;
++      $symbol_type[$symbol_hash[$index]] = $type;
+             continue;
+-        }	
+-        $index_cur = $index;
+-        $calls[$index_cur]++;
+-        array_push($callstack, $index_cur);
+-        if(array_key_exists('T', $opt)) {
+-            if(array_key_exists('c', $opt)) {
+-                printf("%2.02f ", $rtotal/1000000);
+-            }
+-            print str_repeat("  ", $indent_cur).$symbol_hash[$index_cur]."\n";
+-	    if(array_key_exists('m', $opt)) {
+-		print str_repeat("  ", $indent_cur)."C: $file_hash[$file]:$line M: $memory\n";
+-	    }
+-	}
+-        elseif(array_key_exists('t', $opt)) {
+-            if ( $indent_last == $indent_cur && $index_last == $index_cur ) {
+-                $repcnt++;
+-            }
+-            else {
+-                if ( $repcnt ) {
+-                    $repstr = ' ('.++$repcnt.'x)';
+-                }
++        }
++        if( $token == '+') {
++            list($index, $file, $line) = preg_split("/ /",$data, 3);
++            if(array_key_exists('i',$opt) && $symbol_type[$symbol_hash[$index]] == 1) {
++                continue;
++            } 
++            $index_cur = $index;
++            $calls[$symbol_hash[$index_cur]]++;
++            array_push($callstack, $index_cur);
++            if(array_key_exists('T', $opt)) {
+                 if(array_key_exists('c', $opt)) {
+                     printf("%2.02f ", $rtotal/1000000);
+                 }
+-                print str_repeat("  ", $indent_last).$symbol_hash[$index_last].$repstr."\n";
+-		if(array_key_exists('m', $opt)) {
+-		   print str_repeat("  ", $indent_cur)."C: $file_hash[$file_last]:$line_last M: $memory\n";
+-		}
+-                $repstr = '';
+-                $repcnt = 0;
+-                $index_last = $index_cur;
+-                $indent_last = $indent_cur;
+-		$file_last = $file;
+-		$line_last = $line;
++                print str_repeat("  ", $indent_cur).$symbol_hash[$index_cur];
++          if(array_key_exists('m', $opt)) {
++        print " C: $file_hash[$file]:$line\n";
++          } else {
++                print "\n";
+             }
++      }
++            elseif(array_key_exists('t', $opt)) {
++                if ( $indent_last == $indent_cur && $index_last == $index_cur ) {
++                    $repcnt++;
++                }
++                else {
++                    if ( $repcnt ) {
++                        $repstr = ' ('.++$repcnt.'x)';
++                    }
++                    if(array_key_exists('c', $opt)) {
++                        printf("%2.02f ", $rtotal/1000000);
++                    }
++                    print str_repeat("  ", $indent_last).$symbol_hash[$index_last].$repstr."\n";
++        if(array_key_exists('m', $opt)) {
++           print str_repeat("  ", $indent_cur)."C: $file_hash[$file_last]:$line_last M: $memory\n";
+         }
+-	$indent_cur++;
+-        continue;
+-    }
+-    if( $token == '@') {
+-        list($file_no, $line_no, $ut, $st, $rt) = preg_split("/ /", $data);
+-        $top = array_pop($callstack);
+-        $utimes[$top] += $ut;
+-        $utotal += $ut;
+-        $stimes[$top] += $st;
+-        $stotal += $st;
+-        $rtimes[$top] += $rt;
+-        $rtotal += $rt;
+-        array_push($callstack, $top);
+-	foreach ($callstack as $stack_element) {
+-            $c_utimes[$stack_element] += $ut;
+-            $c_stimes[$stack_element] += $st;
+-            $c_rtimes[$stack_element] += $rt;
++                    $repstr = '';
++                    $repcnt = 0;
++                    $index_last = $index_cur;
++                    $indent_last = $indent_cur;
++        $file_last = $file;
++        $line_last = $line;
++                }
++            }
++            $indent_cur++;
++            continue;
+         }
+-        continue;
+-    }
+-    if ($token == '-') {
+-        list  ($index, $memory) = preg_split("/ /", $data, 2);
+-        if(array_key_exists('i',$opt) && $symbol_type[$index] == 1)
+-        {
++        if( $token == '@') {
++            list($file_no, $line_no, $ut, $st, $rt) = preg_split("/ /", $data);
++            $top = array_pop($callstack);
++            $utimes[$symbol_hash[$top]] += $ut;
++            $utotal += $ut;
++            $stimes[$symbol_hash[$top]] += $st;
++            $stotal += $st;
++            $rtimes[$symbol_hash[$top]] += $rt;
++            $rtotal += $rt;
++            array_push($callstack, $top);
++            foreach ($callstack as $stack_element) {
++                $c_utimes[$symbol_hash[$stack_element]] += $ut;
++                $c_stimes[$symbol_hash[$stack_element]] += $st;
++                $c_rtimes[$symbol_hash[$stack_element]] += $rt;
++            }
++            continue;
++        }
++        if ($token == '-') {
++            list  ($index, $memory) = preg_split("/ /", $data, 2);
++            if(array_key_exists('i',$opt) && $symbol_type[$index] == 1)
++            {
++                continue;
++            }
++            $mem[$symbol_hash[$index]] += $memory;
++            $indent_cur--;
++            $tmp = array_pop($callstack);
+             continue;
+         }
+-        $mem[$index] += ($memory - $last_memory);
+-        $last_memory = $memory;
+-        $indent_cur--;
+-        $tmp = array_pop($callstack);
+-        continue;
+     }
++    parse_info('FOOTER', $DATA, $cfg);
++    return 1;
+ }
+-parse_info('FOOTER', $DATA, $cfg);
++
++
+ $sort = 'by_time';
+ if(array_key_exists('l', $opt)) { $sort = 'by_calls'; }
+ if(array_key_exists('m', $opt)) { $sort = 'by_mem'; }
+ if(array_key_exists('a', $opt)) { $sort = 'by_name'; }
+-if(array_key_exists('v', $opt)) { $sort = 'by_avgcpu'; }
+ if(array_key_exists('r', $opt)) { $sort = 'by_rtime'; }
+ if(array_key_exists('R', $opt)) { $sort = 'by_c_rtime'; }
+ if(array_key_exists('s', $opt)) { $sort = 'by_stime'; }
+@@ -148,127 +182,246 @@
+ if(array_key_exists('u', $opt)) { $sort = 'by_utime'; }
+ if(array_key_exists('U', $opt)) { $sort = 'by_c_utime'; }
+ if(array_key_exists('Z', $opt)) { $sort = 'by_c_time'; }
+-if( !count($symbol_hash)) {
++if( !count($calls)) {
+     continue;
+ }
+ 
+-printf("
+-Trace for %s
+-Total Elapsed Time = %4.2f
+-Total System Time  = %4.2f
+-Total User Time    = %4.2f
+-", $cfg['caller'], $rtotal/1000000, $stotal/1000000, $utotal/1000000);
+-print "\n
+-         Real         User        System             secs/    cumm
+-%Time (excl/cumm)  (excl/cumm)  (excl/cumm) Calls    call    s/call  Memory Usage Name
+---------------------------------------------------------------------------------------\n";
+-$l = 0;
+-$itotal = 0;
+-$percall = 0;
+-$cpercall = 0;
++if(array_key_exists('X', $opt)) {
++  print "name,pcnt,real time, excl user+sys, cumm user+sys, sec/call, calls\n";
<<Diff was trimmed, longer than 597 lines>>


More information about the pld-cvs-commit mailing list