description = []; $this->startTime = []; $this->endTime = []; $this->initTime = 0; $this->cur_timer = ""; $this->stack = []; $this->trail = ""; $this->trace = ""; $this->count = []; $this->running = []; $this->initTime = $this->getMicroTime(); $this->output_enabled = $output_enabled; $this->trace_enabled = $trace_enabled; $this->startTimer( 'unprofiled' ); } // Public Methods /** * Start an individual timer * This will pause the running timer and place it on a stack. * @param string $name name of the timer * @param string optional $desc description of the timer */ function startTimer( $name, $desc = "" ) { $this->trace .= "start $name\n"; $n = array_push( $this->stack, $this->cur_timer ); $this->__suspendTimer( $this->stack[$n - 1] ); $this->startTime[$name] = $this->getMicroTime(); $this->cur_timer = $name; $this->description[$name] = $desc; if ( !array_key_exists( $name, $this->count ) ) { $this->count[$name] = 1; } else { $this->count[$name]++; } } /** * Stop an individual timer * Restart the timer that was running before this one * @param string $name name of the timer */ function stopTimer( $name ) { $this->trace .= "stop $name\n"; $this->endTime[$name] = $this->getMicroTime(); if ( !array_key_exists( $name, $this->running ) ) { $this->running[$name] = $this->elapsedTime( $name ); } else { $this->running[$name] += $this->elapsedTime( $name ); } $this->cur_timer = array_pop( $this->stack ); $this->__resumeTimer( $this->cur_timer ); } /** * measure the elapsed time of a timer without stoping the timer if * it is still running * @param $name * @return int|mixed */ function elapsedTime( $name ) { // This shouldn't happen, but it does once. if ( !array_key_exists( $name, $this->startTime ) ) { return 0; } if ( array_key_exists( $name, $this->endTime ) ) { return ( $this->endTime[$name] - $this->startTime[$name] ); } else { $now = $this->getMicroTime(); return ( $now - $this->startTime[$name] ); } }//end start_time /** * Measure the elapsed time since the profile class was initialised * */ function elapsedOverall() { $oaTime = $this->getMicroTime() - $this->initTime; return ( $oaTime ); }//end start_time /** * print out a log of all the timers that were registered * @param bool $enabled */ function printTimers( $enabled = false ) { if ( $this->output_enabled || $enabled ) { $TimedTotal = 0; $tot_perc = 0; ksort( $this->description ); print( "
\n" );
			$oaTime = $this->getMicroTime() - $this->initTime;
			echo "============================================================================\n";
			echo "								PROFILER OUTPUT\n";
			echo "============================================================================\n";
			print( "Calls					 Time  Routine\n" );
			echo "-----------------------------------------------------------------------------\n";
			foreach ( $this->description as $key => $val ) {
				$t = $this->elapsedTime( $key );
				if ( isset( $this->running[$key] ) ) {
					$total = $this->running[$key];
				} else {
					$total = 0;
				}
				$count = $this->count[$key];
				$TimedTotal += $total;
				$perc = ( $total / $oaTime ) * 100;
				$tot_perc += $perc;
				// $perc=sprintf("%3.2f", $perc );
				printf( "%3d	%3.4f ms (%3.2f %%)	 %s\n", $count, $total * 1000, $perc, $key );
			}

			echo "\n";

			$missed = $oaTime - $TimedTotal;
			$perc = ( $missed / $oaTime ) * 100;
			$tot_perc += $perc;
			// $perc=sprintf("%3.2f", $perc );
			printf( "		%3.4f ms (%3.2f %%)	 %s\n", $missed * 1000, $perc, "Missed" );

			echo "============================================================================\n";

			printf( "		%3.4f ms (%3.2f %%)	 %s\n", $oaTime * 1000, $tot_perc, "OVERALL TIME" );

			echo "============================================================================\n";

			print( "
" ); } } /** * @param bool $enabled */ function printTrace( $enabled = false ) { if ( $this->trace_enabled || $enabled ) { print( "
" );
			print( "Trace\n$this->trace\n\n" );
			print( "
" ); } } /// Internal Use Only Functions /** * Get the current time as accuratly as possible * */ function getMicroTime() { return microtime( true ); } /** * resume an individual timer * @param $name */ function __resumeTimer( $name ) { $this->trace .= "resume $name\n"; $this->startTime[$name] = $this->getMicroTime(); } /** * suspend an individual timer * @param $name */ function __suspendTimer( $name ) { $this->trace .= "suspend $name\n"; $this->endTime[$name] = $this->getMicroTime(); if ( !array_key_exists( $name, $this->running ) ) { $this->running[$name] = $this->elapsedTime( $name ); } else { $this->running[$name] += $this->elapsedTime( $name ); } } } /** * @param $name */ function profiler_start( $name ) { if ( array_key_exists( "midcom_profiler", $GLOBALS ) ) { $GLOBALS["midcom_profiler"]->startTimer( $name ); } } /** * @param $name */ function profiler_stop( $name ) { if ( array_key_exists( "midcom_profiler", $GLOBALS ) ) { $GLOBALS["midcom_profiler"]->stopTimer( $name ); } } ?>