Planning For Layers And Related Features in 1.9.3
Overall strategic goals:
- Make Fennec rendering as fast as it can possibly be (especially for plugins and video)
- Remove all restrictions on mixing chrome/content rendering
- Accelerated WebGL and video in Web pages and fullscreen
Aggressive technical goals for 1.9.3:
- Land basic layer system and support for rendering video using layer APIs (roc)
- Provide D3D and OpenGL layer system implementations to be used for layer compositing when suitable hardware is available (bas)
- WebGL and video layers supported by hardware acceleration (bas)
- Integrate DSP Theora decoder and bc-cat video layers for N900+OpenGL (mgregan)
- All view managers integrated into a single hierarchy rooted at the toplevel window (roc, tnikkel)
- One platform widget per toplevel window, with no child Gecko widgets (only child widgets belong to plugins) (roc, tnikkel)
- Layout retains a layer tree between paints (roc)
- The layer system can be configured to tile-cache scrolled-out-of-view content (for Fennec) (?)
- The toplevel browser window can be transparent (optionally with an Aero Glass background) (bas, jrmuizel)
- Using image layers to render plugins on Fennec (?)
- A layer tree can be exported from a content process to the master process (?)
The personnel assignments in the above list are tentative!
Additional layers work that would be "nice to have" for 1.9.3, but not required:
- Off-main-thread layer compositing
- Pushing animation into the layer system for off-main-thread animation
- CSS 3D transforms via layers
The hardest, riskiest items are "retain layer tree", "one widget", and "integrated view managers". They are the top priorities to tackle immediately. I'm bad at schedule estimation, but I'll estimate two months to get reviewable code, and a few more months of fixing bugs. I think shipping this work by October is possible but not certain. I think we should invest hard to try to make it happen, for Fennec's sake at least.
I have listed the technical goals more-or-less in the order in which I expect them to proceed.
I have not created a dependency on "compositor phase 2" (a main-thread painting controller with frame rate control and JS animation API). As far as I know it's not necessary for the above work, and seems lower priority.