X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fprofiler%2FProfiler.php;h=baffcd81213acab975f032868cfd969bcdd894b5;hb=90bf090dd3f4465a8fb95aacb69fb0c304bc153a;hp=f88406397acbcc60a88c74b4dc274ec3cbf9cca0;hpb=6392dda47bd1ef251750aea06822c231e1b2b992;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/profiler/Profiler.php b/includes/profiler/Profiler.php index f88406397a..baffcd8121 100644 --- a/includes/profiler/Profiler.php +++ b/includes/profiler/Profiler.php @@ -1,12 +1,31 @@ mProfileID = $id; } @@ -460,7 +489,7 @@ class Profiler { } wfProfileOut( '-overhead-total' ); } - + /** * Counts the number of profiled function calls sitting under * the given point in the call graph. Not the most efficient algo. @@ -482,7 +511,7 @@ class Profiler { /** * Log the whole profiling data into the database. */ - public function logData(){ + public function logData() { global $wgProfilePerHost, $wgProfileToDatabase; # Do not log anything if database is readonly (bug 5375) @@ -495,52 +524,50 @@ class Profiler { return; } - $errorState = $dbw->ignoreErrors( true ); - if( $wgProfilePerHost ){ $pfhost = wfHostname(); } else { $pfhost = ''; } - $this->collateData(); - - foreach( $this->mCollated as $name => $elapsed ){ - $eventCount = $this->mCalls[$name]; - $timeSum = (float) ($elapsed * 1000); - $memorySum = (float)$this->mMemory[$name]; - $name = substr($name, 0, 255); - - // Kludge - $timeSum = ($timeSum >= 0) ? $timeSum : 0; - $memorySum = ($memorySum >= 0) ? $memorySum : 0; - - $dbw->update( 'profiling', - array( - "pf_count=pf_count+{$eventCount}", - "pf_time=pf_time+{$timeSum}", - "pf_memory=pf_memory+{$memorySum}", - ), - array( - 'pf_name' => $name, - 'pf_server' => $pfhost, - ), - __METHOD__ ); - - $rc = $dbw->affectedRows(); - if ( $rc == 0 ) { - $dbw->insert('profiling', array ('pf_name' => $name, 'pf_count' => $eventCount, - 'pf_time' => $timeSum, 'pf_memory' => $memorySum, 'pf_server' => $pfhost ), - __METHOD__, array ('IGNORE')); + try { + $this->collateData(); + + foreach( $this->mCollated as $name => $elapsed ){ + $eventCount = $this->mCalls[$name]; + $timeSum = (float) ($elapsed * 1000); + $memorySum = (float)$this->mMemory[$name]; + $name = substr($name, 0, 255); + + // Kludge + $timeSum = ($timeSum >= 0) ? $timeSum : 0; + $memorySum = ($memorySum >= 0) ? $memorySum : 0; + + $dbw->update( 'profiling', + array( + "pf_count=pf_count+{$eventCount}", + "pf_time=pf_time+{$timeSum}", + "pf_memory=pf_memory+{$memorySum}", + ), + array( + 'pf_name' => $name, + 'pf_server' => $pfhost, + ), + __METHOD__ ); + + $rc = $dbw->affectedRows(); + if ( $rc == 0 ) { + $dbw->insert('profiling', array ('pf_name' => $name, 'pf_count' => $eventCount, + 'pf_time' => $timeSum, 'pf_memory' => $memorySum, 'pf_server' => $pfhost ), + __METHOD__, array ('IGNORE')); + } + // When we upgrade to mysql 4.1, the insert+update + // can be merged into just a insert with this construct added: + // "ON DUPLICATE KEY UPDATE ". + // "pf_count=pf_count + VALUES(pf_count), ". + // "pf_time=pf_time + VALUES(pf_time)"; } - // When we upgrade to mysql 4.1, the insert+update - // can be merged into just a insert with this construct added: - // "ON DUPLICATE KEY UPDATE ". - // "pf_count=pf_count + VALUES(pf_count), ". - // "pf_time=pf_time + VALUES(pf_time)"; - } - - $dbw->ignoreErrors( $errorState ); + } catch ( DBError $e ) {} } /** @@ -562,4 +589,18 @@ class Profiler { wfDebug( $s ); } } + + /** + * Get the content type sent out to the client. + * Used for profilers that output instead of store data. + * @return string + */ + protected function getContentType() { + foreach ( headers_list() as $header ) { + if ( preg_match( '#^content-type: (\w+/\w+);?#i', $header, $m ) ) { + return $m[1]; + } + } + return null; + } }