MediaWiki r12231 - Code Review

Jump to: navigation, search
Repository:MediaWiki
Revision:r12230‎ | r12231 (on ViewVC)‎ | r12232 >
Date:13:41, 24 December 2005
Author:midom
Status:old
Tags:
Comment:
* move $wgProfiler init to Setup.php
* allow specifying different profiler types
* add ProfilerSimple (that for now just builds in-memory profiling structure,
may be extended to write it somewhere)
Modified paths:

Diff [purge]

Index: trunk/phase3/includes/Profiling.php
===================================================================
--- trunk/phase3/includes/Profiling.php	(revision 12230)
+++ trunk/phase3/includes/Profiling.php	(revision 12231)
@@ -353,6 +353,4 @@
 
 }
 
-$wgProfiler = new Profiler();
-
 ?>
Index: trunk/phase3/includes/Setup.php
===================================================================
--- trunk/phase3/includes/Setup.php	(revision 12230)
+++ trunk/phase3/includes/Setup.php	(revision 12231)
@@ -26,6 +26,13 @@
 
 if ( $wgProfiling and (0 == rand() % $wgProfileSampleRate ) ) {
 	require_once( 'Profiling.php' );
+	if ($wgProfilerType == "") {
+		$wgProfiler = new Profiler();
+	} else {
+		$prclass="Profiler{$wgProfilerType}";
+		require_once( $prclass.".php" );
+		$wgProfiler = new $prclass();
+	}
 } else {
 	function wfProfileIn( $fn = '' ) {
 		global $hackwhere, $wgDBname;
Index: trunk/phase3/includes/DefaultSettings.php
===================================================================
--- trunk/phase3/includes/DefaultSettings.php	(revision 12230)
+++ trunk/phase3/includes/DefaultSettings.php	(revision 12231)
@@ -1053,6 +1053,8 @@
 $wgProfileSampleRate = 1;
 /** If true, print a raw call tree instead of per-function report */
 $wgProfileCallTree = false;
+/** If not empty, specifies profiler type to load */
+$wgProfilerType = '';
 
 /** Detects non-matching wfProfileIn/wfProfileOut calls */
 $wgDebugProfiling = false;
Index: trunk/phase3/includes/ProfilerSimple.php
===================================================================
--- trunk/phase3/includes/ProfilerSimple.php	(revision 0)
+++ trunk/phase3/includes/ProfilerSimple.php	(revision 12231)
@@ -0,0 +1,70 @@
+<?php 
+/**
+ * Simple profiler base class
+ * @package MediaWiki
+ */
+
+/**
+ * @todo document
+ * @package MediaWiki
+ */
+class ProfilerSimple extends Profiler {
+	function profileIn($functionname) {
+		global $wgDebugFunctionEntry;
+		if ($wgDebugFunctionEntry && function_exists('wfDebug')) {
+			wfDebug(str_repeat(' ', count($this->mWorkStack)).'Entering '.$functionname."\n");
+		}
+		$this->mWorkStack[] = array($functionname, count( $this->mWorkStack ), $this->getTime(), $this->getCpuTime());
+	}
+
+	function profileOut($functionname) {
+		$memory = memory_get_usage();
+
+		global $wgDebugFunctionEntry;
+
+		if ($wgDebugFunctionEntry && function_exists('wfDebug')) {
+			wfDebug(str_repeat(' ', count($this->mWorkStack) - 1).'Exiting '.$functionname."\n");
+		}
+
+		list($ofname,$ocount,$ortime,$octime) = array_pop($this->mWorkStack);
+
+		if (!$ofname) {
+			wfDebug("Profiling error: $functionname\n");
+		} else {
+			if ($functionname == 'close') {
+				$message = "Profile section ended by close(): {$ofname}";
+				wfDebug( "$message\n" );
+			}
+			elseif ($ofname != $functionname) {
+				$message = "Profiling error: in({$ofname}), out($functionname)";
+				wfDebug( "$message\n" );
+			}
+			$entry =& $this->mCollated[$functionname];
+			
+			$elapsedcpu = $this->getCpuTime() - $octime;
+			$elapsedreal = $this->getTime() - $ortime;
+
+			$entry['cpu'] += $elapsedcpu;
+			$entry['cpu_sq'] += $elapsedcpu*$elapsedcpu;
+			$entry['real'] += $elapsedreal;
+			$entry['real_sq'] += $elapsedreal*$elapsedreal;
+			$entry['count']++;
+				
+		}
+	}
+
+	function getFunctionReport() {		
+		/* Implement in output subclasses */
+	}
+
+	function getCpuTime() {
+		$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);
+	}
+
+	function getTime() {
+		list($a,$b)=explode(" ",microtime());
+		return (float)($a+$b);
+	}
+}
+?>

Property changes on: trunk/phase3/includes/ProfilerSimple.php
___________________________________________________________________
Added: svn:eol-style
   + native
Added: svn:executable
   + *
Added: svn:keywords
   + Author Date Id Revision

Status & tagging log

  • 01:58, 13 October 2010 ^demon (Talk | contribs) changed the status of r12231 [removed: new added: old]
Personal tools
Namespaces
Variants
Views
Actions
Site
Support
Download
Development
Communication
Toolbox