Scheduler API
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))