summaryrefslogtreecommitdiff
path: root/includes/profiler/ProfilerSimple.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/profiler/ProfilerSimple.php')
-rw-r--r--includes/profiler/ProfilerSimple.php78
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' );
}
}
}