text: /*!
   * Augment mw.loader to facilitate module-level profiling.
   *
   * @since 1.32
   */
  /* global mw */
  ( function () {
  	'use strict';
  
  	var moduleTimes = Object.create( null );
  
  	/**
  	 * Private hooks inserted into mw.loader code if MediaWiki configuration
  	 * `$wgResourceLoaderEnableJSProfiler` is `true`.
  	 *
  	 * To use this data, run `mw.inspect( 'time' )` from the browser console.
  	 * See mw#inspect().
  	 *
  	 * @private
  	 * @class
  	 * @singleton
  	 */
  	mw.loader.profiler = {
  		onExecuteStart: function ( moduleName ) {
  			var time = performance.now();
  			if ( moduleTimes[ moduleName ] ) {
  				throw new Error( 'Unexpected perf record for "' + moduleName + '".' );
  			}
  			moduleTimes[ moduleName ] = {
  				executeStart: time,
  				executeEnd: null,
  				scriptStart: null,
  				scriptEnd: null
  			};
  		},
  		onExecuteEnd: function ( moduleName ) {
  			var time = performance.now();
  			moduleTimes[ moduleName ].executeEnd = time;
  		},
  		onScriptStart: function ( moduleName ) {
  			var time = performance.now();
  			moduleTimes[ moduleName ].scriptStart = time;
  		},
  		onScriptEnd: function ( moduleName ) {
  			var time = performance.now();
  			moduleTimes[ moduleName ].scriptEnd = time;
  		},
  
  		/**
  		 * For internal use by inspect.reports#time.
  		 *
  		 * @private
  		 * @param {string} moduleName
  		 * @return {Object|null}
  		 * @throws {Error} If the perf record is incomplete.
  		 */
  		getProfile: function ( moduleName ) {
  			var times, key, execute, script, total;
  			times = moduleTimes[ moduleName ];
  			if ( !times ) {
  				return null;
  			}
  			for ( key in times ) {
  				if ( times[ key ] === null ) {
  					throw new Error( 'Incomplete perf record for "' + moduleName + '".', times );
  				}
  			}
  			execute = times.executeEnd - times.executeStart;
  			script = times.scriptEnd - times.scriptStart;
  			total = execute + script;
  			return {
  				name: moduleName,
  				execute: execute,
  				script: script,
  				total: total
  			};
  		}
  	};
  
  }() );
  