blob: 3ec031ffd0dee86c54acbdd1ccfc5d8d04988b11 [file] [log] [blame] [view]
Sky's Run Loop
==============
Sky's run loop consists of running the following, at 120Hz (each loop
takes 8.333ms):
1. Send scroll and resize events if necessary, limiting each handler
to 1ms, and limiting the total time spent on these handlers to 1ms.
2. Fire animation frame callbacks for up to 1ms. Each callback can run
for up to 1ms. Once 1ms has expired, throw a (catchable)
EDeadlineExceeded exception. If it's not caught, drop subsequent
callbacks.
4. Spend up to 1ms to update the render tree, including calling
childAdded(), childRemoved(), and getLayoutManager() as needed.
Once 1ms has expired, throw a (catchable) EDeadlineExceeded
exception, leaving the render tree in whatever state it has
reached.
3. Update the ElementStyleDeclarationList objects for all elements on
the RenderTree.
5. Update as much of layout as possible; after 1ms, throw a
(catchable) EDeadlineExceeded exception, leaving the remaining
nodes unprepared.
6. Update as much of paint as possible; after 1ms, throw a (catchable)
EDeadlineExceeded exception, leaving any remaining nodes
unprepared.
7. Send frame to GPU.
8. Run pending tasks until the 8.333ms expires. Each task may only run
for at most 1ms, after 1ms they get a (catchable) EDeadlineExceeded
exception. While there are no pending tasks, sleep.
Tasks are things like:
- timers
- updating the DOM in response to parsing
- input events
- mojo callbacks
TODO(ianh): Update the timings above to have some relationship to
reality.
TODO(ianh): Define an API so that the application can adjust the
budgets.
TODO(ianh): Define how scroll notifications get sent, or decide to
drop them entirely from this model.