@@ -14,6 +14,9 @@ typedef void ZoneOnTurnStart();
14
14
15
15
typedef void ZoneScheduleMicrotask (fn ());
16
16
17
+ typedef async .Timer ZoneCreateTimer (async .ZoneDelegate delegate,
18
+ async .Zone zone, Duration duration, fn ());
19
+
17
20
/**
18
21
* Handles a [VmTurnZone] onError event.
19
22
*/
@@ -85,6 +88,7 @@ class VmTurnZone {
85
88
onTurnDone = _defaultOnTurnDone;
86
89
onTurnStart = _defaultOnTurnStart;
87
90
onScheduleMicrotask = _defaultOnScheduleMicrotask;
91
+ onCreateTimer = _defaultOnCreateTimer;
88
92
countPendingAsync = _defaultCountPendingAsync;
89
93
}
90
94
@@ -134,7 +138,7 @@ class VmTurnZone {
134
138
async .Timer _onCreateTimer (async .Zone self, async .ZoneDelegate delegate, async .Zone zone, Duration duration, fn ()) {
135
139
var s = traceEnter (VmTurnZone_createTimer );
136
140
try {
137
- return new _WrappedTimer ( this , delegate, zone, duration, fn);
141
+ return onCreateTimer ( delegate, zone, duration, fn);
138
142
} finally {
139
143
traceLeave (s);
140
144
}
@@ -224,6 +228,15 @@ class VmTurnZone {
224
228
ZoneScheduleMicrotask onScheduleMicrotask;
225
229
void _defaultOnScheduleMicrotask (fn) => _asyncQueue.add (fn);
226
230
231
+ /**
232
+ * Called any time a timer is created. If you override [onCreateTimer] ,
233
+ * you are expected to return a [Timer] which call the function at some point.
234
+ */
235
+ ZoneCreateTimer onCreateTimer;
236
+ async .Timer _defaultOnCreateTimer (async .ZoneDelegate delegate,
237
+ async .Zone zone, Duration duration, fn ())
238
+ => new _WrappedTimer (this , delegate, zone, duration, fn);
239
+
227
240
LongStackTrace _longStacktrace = null ;
228
241
229
242
LongStackTrace _getLongStacktrace (name) {
0 commit comments