Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(93)

Side by Side Diff: tests/lib/async/async_await_zones_test.dart

Issue 1274133002: Don't zone-register async callbacks for every await call in the VM. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Move async-classes to async patch. Address comments. Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« runtime/lib/async_patch.dart ('K') | « sdk/lib/async/future_impl.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 import 'dart:async';
6 import 'package:expect/expect.dart';
7 import 'package:async_helper/async_helper.dart';
8
hausner 2015/08/11 21:22:07 Maybe a sentence or two to document what this test
floitsch 2015/08/12 15:03:14 Done.
9 gee(i) async {
10 return await i;
11 }
12
13 bar() async* {
14 var i = 0;
15 while (true) yield await gee(i++);
16 }
17
18
19 awaitForTest() async {
20 var sum = 0;
21 await for (var x in bar().take(100)) {
22 sum += x;
23 }
24 Expect.equals(4950, sum);
25 }
26
27 awaitTest() async {
28 await(null);
hausner 2015/08/11 21:22:07 Curious: why use await like a function call here?
floitsch 2015/08/12 15:03:14 My mistake... done.
29 await(null);
30 await(null);
31 await(null);
32 await(null);
33 await(null);
34 await(null);
35 await(null);
36 await(null);
37 await(null);
38 await(null);
39 await(null);
40 await(null);
41 await(null);
42 await(null);
43 await(null);
44 await(null);
45 await(null);
46 await(null);
47 await(null);
48 await(null);
49 await(null);
50 await(null);
51 await(null);
52 await(null);
53 await(null);
54 await(null);
55 await(null);
56 await(null);
57 await(null);
58 await(null);
59 await(null);
60 await(null);
61 await(null);
62 await(null);
63 await(null);
64 await(null);
65 await(null);
66 await(null);
67 await(null);
68 return await 499;
69 }
70
71 runTests() async {
72 await awaitTest();
73 await awaitForTest();
74 }
75
76 var depth = 0;
77
78 var depthIncreases = 0;
79
80 increaseDepth() {
81 depthIncreases++;
82 depth++;
83 // The async/await code should not register callbacks recursively in the
84 // then-calls. As such the depth should never grow too much. We don't want
85 // to commit to a specific value, since implementations still have some
86 // room in how async/await is implemented, but 20 should be safe.
87 Expect.isTrue(depth < 20);
88 }
89
90 registerCallback(Zone self, ZoneDelegate parent, Zone zone, f) {
91 var oldDepth = depth;
92 increaseDepth();
93 return parent.registerCallback(zone, () {
94 depth = oldDepth;
95 return f();
96 });
97 }
98 registerUnaryCallback(Zone self, ZoneDelegate parent, Zone zone, f) {
99 var oldDepth = depth;
100 increaseDepth();
101 return parent.registerUnaryCallback(zone, (x) {
102 depth = oldDepth;
103 return f(x);
104 });
105 }
106 registerBinaryCallback(Zone self, ZoneDelegate parent, Zone zone, f) {
107 var oldDepth = depth;
108 increaseDepth();
109 return parent.registerBinaryCallback(zone, (x, y) {
110 depth = oldDepth;
111 return f(x, y);
112 });
113 }
114
115 sm(Zone self, ZoneDelegate parent, Zone zone, f) {
116 var oldDepth = depth;
117 increaseDepth();
118 return parent.scheduleMicrotask(zone, () {
119 depth = oldDepth;
120 return f();
121 });
122 }
123
124 main() {
125 asyncStart();
126 var desc = new ZoneSpecification(
127 registerCallback: registerCallback,
128 registerUnaryCallback: registerUnaryCallback,
129 registerBinaryCallback: registerBinaryCallback,
130 scheduleMicrotask: sm
131 );
132 var future = runZoned(runTests, zoneSpecification: desc);
133 future.then((_) => asyncEnd());
134 }
OLDNEW
« runtime/lib/async_patch.dart ('K') | « sdk/lib/async/future_impl.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698