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

Side by Side Diff: tools/dom/src/Timer.dart

Issue 13515004: Remove pseudo-shared Timer implementation. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 8 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012, 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 part of html;
6
7 class _Timer implements Timer {
8 final canceller;
9
10 _Timer(this.canceller);
11
12 void cancel() { canceller(); }
13 }
14
15 get _timerFactoryClosure => (int milliSeconds, void callback(Timer timer), bool repeating) {
16 var maker;
17 var canceller;
18 if (repeating) {
19 maker = window._setInterval;
20 canceller = window._clearInterval;
21 } else {
22 maker = window._setTimeout;
23 canceller = window._clearTimeout;
24 }
25 Timer timer;
26 final int id = maker(() { callback(timer); }, milliSeconds);
27 timer = new _Timer(() { canceller(id); });
28 return timer;
29 };
30
31 class _PureIsolateTimer implements Timer {
32 final ReceivePort _port = new ReceivePort();
33 SendPort _sendPort; // Effectively final.
34
35 static SendPort _SEND_PORT;
36
37 _PureIsolateTimer(int milliSeconds, callback, repeating) {
38 _sendPort = _port.toSendPort();
39 _port.receive((msg, replyTo) {
40 assert(msg == _TIMER_PING);
41 callback(this);
42 if (!repeating) _cancel();
43 });
44
45 _send([_NEW_TIMER, milliSeconds, repeating]);
46 }
47
48 void cancel() {
49 _cancel();
50 _send([_CANCEL_TIMER]);
51 }
52
53 void _cancel() {
54 _port.close();
55 }
56
57 _send(msg) {
58 _sendToHelperIsolate(msg, _sendPort);
59 }
60 }
61
62 get _pureIsolateTimerFactoryClosure =>
63 ((int milliSeconds, void callback(Timer time), bool repeating) =>
64 new _PureIsolateTimer(milliSeconds, callback, repeating));
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698