Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(260)

Unified Diff: tools/dom/templates/html/impl/impl_Window.darttemplate

Issue 2123593002: Revert "Reapply zone tasks." (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/dom/src/shared_html.dart ('k') | tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/dom/templates/html/impl/impl_Window.darttemplate
diff --git a/tools/dom/templates/html/impl/impl_Window.darttemplate b/tools/dom/templates/html/impl/impl_Window.darttemplate
index fe4db3d7f55beab64cb9092d47f6abb247b0d6c4..8abac3775c4146f65b923db522ae32ae4fa881ac 100644
--- a/tools/dom/templates/html/impl/impl_Window.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Window.darttemplate
@@ -4,99 +4,6 @@
part of $LIBRARYNAME;
-typedef void RemoveFrameRequestMapping(int id);
-
-/**
- * The task object representing animation-frame requests.
- *
- * For historical reasons, [Window.requestAnimationFrame] returns an integer
- * to users. However, zone tasks must be unique objects, and an integer can
- * therefore not be used as task object. The [Window] class thus keeps a mapping
- * from the integer ID to the corresponding task object. All zone related
- * operations work on this task object, whereas users of
- * [Window.requestAnimationFrame] only see the integer ID.
- *
- * Since this mapping takes up space, it must be removed when the
- * animation-frame task has triggered. The default implementation does this
- * automatically, but intercepting implementations of `requestAnimationFrame`
- * must make sure to call the [AnimationFrameTask.removeMapping]
- * function that is provided in the task specification.
- *
- * *Experimental*. This class may disappear without notice.
- */
-abstract class AnimationFrameTask {
- /** The ID that is returned to users. */
- int get id;
-
- /** The zone in which the task will run. */
- Zone get zone;
-
- /**
- * Cancels the animation-frame request.
- *
- * A call to [Window.cancelAnimationFrame] with an `id` argument equal to [id]
- * forwards the request to this function.
- *
- * Zones that intercept animation-frame requests implement this method so
- * that they can react to cancelation requests.
- */
- void cancel(Window window);
-
- /**
- * Maps animation-frame request IDs to their task objects.
- */
- static final Map<int, _AnimationFrameTask> _tasks = {};
-
- /**
- * Removes the mapping from [id] to [AnimationFrameTask].
- *
- * This function must be invoked by user-implemented animation-frame
- * tasks, before running [callback].
- *
- * See [AnimationFrameTask].
- */
- static void removeMapping(int id) {
- _tasks.remove(id);
- }
-}
-
-class _AnimationFrameTask implements AnimationFrameTask {
- final int id;
- final Zone zone;
- final FrameRequestCallback _callback;
-
- _AnimationFrameTask(this.id, this.zone, this._callback);
-
- void cancel(Window window) {
- window._cancelAnimationFrame(this.id);
- }
-}
-
-/**
- * The task specification for an animation-frame request.
- *
- * *Experimental*. This class may disappear without notice.
- */
-class AnimationFrameRequestSpecification implements TaskSpecification {
- /**
- * The window on which [Window.requestAnimationFrame] was invoked.
- */
- final Window window;
-
- /**
- * The callback that is executed when the animation-frame is ready.
- *
- * Note that the callback hasn't been registered in any zone when the `create`
- * function (passed to [Zone.createTask]) is invoked.
- */
- final FrameRequestCallback callback;
-
- AnimationFrameRequestSpecification(this.window, this.callback);
-
- String get name => "dart.html.request-animation-frame";
- bool get isOneShot => true;
-}
-
@DocsEditable()
$if DART2JS
$(ANNOTATIONS)@Native("Window,DOMWindow")
@@ -122,7 +29,9 @@ $endif
*/
Future<num> get animationFrame {
var completer = new Completer<num>.sync();
- requestAnimationFrame(completer.complete);
+ requestAnimationFrame((time) {
+ completer.complete(time);
+ });
return completer.future;
}
@@ -206,30 +115,7 @@ $if DART2JS
@DomName('Window.requestAnimationFrame')
int requestAnimationFrame(FrameRequestCallback callback) {
_ensureRequestAnimationFrame();
- if (identical(Zone.current, Zone.ROOT)) {
- return _requestAnimationFrame(callback);
- }
- var spec = new AnimationFrameRequestSpecification(this, callback);
- var task = Zone.current.createTask/*<AnimationFrameTask>*/(
- _createAnimationFrameTask, spec);
- AnimationFrameTask._tasks[task.id] = task;
- return task.id;
- }
-
- static _AnimationFrameTask _createAnimationFrameTask(
- AnimationFrameRequestSpecification spec, Zone zone) {
- var task;
- var id = spec.window._requestAnimationFrame((num time) {
- AnimationFrameTask.removeMapping(task.id);
- zone.runTask(_runAnimationFrame, task, time);
- });
- var callback = zone.registerUnaryCallback(spec.callback);
- task = new _AnimationFrameTask(id, zone, callback);
- return task;
- }
-
- static void _runAnimationFrame(_AnimationFrameTask task, num time) {
- task._callback(time);
+ return _requestAnimationFrame(_wrapZone/*<num, dynamic>*/(callback));
}
/**
@@ -242,13 +128,7 @@ $if DART2JS
*/
void cancelAnimationFrame(int id) {
_ensureRequestAnimationFrame();
- var task = AnimationFrameTask._tasks.remove(id);
- if (task == null) {
- // Assume that the animation frame request wasn't intercepted by a zone.
- _cancelAnimationFrame(id);
- return;
- }
- task.cancel(this);
+ _cancelAnimationFrame(id);
}
@JSName('requestAnimationFrame')
« no previous file with comments | « tools/dom/src/shared_html.dart ('k') | tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698