gfx/doc/LayersHistory.md
author Ted Mielczarek <ted@mielczarek.org>
Fri, 06 Jan 2017 05:57:10 -0500
changeset 328603 dedf4f49b3756b09986e78dc5519a291b81f133f
parent 281917 ae7d25a9e74d0f0968b2a85dd40fcc134560b81d
child 434376 21a1fadfbe5aa5f1e0f5004c071a5d1163e058ff
permissions -rw-r--r--
bug 1329320 - replace makecab with rust-makecab in symbolstore. r=gps It turns out that running makecab to compress PDB files takes a significant amount of time in the buildsymbols step. I wrote an implementation of makecab in Rust that implements only the subset of features we use and it's significantly faster: https://github.com/luser/rust-makecab This patch adds a makecab check to moz.configure, adds a release build of the makecab binary to the Windows tooltool manifests, points the build at it from mozconfig.win-common, and changes symbolstore.py to use MAKECAB from substs instead of calling `makecab.exe` directly. MozReview-Commit-ID: 76FHLIZFCXS

This is an overview of the major events in the history of our Layers infrastructure.

- iPhone released in July 2007 (Built on a toolkit called LayerKit)

- Core Animation (October 2007) LayerKit was publicly renamed to OS X 10.5

- Webkit CSS 3d transforms (July 2009)

- Original layers API (March 2010) Introduced the idea of a layer manager that
  would composite. One of the first use cases for this was hardware accelerated
  YUV conversion for video.

- Retained layers (July 7 2010 - Bug 564991)
This was an important concept that introduced the idea of persisting the layer
content across paints in gecko controlled buffers instead of just by the OS. This introduced
the concept of buffer rotation to deal with scrolling instead of using the
native scrolling APIs like ScrollWindowEx

- Layers IPC (July 2010 - Bug 570294)
This introduced shadow layers and edit lists and was originally done for e10s v1

- 3d transforms (September 2011 - Bug 505115)

- OMTC (December 2011 - Bug 711168)
This was prototyped on OS X but shipped first for Fennec

- Tiling v1 (April 2012 - Bug 739679)
Originally done for Fennec.
This was done to avoid situations where we had to do a bunch of work for
scrolling a small amount. i.e. buffer rotation.  It allowed us to have a
variety of interesting features like progressive painting and lower resolution
painting.

- C++ Async pan zoom controller (July 2012 - Bug 750974)
The existing APZ code was in Java for Fennec so this was reimplemented.

- Streaming WebGL Buffers (February 2013 - Bug 716859)
Infrastructure to allow OMTC WebGL and avoid the need to glFinish() every
frame.

- Compositor API (April 2013 - Bug 825928)
The planning for this started around November 2012.
Layers refactoring created a compositor API that abstracted away the differences between the
D3D vs OpenGL. The main piece of API is DrawQuad.

- Tiling v2 (Mar 7 2014 - Bug 963073)
Tiling for B2G. This work is mainly porting tiled layers to new textures,
implementing double-buffered tiles and implementing a texture client pool, to
be used by tiled content clients.

 A large motivation for the pool was the very slow performance of allocating tiles because
of the sync messages to the compositor.

 The slow performance of allocating was directly addressed by bug 959089 which allowed us
to allocate gralloc buffers without sync messages to the compositor thread.

- B2G WebGL performance (May 2014 - Bug 1006957, 1001417, 1024144)
This work improved the synchronization mechanism between the compositor
and the producer.