mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
More concrete Scheduler API proposal
Review URL: https://codereview.chromium.org/1139573005
This commit is contained in:
parent
0906da7f0f
commit
552f236bb4
57
specs/scheduler.md
Normal file
57
specs/scheduler.md
Normal file
@ -0,0 +1,57 @@
|
||||
Scheduler API
|
||||
=============
|
||||
|
||||
```dart
|
||||
typedef void TimerCallback();
|
||||
|
||||
class TaskSettings {
|
||||
const TaskSettings({
|
||||
this.idle: false, // tasks that should run during the idle phase
|
||||
this.layout: false, // tasks that should run during the layout phase
|
||||
this.paint: false, // tasks that should run during the paint phase
|
||||
this.touch: false, // tasks that should run while a pointer is down
|
||||
});
|
||||
final bool idle;
|
||||
final bool layout;
|
||||
final bool paint;
|
||||
final bool touch;
|
||||
}
|
||||
|
||||
const idleTask = const TaskSettings(idle: true);
|
||||
const t0 = null;
|
||||
const t1ms = const Duration(milliseconds: 1.0);
|
||||
|
||||
// Priorities
|
||||
// (these are intentionally not constants, so you can tweak them at runtime)
|
||||
int IdlePriority = 0; // tasks that can be delayed arbitrarily
|
||||
int FutureLayoutPriority = 1000; // tasks that prepare layout
|
||||
int TimerAnimationPriority = 3000; // tasks related to animations
|
||||
int InputPriority = 4000; // input events
|
||||
int InputAnimationPriority = 5000; // framework-fired events for scrolling
|
||||
|
||||
class Task {
|
||||
external Task(callback, {
|
||||
Duration delay: t0, // how long to wait before scheduling this task; null means run it now (same as duration 0)
|
||||
Duration budget: t1ms, // how long to allow the task to run before firing an exception; null means no timeout
|
||||
TaskSettings settings: idleTask, // what phases to allow the task to run during
|
||||
int priority: 0, // the greater the number, the more likely it is to run
|
||||
bool defer: false // punts this task until the next loop (after we're done with paint)
|
||||
});
|
||||
external void cancel(); // prevents the task from running, if it hasn't run yet
|
||||
external bool get active; // true until fired or until canceled
|
||||
}
|
||||
|
||||
// The Dart native mechanisms for scheduling tasks, as listed below,
|
||||
// get configured as follows:
|
||||
//
|
||||
// delay: duration argument for the Timer constructors, otherwise null (0)
|
||||
// budget: 1ms
|
||||
// settings: same as for the task that triggered this task
|
||||
// priority: same as for the task that triggered this task
|
||||
// defer: false
|
||||
//
|
||||
// method: scheduleMicrotask(Function void callback())
|
||||
// constructor: Future.microtask(...) // calls scheduleMicrotask() to do the work
|
||||
// constructor: Timer (Duration duration, Function void callback())
|
||||
// constructor: Timer.periodic(Duration duration, Function void callback(Timer timer))
|
||||
```
|
||||
Loading…
x
Reference in New Issue
Block a user