diff options
Diffstat (limited to 'includes/profiler/ProfilerSimple.php')
-rw-r--r-- | includes/profiler/ProfilerSimple.php | 78 |
1 files changed, 46 insertions, 32 deletions
diff --git a/includes/profiler/ProfilerSimple.php b/includes/profiler/ProfilerSimple.php index 055a0ea0..d1d1c5d9 100644 --- a/includes/profiler/ProfilerSimple.php +++ b/includes/profiler/ProfilerSimple.php @@ -1,5 +1,22 @@ <?php /** + * Base class for simple profiling. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * * @file * @ingroup Profiler */ @@ -15,32 +32,24 @@ class ProfilerSimple extends Profiler { var $zeroEntry = array('cpu'=> 0.0, 'cpu_sq' => 0.0, 'real' => 0.0, 'real_sq' => 0.0, 'count' => 0); var $errorEntry; - function __construct( $params ) { - global $wgRequestTime, $wgRUstart; - parent::__construct( $params ); + public function isPersistent() { + /* Implement in output subclasses */ + return false; + } + protected function addInitialStack() { $this->errorEntry = $this->zeroEntry; $this->errorEntry['count'] = 1; - if (!empty($wgRequestTime) && !empty($wgRUstart)) { - # Remove the -total entry from parent::__construct - $this->mWorkStack = array(); - - $this->mWorkStack[] = array( '-total', 0, $wgRequestTime,$this->getCpuTime($wgRUstart)); - - $elapsedcpu = $this->getCpuTime() - $this->getCpuTime($wgRUstart); - $elapsedreal = microtime(true) - $wgRequestTime; + $initialTime = $this->getInitialTime(); + $initialCpu = $this->getInitialTime( 'cpu' ); + if ( $initialTime !== null && $initialCpu !== null ) { + $this->mWorkStack[] = array( '-total', 0, $initialTime, $initialCpu ); + $this->mWorkStack[] = array( '-setup', 1, $initialTime, $initialCpu ); - $entry =& $this->mCollated["-setup"]; - if (!is_array($entry)) { - $entry = $this->zeroEntry; - $this->mCollated["-setup"] =& $entry; - } - $entry['cpu'] += $elapsedcpu; - $entry['cpu_sq'] += $elapsedcpu*$elapsedcpu; - $entry['real'] += $elapsedreal; - $entry['real_sq'] += $elapsedreal*$elapsedreal; - $entry['count']++; + $this->profileOut( '-setup' ); + } else { + $this->profileIn( '-total' ); } } @@ -53,7 +62,7 @@ class ProfilerSimple extends Profiler { if ($wgDebugFunctionEntry) { $this->debug(str_repeat(' ', count($this->mWorkStack)).'Entering '.$functionname."\n"); } - $this->mWorkStack[] = array($functionname, count( $this->mWorkStack ), microtime(true), $this->getCpuTime()); + $this->mWorkStack[] = array( $functionname, count( $this->mWorkStack ), $this->getTime(), $this->getTime( 'cpu' ) ); } function profileOut($functionname) { @@ -80,8 +89,8 @@ class ProfilerSimple extends Profiler { $this->mCollated[$message] = $this->errorEntry; } $entry =& $this->mCollated[$functionname]; - $elapsedcpu = $this->getCpuTime() - $octime; - $elapsedreal = microtime(true) - $ortime; + $elapsedcpu = $this->getTime( 'cpu' ) - $octime; + $elapsedreal = $this->getTime() - $ortime; if (!is_array($entry)) { $entry = $this->zeroEntry; $this->mCollated[$functionname] =& $entry; @@ -104,15 +113,20 @@ class ProfilerSimple extends Profiler { /* Implement in subclasses */ } - function getCpuTime($ru=null) { - if ( function_exists( 'getrusage' ) ) { - if ( $ru == null ) { - $ru = getrusage(); - } - return ($ru['ru_utime.tv_sec'] + $ru['ru_stime.tv_sec'] + ($ru['ru_utime.tv_usec'] + - $ru['ru_stime.tv_usec']) * 1e-6); + /** + * Get the actual CPU time or the initial one if $ru is set. + * + * @deprecated in 1.20 + * @return float|null + */ + function getCpuTime( $ru = null ) { + wfDeprecated( __METHOD__, '1.20' ); + + if ( $ru === null ) { + return $this->getTime( 'cpu' ); } else { - return 0; + # It theory we should use $ru here, but it always $wgRUstart that is passed here + return $this->getInitialTime( 'cpu' ); } } } |