Skip to content

Commit 447ee6c

Browse files
committed
benchmark(TreeComponent): Update for watchAST and disable ElementProbe.
1 parent be3cdd4 commit 447ee6c

File tree

2 files changed

+30
-17
lines changed

2 files changed

+30
-17
lines changed

benchmark/pubspec.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ packages:
3838
di:
3939
description: di
4040
source: hosted
41-
version: "0.0.40"
41+
version: "1.0.0"
4242
html5lib:
4343
description: html5lib
4444
source: hosted
@@ -62,7 +62,7 @@ packages:
6262
path:
6363
description: path
6464
source: hosted
65-
version: "1.1.0"
65+
version: "1.2.1"
6666
perf_api:
6767
description: perf_api
6868
source: hosted

benchmark/web/tree.dart

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'package:di/di.dart';
22
import 'package:angular/angular.dart';
33
import 'package:angular/core_dom/module_internal.dart';
44
import 'package:angular/application_factory.dart';
5+
import 'package:angular/change_detection/ast_parser.dart';
56

67
import 'dart:html';
78
import 'dart:math';
@@ -80,6 +81,7 @@ class NgFreeTree implements ShadowRootAware {
8081
}
8182
}
8283

84+
var treeValueAST, treeRightNotNullAST, treeLeftNotNullAST, treeRightAST, treeLeftAST, treeAST;
8385
/**
8486
* A baseline version of TreeComponent which uses Angular's Scope to
8587
* manage data. This version is setting up data binding so arbitrary
@@ -116,28 +118,28 @@ class NgFreeTreeScoped implements ShadowRootAware {
116118
var root = elt.createShadowRoot();
117119
var scope = parentScope.createChild({});
118120

119-
parentScope.watch(treeExpr, (v, _) {
121+
parentScope.watchAST(treeExpr, (v, _) {
120122
scope.context['tree'] = v;
121123
});
122124

123125
var s = new SpanElement();
124126
root.append(s);
125-
scope.watch('tree.value', (v, _) {
127+
scope.watchAST(treeValueAST, (v, _) {
126128
if (v != null) {
127129
s.text = " $v";
128130
}
129131
});
130132

131-
scope.watch('tree.right != null', (v, _) {
133+
scope.watchAST(treeRightNotNullAST, (v, _) {
132134
if (v != true) return;
133135
s.append(new SpanElement()
134-
..append(newFreeTree(scope, 'tree.right')));
136+
..append(newFreeTree(scope, treeRightAST)));
135137
});
136138

137-
scope.watch('tree.left != null', (v, _) {
139+
scope.watchAST(treeLeftNotNullAST, (v, _) {
138140
if (v != true) return;
139141
s.append(new SpanElement()
140-
..append(newFreeTree(scope, 'tree.left')));
142+
..append(newFreeTree(scope, treeLeftAST)));
141143
});
142144

143145
return elt;
@@ -152,7 +154,7 @@ class NgFreeTreeScoped implements ShadowRootAware {
152154
treeScope = scope.createChild({});
153155
treeScope.context['tree'] = tree;
154156
root.innerHtml = '';
155-
root.append(newFreeTree(treeScope, 'tree'));
157+
root.append(newFreeTree(treeScope, treeAST));
156158
}
157159
}
158160

@@ -170,7 +172,7 @@ class FreeTreeClass {
170172
Scope parentScope;
171173

172174
FreeTreeClass(this.parentScope, treeExpr) {
173-
parentScope.watch(treeExpr, (v, _) {
175+
parentScope.watchAST(treeExpr, (v, _) {
174176
tree = v;
175177
});
176178
}
@@ -182,22 +184,22 @@ class FreeTreeClass {
182184

183185
var s = new SpanElement();
184186
root.append(s);
185-
scope.watch('tree.value', (v, _) {
187+
scope.watchAST(treeValueAST, (v, _) {
186188
if (v != null) {
187189
s.text = " $v";
188190
}
189191
});
190192

191-
scope.watch('tree.right != null', (v, _) {
193+
scope.watchAST(treeRightNotNullAST, (v, _) {
192194
if (v != true) return;
193195
s.append(new SpanElement()
194-
..append(new FreeTreeClass(scope, 'tree.right').element()));
196+
..append(new FreeTreeClass(scope, treeRightAST).element()));
195197
});
196198

197-
scope.watch('tree.left != null', (v, _) {
199+
scope.watchAST(treeLeftNotNullAST, (v, _) {
198200
if (v != true) return;
199201
s.append(new SpanElement()
200-
..append(new FreeTreeClass(scope, 'tree.left').element()));
202+
..append(new FreeTreeClass(scope, treeLeftAST).element()));
201203
});
202204

203205
return elt;
@@ -237,7 +239,7 @@ class NgFreeTreeClass implements ShadowRootAware {
237239
treeScope = scope.createChild({});
238240
treeScope.context['tree'] = tree;
239241
root.innerHtml = '';
240-
root.append(new FreeTreeClass(treeScope, 'tree').element());
242+
root.append(new FreeTreeClass(treeScope, treeAST).element());
241243
}
242244
}
243245

@@ -252,10 +254,21 @@ main() {
252254
..type(NgFreeTree)
253255
..type(NgFreeTreeScoped)
254256
..type(NgFreeTreeClass)
255-
..factory(ScopeDigestTTL, (i) => new ScopeDigestTTL.value(15));
257+
..factory(ScopeDigestTTL, (i) => new ScopeDigestTTL.value(15))
258+
..bind(CompilerConfig, toValue: new CompilerConfig.withOptions(elementProbeEnabled: false));
256259

257260
var injector = applicationFactory().addModule(module).run();
258261
assert(injector != null);
262+
263+
// Set up ASTs
264+
var parser = injector.get(ASTParser);
265+
treeValueAST = parser('tree.value');
266+
treeRightNotNullAST = parser('tree.right != null');
267+
treeLeftNotNullAST = parser('tree.left != null');
268+
treeRightAST = parser('tree.right');
269+
treeLeftAST = parser('tree.left');
270+
treeAST = parser('tree');
271+
259272
VmTurnZone zone = injector.get(VmTurnZone);
260273
Scope scope = injector.get(Scope);
261274

0 commit comments

Comments
 (0)