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.
