angular2
Version:
Angular 2 - a web framework for modern web apps
69 lines • 3.04 kB
JavaScript
;var application_ref_1 = require('angular2/src/core/application_ref');
var lang_1 = require('angular2/src/facade/lang');
var browser_1 = require('angular2/src/facade/browser');
var dom_adapter_1 = require('angular2/src/platform/dom/dom_adapter');
/**
* Entry point for all Angular debug tools. This object corresponds to the `ng`
* global variable accessible in the dev console.
*/
var AngularTools = (function () {
function AngularTools(ref) {
this.profiler = new AngularProfiler(ref);
}
return AngularTools;
})();
exports.AngularTools = AngularTools;
/**
* Entry point for all Angular profiling-related debug tools. This object
* corresponds to the `ng.profiler` in the dev console.
*/
var AngularProfiler = (function () {
function AngularProfiler(ref) {
this.appRef = ref.injector.get(application_ref_1.ApplicationRef);
}
/**
* Exercises change detection in a loop and then prints the average amount of
* time in milliseconds how long a single round of change detection takes for
* the current state of the UI. It runs a minimum of 5 rounds for a minimum
* of 500 milliseconds.
*
* Optionally, a user may pass a `config` parameter containing a map of
* options. Supported options are:
*
* `record` (boolean) - causes the profiler to record a CPU profile while
* it exercises the change detector. Example:
*
* ```
* ng.profiler.timeChangeDetection({record: true})
* ```
*/
AngularProfiler.prototype.timeChangeDetection = function (config) {
var record = lang_1.isPresent(config) && config['record'];
var profileName = 'Change Detection';
// Profiler is not available in Android browsers, nor in IE 9 without dev tools opened
var isProfilerAvailable = lang_1.isPresent(browser_1.window.console.profile);
if (record && isProfilerAvailable) {
browser_1.window.console.profile(profileName);
}
var start = dom_adapter_1.DOM.performanceNow();
var numTicks = 0;
while (numTicks < 5 || (dom_adapter_1.DOM.performanceNow() - start) < 500) {
this.appRef.tick();
numTicks++;
}
var end = dom_adapter_1.DOM.performanceNow();
if (record && isProfilerAvailable) {
// need to cast to <any> because type checker thinks there's no argument
// while in fact there is:
//
// https://developer.mozilla.org/en-US/docs/Web/API/Console/profileEnd
browser_1.window.console.profileEnd(profileName);
}
var msPerTick = (end - start) / numTicks;
browser_1.window.console.log("ran " + numTicks + " change detection cycles");
browser_1.window.console.log(lang_1.NumberWrapper.toFixed(msPerTick, 2) + " ms per check");
};
return AngularProfiler;
})();
exports.AngularProfiler = AngularProfiler;
//# sourceMappingURL=common_tools.js.map