| Index: sdk/lib/async/timer.dart
|
| diff --git a/sdk/lib/async/timer.dart b/sdk/lib/async/timer.dart
|
| index 135c8688359602ee6c8b019e7412e967af6ac121..1bbb65b93307a81837011043cd1f72c014010bdd 100644
|
| --- a/sdk/lib/async/timer.dart
|
| +++ b/sdk/lib/async/timer.dart
|
| @@ -4,84 +4,6 @@
|
|
|
| part of dart.async;
|
|
|
| -abstract class _TimerTask implements Timer {
|
| - final Zone _zone;
|
| - final Timer _nativeTimer;
|
| -
|
| - _TimerTask(this._nativeTimer, this._zone);
|
| -
|
| - void cancel() {
|
| - _nativeTimer.cancel();
|
| - }
|
| -
|
| - bool get isActive => _nativeTimer.isActive;
|
| -}
|
| -
|
| -class _SingleShotTimerTask extends _TimerTask {
|
| - // TODO(floitsch): the generic argument should be 'void'.
|
| - final ZoneCallback<dynamic> _callback;
|
| -
|
| - _SingleShotTimerTask(Timer timer, this._callback, Zone zone)
|
| - : super(timer, zone);
|
| -}
|
| -
|
| -class _PeriodicTimerTask extends _TimerTask {
|
| - // TODO(floitsch): the first generic argument should be 'void'.
|
| - final ZoneUnaryCallback<dynamic, Timer> _callback;
|
| -
|
| - _PeriodicTimerTask(Timer timer, this._callback, Zone zone)
|
| - : super(timer, zone);
|
| -}
|
| -
|
| -/**
|
| - * A task specification for a single-shot timer.
|
| - *
|
| - * *Experimental*. Might disappear without notice.
|
| - */
|
| -class SingleShotTimerTaskSpecification implements TaskSpecification {
|
| - static const String specificationName = "dart.async.timer";
|
| -
|
| - /** The duration after which the timer should invoke the [callback]. */
|
| - final Duration duration;
|
| -
|
| - /** The callback that should be run when the timer triggers. */
|
| - // TODO(floitsch): the generic argument should be void.
|
| - final ZoneCallback<dynamic> callback;
|
| -
|
| - SingleShotTimerTaskSpecification(this.duration, void this.callback());
|
| -
|
| - @override
|
| - String get name => specificationName;
|
| -
|
| - @override
|
| - bool get isOneShot => true;
|
| -}
|
| -
|
| -/**
|
| - * A task specification for a periodic timer.
|
| - *
|
| - * *Experimental*. Might disappear without notice.
|
| - */
|
| -class PeriodicTimerTaskSpecification implements TaskSpecification {
|
| - static const String specificationName = "dart.async.periodic-timer";
|
| -
|
| - /** The interval at which the periodic timer should invoke the [callback]. */
|
| - final Duration duration;
|
| -
|
| - /** The callback that should be run when the timer triggers. */
|
| - // TODO(floitsch): the first generic argument should be void.
|
| - final ZoneUnaryCallback<dynamic, Timer> callback;
|
| -
|
| - PeriodicTimerTaskSpecification(
|
| - this.duration, void this.callback(Timer timer));
|
| -
|
| - @override
|
| - String get name => specificationName;
|
| -
|
| - @override
|
| - bool get isOneShot => false;
|
| -}
|
| -
|
| /**
|
| * A count-down timer that can be configured to fire once or repeatedly.
|
| *
|
| @@ -125,15 +47,10 @@ abstract class Timer {
|
| if (Zone.current == Zone.ROOT) {
|
| // No need to bind the callback. We know that the root's timer will
|
| // be invoked in the root zone.
|
| - return Timer._createTimer(duration, callback);
|
| + return Zone.current.createTimer(duration, callback);
|
| }
|
| - return Zone.current.createTimer(duration, callback);
|
| - }
|
| -
|
| - factory Timer._task(Zone zone, Duration duration, void callback()) {
|
| - SingleShotTimerTaskSpecification specification =
|
| - new SingleShotTimerTaskSpecification(duration, callback);
|
| - return zone.createTask(_createSingleShotTimerTask, specification);
|
| + return Zone.current.createTimer(
|
| + duration, Zone.current.bindCallback(callback, runGuarded: true));
|
| }
|
|
|
| /**
|
| @@ -153,65 +70,17 @@ abstract class Timer {
|
| * scheduled for - even if the actual callback was delayed.
|
| */
|
| factory Timer.periodic(Duration duration,
|
| - void callback(Timer timer)) {
|
| + void callback(Timer timer)) {
|
| if (Zone.current == Zone.ROOT) {
|
| // No need to bind the callback. We know that the root's timer will
|
| // be invoked in the root zone.
|
| - return Timer._createPeriodicTimer(duration, callback);
|
| + return Zone.current.createPeriodicTimer(duration, callback);
|
| }
|
| - return Zone.current.createPeriodicTimer(duration, callback);
|
| - }
|
| -
|
| - factory Timer._periodicTask(Zone zone, Duration duration,
|
| - void callback(Timer timer)) {
|
| - PeriodicTimerTaskSpecification specification =
|
| - new PeriodicTimerTaskSpecification(duration, callback);
|
| - return zone.createTask(_createPeriodicTimerTask, specification);
|
| - }
|
| -
|
| - static Timer _createSingleShotTimerTask(
|
| - SingleShotTimerTaskSpecification specification, Zone zone) {
|
| - ZoneCallback registeredCallback = identical(_ROOT_ZONE, zone)
|
| - ? specification.callback
|
| - : zone.registerCallback(specification.callback);
|
| -
|
| - _TimerTask timerTask;
|
| -
|
| - Timer nativeTimer = Timer._createTimer(specification.duration, () {
|
| - timerTask._zone.runTask(_runSingleShotCallback, timerTask, null);
|
| - });
|
| -
|
| - timerTask = new _SingleShotTimerTask(nativeTimer, registeredCallback, zone);
|
| - return timerTask;
|
| - }
|
| -
|
| - static void _runSingleShotCallback(_SingleShotTimerTask timerTask, Object _) {
|
| - timerTask._callback();
|
| - }
|
| -
|
| - static Timer _createPeriodicTimerTask(
|
| - PeriodicTimerTaskSpecification specification, Zone zone) {
|
| // TODO(floitsch): the return type should be 'void', and the type
|
| // should be inferred.
|
| - ZoneUnaryCallback<dynamic, Timer> registeredCallback =
|
| - identical(_ROOT_ZONE, zone)
|
| - ? specification.callback
|
| - : zone.registerUnaryCallback/*<dynamic, Timer>*/(
|
| - specification.callback);
|
| -
|
| - _TimerTask timerTask;
|
| -
|
| - Timer nativeTimer =
|
| - Timer._createPeriodicTimer(specification.duration, (Timer _) {
|
| - timerTask._zone.runTask(_runPeriodicCallback, timerTask, null);
|
| - });
|
| -
|
| - timerTask = new _PeriodicTimerTask(nativeTimer, registeredCallback, zone);
|
| - return timerTask;
|
| - }
|
| -
|
| - static void _runPeriodicCallback(_PeriodicTimerTask timerTask, Object _) {
|
| - timerTask._callback(timerTask);
|
| + var boundCallback = Zone.current.bindUnaryCallback/*<dynamic, Timer>*/(
|
| + callback, runGuarded: true);
|
| + return Zone.current.createPeriodicTimer(duration, boundCallback);
|
| }
|
|
|
| /**
|
|
|