servo/servo — pull request #2943 by bjwbell (2014-07-28 18:15:41+00:00)
Title: Restructure compositor layers to work with iframes

When a frame is selected via set_ids, a tree of root compositor
layers is also created, matching the tree of pipelines in the frame.
This decouples the chronological ordering dependency for parent frames
and child iframes sending CreateOrUpdateRootLayer &
CreateOrUpdateDescendentLayer messages.

Change the Compositor ready and render states to per pipeline.
This ensures the compositor doesn't composite for an epoch until
every *pipeline* in the epoch is finished rendering.

For iframes it fixes a bug where the compositor didnt wait on the
child pipeline ready state before compositing the window.

Split SetLayerClipRect into two messages, SetLayerOrigin and
SetLayerSize. This is because only the parent layout task knows
the iframe position and only the iframe layout task knows the iframe
size. The parent layout task sets the iframe origin and the iframe
layout task sets the iframe size.

Gotchas:
* layout task or script task failure on exit ("task '' failed at sending
on a closed channel"), this happens if the child iframe shares the
same script task as the parent and can be avoided by adding the
sandbox attribute to the iframe.