/**
* New debugger system that outputs a toolbar on page view
*
+ * By default, most methods do nothing ( self::$enabled = false ). You have
+ * to explicitly call MWDebug::init() to enabled them.
+ *
* @todo Profiler support
*/
class MWDebug {
*/
protected static $query = array();
- /**
- * Request information
- *
- * @var array
- */
- protected static $request = array();
-
/**
* Is the debugger enabled?
*
* @var bool
*/
- protected static $enabled = true;
+ protected static $enabled = false;
/**
* Array of functions that have already been warned, formatted
protected static $deprecationWarnings = array();
/**
- * Called in Setup.php, initializes the debugger if it is enabled with
- * $wgDebugToolbar
+ * Enabled the debugger and load resource module.
+ * This is called by Setup.php when $wgDebugToolbar is true.
*/
public static function init() {
- global $wgDebugToolbar;
+ self::$enabled = true;
+ }
- if ( !$wgDebugToolbar ) {
- self::$enabled = false;
- return;
+ /**
+ * Add ResourceLoader modules to the OutputPage object if debugging is
+ * enabled.
+ *
+ * @param $out OutputPage
+ */
+ public static function addModules( OutputPage $out ) {
+ if ( self::$enabled ) {
+ $out->addModules( 'mediawiki.debug.init' );
}
-
- RequestContext::getMain()->getOutput()->addModules( 'mediawiki.debug' );
}
/**
/**
* Returns internal log array
+ * @return array
*/
public static function getLog() {
return self::$log;
// Check to see if there was already a deprecation notice, so not to
// get a duplicate warning
- if ( count( self::$log ) ) {
- $lastLog = self::$log[ count( self::$log ) - 1 ];
+ $logCount = count( self::$log );
+ if ( $logCount ) {
+ $lastLog = self::$log[ $logCount - 1 ];
if ( $lastLog['type'] == 'deprecated' && $lastLog['caller'] == wfGetCaller( $callerOffset + 1 ) ) {
return;
}
'sql' => $sql,
'function' => $function,
'master' => (bool) $isMaster,
- 'time' > 0.0,
- '_start' => wfTime(),
+ 'time' => 0.0,
+ '_start' => microtime( true ),
);
return count( self::$query ) - 1;
return;
}
- self::$query[$id]['time'] = wfTime() - self::$query[$id]['_start'];
+ self::$query[$id]['time'] = microtime( true ) - self::$query[$id]['_start'];
unset( self::$query[$id]['_start'] );
}
- /**
- * Processes a WebRequest object
- *
- * @param $request WebRequest
- */
- public static function processRequest( WebRequest $request ) {
- if ( !self::$enabled ) {
- return;
- }
-
- self::$request = array(
- 'method' => $_SERVER['REQUEST_METHOD'],
- 'url' => $request->getRequestURL(),
- 'headers' => $request->getAllHeaders(),
- 'params' => $request->getValues(),
- );
- }
-
/**
* Returns a list of files included, along with their size
*
global $wgVersion, $wgRequestTime;
MWDebug::log( 'MWDebug output complete' );
+ $request = $context->getRequest();
$debugInfo = array(
'mwVersion' => $wgVersion,
'phpVersion' => PHP_VERSION,
- 'time' => wfTime() - $wgRequestTime,
+ 'gitRevision' => GitInfo::headSHA1(),
+ 'gitBranch' => GitInfo::currentBranch(),
+ 'gitViewUrl' => GitInfo::headViewUrl(),
+ 'time' => microtime( true ) - $wgRequestTime,
'log' => self::$log,
'debugLog' => self::$debug,
'queries' => self::$query,
- 'request' => self::$request,
+ 'request' => array(
+ 'method' => $_SERVER['REQUEST_METHOD'],
+ 'url' => $request->getRequestURL(),
+ 'headers' => $request->getAllHeaders(),
+ 'params' => $request->getValues(),
+ ),
'memory' => $context->getLanguage()->formatSize( memory_get_usage() ),
'memoryPeak' => $context->getLanguage()->formatSize( memory_get_peak_usage() ),
'includes' => self::getFilesIncluded( $context ),
);
- // TODO: Clean this up
- $html = Html::openElement( 'script' );
- $html .= 'var debugInfo = ' . Xml::encodeJsVar( $debugInfo ) . ';';
- $html .= " $(function() { mw.loader.using( 'mediawiki.debug', function() { mw.Debug.init( debugInfo ) } ); }); ";
- $html .= Html::closeElement( 'script' );
+
+ // Cannot use OutputPage::addJsConfigVars because those are already outputted
+ // by the time this method is called.
+ $html = Html::inlineScript(
+ ResourceLoader::makeLoaderConditionalScript(
+ ResourceLoader::makeConfigSetScript( array( 'debugInfo' => $debugInfo ) )
+ )
+ );
return $html;
}