summaryrefslogtreecommitdiff
path: root/includes/profiler/ProfilerSimpleTrace.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/profiler/ProfilerSimpleTrace.php')
-rw-r--r--includes/profiler/ProfilerSimpleTrace.php67
1 files changed, 67 insertions, 0 deletions
diff --git a/includes/profiler/ProfilerSimpleTrace.php b/includes/profiler/ProfilerSimpleTrace.php
new file mode 100644
index 00000000..ba41babc
--- /dev/null
+++ b/includes/profiler/ProfilerSimpleTrace.php
@@ -0,0 +1,67 @@
+<?php
+/**
+ * @file
+ * @ingroup Profiler
+ */
+
+/**
+ * Execution trace
+ * @todo document methods (?)
+ * @ingroup Profiler
+ */
+class ProfilerSimpleTrace extends ProfilerSimple {
+ var $mMinimumTime = 0;
+ var $trace = "";
+ var $memory = 0;
+
+ function __construct( $params ) {
+ global $wgRequestTime, $wgRUstart;
+ parent::__construct( $params );
+ if ( !empty( $wgRequestTime ) && !empty( $wgRUstart ) ) {
+ $this->mWorkStack[] = array( '-total', 0, $wgRequestTime, $this->getCpuTime( $wgRUstart ) );
+ }
+ $this->trace .= "Beginning trace: \n";
+ }
+
+ function profileIn($functionname) {
+ $this->mWorkStack[] = array($functionname, count( $this->mWorkStack ), microtime(true), $this->getCpuTime());
+ $this->trace .= " " . sprintf("%6.1f",$this->memoryDiff()) .
+ str_repeat( " ", count($this->mWorkStack)) . " > " . $functionname . "\n";
+ }
+
+ function profileOut($functionname) {
+ global $wgDebugFunctionEntry;
+
+ if ( $wgDebugFunctionEntry ) {
+ $this->debug(str_repeat(' ', count($this->mWorkStack) - 1).'Exiting '.$functionname."\n");
+ }
+
+ list( $ofname, /* $ocount */ , $ortime, $octime ) = array_pop( $this->mWorkStack );
+
+ if ( !$ofname ) {
+ $this->trace .= "Profiling error: $functionname\n";
+ } else {
+ if ( $functionname == 'close' ) {
+ $message = "Profile section ended by close(): {$ofname}";
+ $functionname = $ofname;
+ $this->trace .= $message . "\n";
+ }
+ elseif ( $ofname != $functionname ) {
+ $this->trace .= "Profiling error: in({$ofname}), out($functionname)";
+ }
+ $elapsedreal = microtime( true ) - $ortime;
+ $this->trace .= sprintf( "%03.6f %6.1f", $elapsedreal, $this->memoryDiff() ) .
+ str_repeat(" ", count( $this->mWorkStack ) + 1 ) . " < " . $functionname . "\n";
+ }
+ }
+
+ function memoryDiff() {
+ $diff = memory_get_usage() - $this->memory;
+ $this->memory = memory_get_usage();
+ return $diff / 1024;
+ }
+
+ function logData() {
+ print "<!-- \n {$this->trace} \n -->";
+ }
+}