| Index: sdk/lib/html/dartium/html_dartium.dart
|
| ===================================================================
|
| --- sdk/lib/html/dartium/html_dartium.dart (revision 20693)
|
| +++ sdk/lib/html/dartium/html_dartium.dart (working copy)
|
| @@ -35078,6 +35078,10 @@
|
| return timer;
|
| };
|
|
|
| +const _NEW_TIMER = 'NEW_TIMER';
|
| +const _CANCEL_TIMER = 'CANCEL_TIMER';
|
| +const _TIMER_PING = 'TIMER_PING';
|
| +
|
| class _PureIsolateTimer implements Timer {
|
| final ReceivePort _port = new ReceivePort();
|
| SendPort _sendPort; // Effectively final.
|
| @@ -35105,8 +35109,29 @@
|
| void _cancel() {
|
| _port.close();
|
| }
|
| +
|
| + static final Future<SendPort> _HELPER_ISOLATE_PORT =
|
| + spawnDomFunction(_helperIsolateMain);
|
| }
|
|
|
| +final _TIMER_REGISTRY = new Map<SendPort, Timer>();
|
| +
|
| +_helperIsolateMain() {
|
| + port.receive((msg, replyTo) {
|
| + final cmd = msg[0];
|
| + if (cmd == _NEW_TIMER) {
|
| + final duration = new Duration(milliseconds: msg[1]);
|
| + bool periodic = msg[2];
|
| + final callback = () { replyTo.send(_TIMER_PING); };
|
| + _TIMER_REGISTRY[replyTo] = periodic ?
|
| + new Timer.periodic(duration, callback) :
|
| + new Timer(duration, callback);
|
| + } else if (cmd == _CANCEL_TIMER) {
|
| + _TIMER_REGISTRY.remove(replyTo).cancel();
|
| + }
|
| + });
|
| +}
|
| +
|
| get _pureIsolateTimerFactoryClosure =>
|
| ((int milliSeconds, void callback(Timer time), bool repeating) =>
|
| new _PureIsolateTimer(milliSeconds, callback, repeating));
|
| @@ -36253,6 +36278,7 @@
|
| }
|
|
|
| static window() native "Utils_window";
|
| + static print(String message) native "Utils_print";
|
| static forwardingPrint(String message) native "Utils_forwardingPrint";
|
| static void spawnDomFunction(Function topLevelFunction, int replyTo) native "Utils_spawnDomFunction";
|
| static int _getNewIsolateId() native "Utils_getNewIsolateId";
|
| @@ -36326,41 +36352,12 @@
|
| bool get isEmpty => Maps.isEmpty(this);
|
| }
|
|
|
| -final Future<SendPort> _HELPER_ISOLATE_PORT =
|
| - spawnDomFunction(_helperIsolateMain);
|
| -
|
| -final _TIMER_REGISTRY = new Map<SendPort, Timer>();
|
| -
|
| -const _NEW_TIMER = 'NEW_TIMER';
|
| -const _CANCEL_TIMER = 'CANCEL_TIMER';
|
| -const _TIMER_PING = 'TIMER_PING';
|
| -const _PRINT = 'PRINT';
|
| -
|
| -_helperIsolateMain() {
|
| - port.receive((msg, replyTo) {
|
| - final cmd = msg[0];
|
| - if (cmd == _NEW_TIMER) {
|
| - final duration = new Duration(milliseconds: msg[1]);
|
| - bool periodic = msg[2];
|
| - final callback = () { replyTo.send(_TIMER_PING); };
|
| - _TIMER_REGISTRY[replyTo] = periodic ?
|
| - new Timer.periodic(duration, callback) :
|
| - new Timer(duration, callback);
|
| - } else if (cmd == _CANCEL_TIMER) {
|
| - _TIMER_REGISTRY.remove(replyTo).cancel();
|
| - } else if (cmd == _PRINT) {
|
| - final message = msg[1];
|
| - // TODO(antonm): we need somehow identify those isolates.
|
| - print('[From isolate] $message');
|
| - }
|
| - });
|
| -}
|
| -
|
| -final _printClosure = window.console.log;
|
| -final _pureIsolatePrintClosure = (s) {
|
| - _HELPER_ISOLATE_PORT.then((sendPort) {
|
| - sendPort.send([_PRINT, s]);
|
| - });
|
| +get _printClosure => (s) {
|
| + try {
|
| + window.console.log(s);
|
| + } catch (_) {
|
| + _Utils.print(s);
|
| + }
|
| };
|
|
|
| final _forwardingPrintClosure = _Utils.forwardingPrint;
|
|
|