feat(perf): change detection profiler

Closes #4000
This commit is contained in:
yjbanov
2015-09-04 14:44:24 -07:00
committed by Yegor
parent 28a29f5557
commit 8dd6c4680b
12 changed files with 202 additions and 2 deletions
+27
View File
@@ -0,0 +1,27 @@
import 'package:angular2/test_lib.dart' show SpyObject;
import 'package:angular2/core.dart'
show ApplicationRef, LifeCycle, Injector, bind;
import 'dart:js';
@proxy
class SpyLifeCycle extends SpyObject implements LifeCycle {
noSuchMethod(m) => super.noSuchMethod(m);
}
@proxy
class SpyApplicationRef extends SpyObject implements ApplicationRef {
Injector injector;
SpyApplicationRef() {
this.injector = Injector.resolveAndCreate([
bind(LifeCycle).toClass(SpyLifeCycle)
]);
}
noSuchMethod(m) => super.noSuchMethod(m);
}
void callNgProfilerTimeChangeDetection([config]) {
context['ng']['profiler'].callMethod('timeChangeDetection',
config != null ? [config] : []);
}
+15
View File
@@ -0,0 +1,15 @@
import {SpyObject} from 'angular2/test_lib';
import {ApplicationRef, LifeCycle, Injector, bind} from 'angular2/angular2';
import {global} from 'angular2/src/core/facade/lang';
export class SpyApplicationRef extends SpyObject {
injector;
constructor() {
super();
this.injector = Injector.resolveAndCreate([bind(LifeCycle).toValue({tick: () => {}})]);
}
}
export function callNgProfilerTimeChangeDetection(config?): void {
(<any>global).ng.profiler.timeChangeDetection(config);
}
+27
View File
@@ -0,0 +1,27 @@
import {
afterEach,
beforeEach,
ddescribe,
describe,
expect,
iit,
inject,
it,
xit
} from 'angular2/test_lib';
import {enableDebugTools, disableDebugTools} from 'angular2/tools';
import {SpyApplicationRef, callNgProfilerTimeChangeDetection} from './spies';
export function main() {
describe('profiler', () => {
beforeEach(() => { enableDebugTools((<any>new SpyApplicationRef())); });
afterEach(() => { disableDebugTools(); });
it('should time change detection', () => { callNgProfilerTimeChangeDetection(); });
it('should time change detection with recording',
() => { callNgProfilerTimeChangeDetection({'record': true}); });
});
}