Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
Front-End
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abdullh.alsoleman
Front-End
Commits
f688c11c
Commit
f688c11c
authored
Aug 27, 2015
by
Adam Barth
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #890 from abarth/cancel_queued_callback
Scheduler should be able to cancel a queued callback
parents
8fa319a3
315577fc
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
51 additions
and
4 deletions
+51
-4
scheduler.dart
packages/flutter/lib/base/scheduler.dart
+9
-4
scheduler_test.dart
packages/unit/test/base/scheduler_test.dart
+42
-0
No files found.
packages/flutter/lib/base/scheduler.dart
View file @
f688c11c
...
...
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import
'dart:collection'
;
import
'dart:sky'
as
sky
;
import
'package:sky/base/debug.dart'
;
...
...
@@ -12,9 +13,10 @@ bool _haveScheduledVisualUpdate = false;
int
_nextCallbackId
=
1
;
final
List
<
Callback
>
_persistentCallbacks
=
new
List
<
Callback
>();
Map
<
int
,
Callback
>
_transientCallbacks
=
new
Map
<
int
,
Callback
>();
Map
<
int
,
Callback
>
_transientCallbacks
=
new
LinkedHashMap
<
int
,
Callback
>();
final
Set
<
int
>
_removedIds
=
new
Set
<
int
>();
void
_
beginFrame
(
double
timeStamp
)
{
void
beginFrame
(
double
timeStamp
)
{
timeStamp
/=
timeDilation
;
_haveScheduledVisualUpdate
=
false
;
...
...
@@ -23,15 +25,17 @@ void _beginFrame(double timeStamp) {
_transientCallbacks
=
new
Map
<
int
,
Callback
>();
callbacks
.
forEach
((
id
,
callback
)
{
callback
(
timeStamp
);
if
(!
_removedIds
.
contains
(
id
))
callback
(
timeStamp
);
});
_removedIds
.
clear
();
for
(
Callback
callback
in
_persistentCallbacks
)
callback
(
timeStamp
);
}
void
init
(
)
{
sky
.
view
.
setFrameCallback
(
_
beginFrame
);
sky
.
view
.
setFrameCallback
(
beginFrame
);
}
void
addPersistentFrameCallback
(
Callback
callback
)
{
...
...
@@ -47,6 +51,7 @@ int requestAnimationFrame(Callback callback) {
void
cancelAnimationFrame
(
int
id
)
{
_transientCallbacks
.
remove
(
id
);
_removedIds
.
add
(
id
);
}
void
ensureVisualUpdate
(
)
{
...
...
packages/unit/test/base/scheduler_test.dart
0 → 100644
View file @
f688c11c
import
'package:sky/base/scheduler.dart'
as
scheduler
;
import
'package:test/test.dart'
;
void
main
(
)
{
test
(
"Can cancel queued callback"
,
()
{
int
secondId
;
bool
firstCallbackRan
=
false
;
bool
secondCallbackRan
=
false
;
void
firstCallback
(
double
timeStamp
)
{
expect
(
firstCallbackRan
,
isFalse
);
expect
(
secondCallbackRan
,
isFalse
);
expect
(
timeStamp
,
equals
(
16.0
));
firstCallbackRan
=
true
;
scheduler
.
cancelAnimationFrame
(
secondId
);
}
void
secondCallback
(
double
timeStamp
)
{
expect
(
firstCallbackRan
,
isTrue
);
expect
(
secondCallbackRan
,
isFalse
);
expect
(
timeStamp
,
equals
(
16.0
));
secondCallbackRan
=
true
;
}
scheduler
.
requestAnimationFrame
(
firstCallback
);
secondId
=
scheduler
.
requestAnimationFrame
(
secondCallback
);
scheduler
.
beginFrame
(
16.0
);
expect
(
firstCallbackRan
,
isTrue
);
expect
(
secondCallbackRan
,
isFalse
);
firstCallbackRan
=
false
;
secondCallbackRan
=
false
;
scheduler
.
beginFrame
(
32.0
);
expect
(
firstCallbackRan
,
isFalse
);
expect
(
secondCallbackRan
,
isFalse
);
});
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment