| Index: pkg/dev_compiler/tool/input_sdk/private/isolate_helper.dart
|
| diff --git a/pkg/dev_compiler/tool/input_sdk/private/isolate_helper.dart b/pkg/dev_compiler/tool/input_sdk/private/isolate_helper.dart
|
| index 039b14f08a1321e2f099f4d6bf3ec9eedf872fde..42b18249d37d4a8f4216f251e9b1c61d385760fc 100644
|
| --- a/pkg/dev_compiler/tool/input_sdk/private/isolate_helper.dart
|
| +++ b/pkg/dev_compiler/tool/input_sdk/private/isolate_helper.dart
|
| @@ -1355,6 +1355,7 @@ class TimerImpl implements Timer {
|
| final bool _once;
|
| bool _inEventLoop = false;
|
| int _handle;
|
| + int _tick = 0;
|
|
|
| TimerImpl(int milliseconds, void callback()) : _once = true {
|
| if (milliseconds == 0 && (!hasTimer() || _globalState.isWorker)) {
|
| @@ -1380,6 +1381,7 @@ class TimerImpl implements Timer {
|
| void internalCallback() {
|
| _handle = null;
|
| leaveJsAsync();
|
| + _tick = 1;
|
| callback();
|
| }
|
|
|
| @@ -1397,7 +1399,16 @@ class TimerImpl implements Timer {
|
| : _once = false {
|
| if (hasTimer()) {
|
| enterJsAsync();
|
| + int start = JS('int', 'Date.now()');
|
| _handle = JS('int', '#.setInterval(#, #)', global, () {
|
| + int tick = this._tick + 1;
|
| + if (milliseconds > 0) {
|
| + int duration = JS('int', 'Date.now()') - start;
|
| + if (duration > (tick + 1) * milliseconds) {
|
| + tick = duration ~/ milliseconds;
|
| + }
|
| + }
|
| + this._tick = tick;
|
| callback(this);
|
| }, milliseconds);
|
| } else {
|
| @@ -1405,6 +1416,8 @@ class TimerImpl implements Timer {
|
| }
|
| }
|
|
|
| + int get tick => _tick;
|
| +
|
| void cancel() {
|
| if (hasTimer()) {
|
| if (_inEventLoop) {
|
|
|