| Index: tools/dom/src/native_DOMImplementation.dart
|
| diff --git a/tools/dom/src/native_DOMImplementation.dart b/tools/dom/src/native_DOMImplementation.dart
|
| index 3ef960a2ae570346ef041ed830065ef463a7d37a..8bcab03d4f5f5bc7de7dbed328ab2b22792e5083 100644
|
| --- a/tools/dom/src/native_DOMImplementation.dart
|
| +++ b/tools/dom/src/native_DOMImplementation.dart
|
| @@ -58,7 +58,6 @@ class _Utils {
|
| }
|
|
|
| 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";
|
| @@ -132,12 +131,41 @@ class _DOMStringMap extends NativeFieldWrapperClass1 implements Map<String, Stri
|
| bool get isEmpty => Maps.isEmpty(this);
|
| }
|
|
|
| -get _printClosure => (s) {
|
| - try {
|
| - window.console.log(s);
|
| - } catch (_) {
|
| - _Utils.print(s);
|
| - }
|
| +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]);
|
| + });
|
| };
|
|
|
| final _forwardingPrintClosure = _Utils.forwardingPrint;
|
|
|