| Index: pkg/dev_compiler/tool/input_sdk/lib/async/schedule_microtask.dart
|
| diff --git a/pkg/dev_compiler/tool/input_sdk/lib/async/schedule_microtask.dart b/pkg/dev_compiler/tool/input_sdk/lib/async/schedule_microtask.dart
|
| deleted file mode 100644
|
| index 70fbeba924d664bd0934e6d0defbc2227bc5869c..0000000000000000000000000000000000000000
|
| --- a/pkg/dev_compiler/tool/input_sdk/lib/async/schedule_microtask.dart
|
| +++ /dev/null
|
| @@ -1,154 +0,0 @@
|
| -// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -part of dart.async;
|
| -
|
| -typedef void _AsyncCallback();
|
| -
|
| -class _AsyncCallbackEntry {
|
| - final _AsyncCallback callback;
|
| - _AsyncCallbackEntry next;
|
| - _AsyncCallbackEntry(this.callback);
|
| -}
|
| -
|
| -/** Head of single linked list of pending callbacks. */
|
| -_AsyncCallbackEntry _nextCallback;
|
| -/** Tail of single linked list of pending callbacks. */
|
| -_AsyncCallbackEntry _lastCallback;
|
| -/**
|
| - * Tail of priority callbacks added by the currently executing callback.
|
| - *
|
| - * Priority callbacks are put at the beginning of the
|
| - * callback queue, so that if one callback schedules more than one
|
| - * priority callback, they are still enqueued in scheduling order.
|
| - */
|
| -_AsyncCallbackEntry _lastPriorityCallback;
|
| -/**
|
| - * Whether we are currently inside the callback loop.
|
| - *
|
| - * If we are inside the loop, we never need to schedule the loop,
|
| - * even if adding a first element.
|
| - */
|
| -bool _isInCallbackLoop = false;
|
| -
|
| -void _microtaskLoop() {
|
| - while (_nextCallback != null) {
|
| - _lastPriorityCallback = null;
|
| - _AsyncCallbackEntry entry = _nextCallback;
|
| - _nextCallback = entry.next;
|
| - if (_nextCallback == null) _lastCallback = null;
|
| - (entry.callback)();
|
| - }
|
| -}
|
| -
|
| -void _startMicrotaskLoop() {
|
| - _isInCallbackLoop = true;
|
| - try {
|
| - // Moved to separate function because try-finally prevents
|
| - // good optimization.
|
| - _microtaskLoop();
|
| - } finally {
|
| - _lastPriorityCallback = null;
|
| - _isInCallbackLoop = false;
|
| - if (_nextCallback != null) {
|
| - _AsyncRun._scheduleImmediate(_startMicrotaskLoop);
|
| - }
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * Schedules a callback to be called as a microtask.
|
| - *
|
| - * The microtask is called after all other currently scheduled
|
| - * microtasks, but as part of the current system event.
|
| - */
|
| -void _scheduleAsyncCallback(_AsyncCallback callback) {
|
| - _AsyncCallbackEntry newEntry = new _AsyncCallbackEntry(callback);
|
| - if (_nextCallback == null) {
|
| - _nextCallback = _lastCallback = newEntry;
|
| - if (!_isInCallbackLoop) {
|
| - _AsyncRun._scheduleImmediate(_startMicrotaskLoop);
|
| - }
|
| - } else {
|
| - _lastCallback.next = newEntry;
|
| - _lastCallback = newEntry;
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * Schedules a callback to be called before all other currently scheduled ones.
|
| - *
|
| - * This callback takes priority over existing scheduled callbacks.
|
| - * It is only used internally to give higher priority to error reporting.
|
| - *
|
| - * Is always run in the root zone.
|
| - */
|
| -void _schedulePriorityAsyncCallback(_AsyncCallback callback) {
|
| - if (_nextCallback == null) {
|
| - _scheduleAsyncCallback(callback);
|
| - _lastPriorityCallback = _lastCallback;
|
| - return;
|
| - }
|
| - _AsyncCallbackEntry entry = new _AsyncCallbackEntry(callback);
|
| - if (_lastPriorityCallback == null) {
|
| - entry.next = _nextCallback;
|
| - _nextCallback = _lastPriorityCallback = entry;
|
| - } else {
|
| - entry.next = _lastPriorityCallback.next;
|
| - _lastPriorityCallback.next = entry;
|
| - _lastPriorityCallback = entry;
|
| - if (entry.next == null) {
|
| - _lastCallback = entry;
|
| - }
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * Runs a function asynchronously.
|
| - *
|
| - * Callbacks registered through this function are always executed in order and
|
| - * are guaranteed to run before other asynchronous events (like [Timer] events,
|
| - * or DOM events).
|
| - *
|
| - * **Warning:** it is possible to starve the DOM by registering asynchronous
|
| - * callbacks through this method. For example the following program runs
|
| - * the callbacks without ever giving the Timer callback a chance to execute:
|
| - *
|
| - * main() {
|
| - * Timer.run(() { print("executed"); }); // Will never be executed.
|
| - * foo() {
|
| - * scheduleMicrotask(foo); // Schedules [foo] in front of other events.
|
| - * }
|
| - * foo();
|
| - * }
|
| - *
|
| - * ## Other resources
|
| - *
|
| - * * [The Event Loop and Dart](https://www.dartlang.org/articles/event-loop/):
|
| - * Learn how Dart handles the event queue and microtask queue, so you can write
|
| - * better asynchronous code with fewer surprises.
|
| - */
|
| -void scheduleMicrotask(void callback()) {
|
| - _Zone currentZone = Zone.current;
|
| - if (identical(_ROOT_ZONE, currentZone)) {
|
| - // No need to bind the callback. We know that the root's scheduleMicrotask
|
| - // will be invoked in the root zone.
|
| - _rootScheduleMicrotask(null, null, _ROOT_ZONE, callback);
|
| - return;
|
| - }
|
| - _ZoneFunction implementation = currentZone._scheduleMicrotask;
|
| - if (identical(_ROOT_ZONE, implementation.zone) &&
|
| - _ROOT_ZONE.inSameErrorZone(currentZone)) {
|
| - _rootScheduleMicrotask(null, null, currentZone,
|
| - currentZone.registerCallback(callback));
|
| - return;
|
| - }
|
| - Zone.current.scheduleMicrotask(
|
| - Zone.current.bindCallback(callback, runGuarded: true));
|
| -}
|
| -
|
| -class _AsyncRun {
|
| - /** Schedule the given callback before any other event in the event-loop. */
|
| - external static void _scheduleImmediate(void callback());
|
| -}
|
|
|