} );
}
+ function humanSize( bytes ) {
+ if ( !$.isNumeric( bytes ) || bytes === 0 ) { return bytes; }
+ var i = 0, units = [ '', ' kB', ' MB', ' GB', ' TB', ' PB' ];
+ for ( ; bytes >= 1024; bytes /= 1024 ) { i++; }
+ return bytes.toFixed( 1 ) + units[i];
+ }
+
/**
* @class mw.inspect
* @singleton
*/
var inspect = {
+ /**
+ * Return a map of all dependency relationships between loaded modules.
+ *
+ * @return {Object} Maps module names to objects. Each sub-object has
+ * two properties, 'requires' and 'requiredBy'.
+ */
+ getDependencyGraph: function () {
+ var modules = inspect.getLoadedModules(), graph = {};
+
+ $.each( modules, function ( moduleIndex, moduleName ) {
+ var dependencies = mw.loader.moduleRegistry[moduleName].dependencies || [];
+
+ graph[moduleName] = graph[moduleName] || { requiredBy: [] };
+ graph[moduleName].requires = dependencies;
+
+ $.each( dependencies, function ( depIndex, depName ) {
+ graph[depName] = graph[depName] || { requiredBy: [] };
+ graph[depName].requiredBy.push( moduleName );
+ } );
+ } );
+ return graph;
+ },
+
/**
* Calculate the byte size of a ResourceLoader module.
*
// Use Function.prototype#call to force an exception on Firefox,
// which doesn't define console#table but doesn't complain if you
// try to invoke it.
- console.table.call( console.table, data );
+ console.table.call( console, data );
return;
} catch (e) {}
try {
// Convert size to human-readable string.
$.each( modules, function ( i, module ) {
- module.size = module.size > 1024 ?
- ( module.size / 1024 ).toFixed( 2 ) + ' KB' :
- ( module.size !== null ? module.size + ' B' : null );
+ module.size = humanSize( module.size );
} );
return modules;
sortByProperty( modules, 'allSelectors', true );
return modules;
},
+
+ /**
+ * Report stats on mw.loader.store: the number of localStorage
+ * cache hits and misses, the number of items purged from the
+ * cache, and the total size of the module blob in localStorage.
+ */
+ store: function () {
+ var raw, stats = { enabled: mw.loader.store.enabled };
+ if ( stats.enabled ) {
+ $.extend( stats, mw.loader.store.stats );
+ try {
+ raw = localStorage.getItem( mw.loader.store.getStoreKey() );
+ stats.totalSize = humanSize( $.byteLength( raw ) );
+ } catch (e) {}
+ }
+ return [stats];
+ }
}
};