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

Side by Side Diff: packages/charted/lib/core/timer.dart

Issue 1521693002: Roll Observatory deps (charted -> ^0.3.0) (Closed) Base URL: https://chromium.googlesource.com/external/github.com/dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years 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 unified diff | Download patch
« no previous file with comments | « packages/charted/lib/core/time_interval.dart ('k') | packages/charted/lib/core/utils.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // 1 //
2 // Copyright 2014 Google Inc. All rights reserved. 2 // Copyright 2014 Google Inc. All rights reserved.
3 // 3 //
4 // Use of this source code is governed by a BSD-style 4 // Use of this source code is governed by a BSD-style
5 // license that can be found in the LICENSE file or at 5 // license that can be found in the LICENSE file or at
6 // https://developers.google.com/open-source/licenses/bsd 6 // https://developers.google.com/open-source/licenses/bsd
7 // 7 //
8 8
9 /// A [window.requestAnimationFrame] based timer for use with transitions. 9 /// A [window.requestAnimationFrame] based timer for use with transitions.
10 /// Uses [dart.async.Timer] when the time until next timeout is too long. 10 /// Uses [dart.async.Timer] when the time until next timeout is too long.
(...skipping 20 matching lines...) Expand all
31 static AnimationTimer active; 31 static AnimationTimer active;
32 32
33 /// Callback function that is called when the timer is fired. 33 /// Callback function that is called when the timer is fired.
34 final TimerCallback callback; 34 final TimerCallback callback;
35 35
36 /// Start time of the animation. 36 /// Start time of the animation.
37 final int time; 37 final int time;
38 38
39 /// Schedule a new [callback] to be called [delay] micro-seconds after 39 /// Schedule a new [callback] to be called [delay] micro-seconds after
40 /// [then] micro-seconds since epoch. 40 /// [then] micro-seconds since epoch.
41 AnimationTimer(this.callback, { int delay: 0, int then: null }) 41 AnimationTimer(this.callback, {int delay: 0, int then: null})
42 : time = then == null 42 : time = then == null
43 ? new DateTime.now().millisecondsSinceEpoch + delay 43 ? new DateTime.now().millisecondsSinceEpoch + delay
44 : then + delay { 44 : then + delay {
45 _queue.add(this); 45 _queue.add(this);
46 if (!_animationFrameRequested) { 46 if (!_animationFrameRequested) {
47 if (_timerScheduled != null) { 47 if (_timerScheduled != null) {
48 _timerScheduled.cancel(); 48 _timerScheduled.cancel();
49 } 49 }
50 _animationFrameRequested = true; 50 _animationFrameRequested = true;
51 window.animationFrame.then(_step); 51 window.animationFrame.then(_step);
52 } 52 }
53 } 53 }
54 54
55 /// Iterate through all timers, call the callbacks where necessary and 55 /// Iterate through all timers, call the callbacks where necessary and
56 /// return milliseconds until next timer. 56 /// return milliseconds until next timer.
57 static int flush() { 57 static int flush() {
58 int now = new DateTime.now().millisecondsSinceEpoch; 58 int now = new DateTime.now().millisecondsSinceEpoch;
59 int earliest = null; 59 int earliest = null;
60 AnimationTimer timer = _queue.isEmpty ? null : _queue.first; 60 AnimationTimer timer = _queue.isEmpty ? null : _queue.first;
61 61
62 while(timer != null) { 62 while (timer != null) {
63 bool finished = false; 63 bool finished = false;
64 AnimationTimer ref = timer; 64 AnimationTimer ref = timer;
65 65
66 if (now > timer.time) { 66 if (now > timer.time) {
67 active = timer; 67 active = timer;
68 finished = timer.callback(now - timer.time); 68 finished = timer.callback(now - timer.time);
69 } 69 }
70 if (!finished && (earliest == null || timer.time < earliest)) { 70 if (!finished && (earliest == null || timer.time < earliest)) {
71 earliest = timer.time; 71 earliest = timer.time;
72 } 72 }
73 timer = timer.next; 73 timer = timer.next;
74 if (finished) ref.unlink(); 74 if (finished) ref.unlink();
75 } 75 }
76 active = null; 76 active = null;
77 return earliest == null ? earliest : earliest - now; 77 return earliest == null ? earliest : earliest - now;
78 } 78 }
79 79
80 /// Internal timer and animation frame handler. 80 /// Internal timer and animation frame handler.
81 _step([_]) { 81 _step([_]) {
82 int delay = flush(); 82 int delay = flush();
83 83
84 if (delay == null) { 84 if (delay == null) {
85 _animationFrameRequested = false; 85 _animationFrameRequested = false;
86 } 86 } else if (delay > 24) {
87 else if (delay > 24) {
88 if (_timerScheduled != null) { 87 if (_timerScheduled != null) {
89 _timerScheduled.cancel(); 88 _timerScheduled.cancel();
90 } 89 }
91 _timerScheduled = new Timer(new Duration(milliseconds: delay), _step); 90 _timerScheduled = new Timer(new Duration(milliseconds: delay), _step);
92 _animationFrameRequested = false; 91 _animationFrameRequested = false;
93 } 92 } else {
94 else {
95 _animationFrameRequested = true; 93 _animationFrameRequested = true;
96 window.animationFrame.then(_step); 94 window.animationFrame.then(_step);
97 } 95 }
98 } 96 }
99 } 97 }
OLDNEW
« no previous file with comments | « packages/charted/lib/core/time_interval.dart ('k') | packages/charted/lib/core/utils.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698