X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FProfiling.php;h=9998c45871452f019b8f52fdddc6ccb408c45479;hb=aeeec5397bb8d3b6fa9ad407a5fd7a102ef7f70f;hp=b25b66794ea718ed69c9cce12706387c86afb306;hpb=adf48cbb91b2adbcd8c7c6e16f41de63b28d62a3;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Profiling.php b/includes/Profiling.php index b25b66794e..9998c45871 100755 --- a/includes/Profiling.php +++ b/includes/Profiling.php @@ -1,4 +1,4 @@ -mWorkStack ) ) . "Entering $functionname\n" ); } array_push( $this->mWorkStack, array($functionname, count( $this->mWorkStack ), microtime() ) ); } function profileOut( $functionname) { - global $wgDebugProfiling, $wgDebugFunctionEntry, $wgProfileToDatabase; + global $wgDebugProfiling, $wgDebugFunctionEntry; if ( $wgDebugFunctionEntry && function_exists( "wfDebug" ) ) { - wfDebug( "Exiting $functionname\n" ); + wfDebug( str_repeat( " ", count( $this->mWorkStack ) - 1 ) . "Exiting $functionname\n" ); } $bit = array_pop( $this->mWorkStack ); @@ -77,11 +77,15 @@ class Profiler } } - function getOutput( $scriptStart, $scriptElapsed ) + function getOutput() { + global $wgDebugFunctionEntry; + $wgDebugFunctionEntry = false; + if( !count( $this->mStack ) ) { return "No profiling output\n"; } + $this->close(); $width = 125; $format = "%-" . ($width - 28) . "s %6d %6.3f %6.3f %6.3f%%\n"; $titleFormat = "%-" . ($width - 28) . "s %9s %9s %9s %9s\n"; @@ -108,11 +112,17 @@ class Profiler $end = explode( " ", $entry[3]); $end = (float)$end[0] + (float)$end[1]; $elapsed = $end - $start; + + if ( !array_key_exists( $fname, $this->mCollated ) ) { + $this->mCollated[$fname] = 0; + $this->mCalls[$fname] = 0; + } + $this->mCollated[$fname] += $elapsed; $this->mCalls[$fname] ++; } - $total = $this->mCollated["-total"]; + $total = @$this->mCollated["-total"]; $overhead = $this->mCollated["-overhead-internal"] / $profileCount; $this->mCalls["-overhead-total"] = $profileCount; @@ -128,6 +138,7 @@ class Profiler $prof .= sprintf( $format, $fname, $calls, (float)($elapsed * 1000), (float)($elapsed * 1000) / $calls, $percent ); + global $wgProfileToDatabase; if( $wgProfileToDatabase ) { Profiler::logToDB( $fname, (float)($elapsed * 1000), $calls ); } @@ -140,19 +151,21 @@ class Profiler /* static */ function logToDB($name, $timeSum, $eventCount) { - $name = wfStrencode( $name ); - $sql = "UPDATE profiling ". + $dbw =& wfGetDB( DB_MASTER ); + $profiling = $dbw->tableName( 'profiling' ); + + $name = $dbw->strencode( $name ); + $sql = "UPDATE $profiling ". "SET pf_count=pf_count+{$eventCount}, ". "pf_time=pf_time + {$timeSum} ". "WHERE pf_name='{$name}'"; - wfQuery($sql , DB_WRITE); + $dbw->query($sql); - $rc = wfAffectedRows(); + $rc = $dbw->affectedRows(); if( $rc == 0) { - $sql = "INSERT IGNORE INTO profiling (pf_name,pf_count,pf_time) ". + $sql = "INSERT IGNORE INTO $profiling (pf_name,pf_count,pf_time) ". "VALUES ('{$name}', {$eventCount}, {$timeSum}) "; - wfQuery($sql , DB_WRITE); - $rc = wfAffectedRows(); + $dbw->query($sql , DB_MASTER); } // When we upgrade to mysql 4.1, the insert+update // can be merged into just a insert with this construct added: @@ -166,5 +179,4 @@ class Profiler $wgProfiler = new Profiler(); $wgProfiler->profileIn( "-total" ); - ?>