Changes

Jump to: navigation, search

Platform/GFX/OffMainThreadCompositing

2,133 bytes removed, 13:51, 6 October 2014
no edit summary
==Current status==
=== Features ===
* Only scrolling is asynchronous/off main thread. All other features require further work.
=== Operating systems ===
* Android and B2G: Released. We continue to iron out OMTC bugs as the test base expands, but we are already quite high-quality.
* OS X: {{bug|756601}} Alpha quality. We began development of OMTC on this platform, but we haven't worked on it much since then. It pretty much works but is disabled by default.
* Linux: {{bug|722012}} In initial implementation stages. We're still sorting out basic issues with X and GL, as we don't support OMTC with BasicLayers yet.
* BasicLayers (software only): {{bug|703484}} In initial implementation stages. Marco Castelluccio, a volunteer contributor, is working through implementing off-main-thread BasicLayers, which also involves making our Cairo library thread-safe.
* Windows:
** Direct3D 10: {{bug|756606}} Work in progress; has some fundamental problems with textures which require the layers refactoring.
** Direct3D 9: {{bug|756608}} Work in progress; but, in theory, should be fairly straightforward (there are already shadow layers implemented, but I don't think they are used anywhere).
 
==Future Work==
===WebGL===
The WebGL streaming buffer project helped improve our WebGL compositing performances.Even though there is stil some work in progress, most of the work has landed already.* Sharing WebGL backing textures optimizations can be made to avoid synchonization between threads {{bug|728524}} lets us avoid reading back.* Double-buffering WebGL {{bug|716859}} lets us hand off a texture to the compositor, then go back to drawing to the WebGL context.* Not using glFinish() to synchronize between threads {{bug|697831}} (most likely using cpu and the ARB_sync extension) will let us hand those textures off fastergpu
'''Assignee''': Jeff Giblert, Cody Brocious (Daeken)<br>
'''Status''': Mostly done
 
===Video===
The video pipeline can now decode and composite video frames without touching the content thread (async-video). To improve performances and audio/video synchronization, there is some work in adding synchronization logic on the compositor side.
* Asynchronous video composition (already landed) is {{bug|706172}}
 
'''Assignee''': Nicolas Silva (nical)<br>
'''Status''': async-video done, improvements planned.
===CSS Animations===
* Asynchronous CSS animation is {{bug|706179}}
'''Assignee''': Used to be David Zbarsky (dzbarsky), nobody at the moment.'''Status''': Being workedenabled on B2G, disabled on other platforms, on hold.
===Plugins===
Plugins are already drawn asynchronously (at least on OS X), similarly to how HTML5 video works. Publishing those plugin "frames" to the compositor is directly analagous.
Plugins now work with OMTC when APZ is disabled, but windowed plugin need some more work to play well with APZ (and e10s?).
* {{bug|706499}}
'''Assignee''': UNASSIGNED<br>
'''Status''': No APZ+ windowed plugins need some work done.
===Animated images===
* {{bug|717872}}
'''Assignee''': Joe Drew <br>Nobody'''Status''': Work in progressOn hold.
===Off-main-thread layers implementations===
Features listed above won't work off the main thread unless we have a layers implementation that knows how to draw off the main thread.
==== Layers refactoring B2G ====The layers system has been heavily refactored to more easily facilitate OMTC on all platforms.
The biggest changes are to the compositing sideOMTC, and to how textures/buffers/handles are passed between the drawing and compositing components. The aim is for most OMTC code to be backend-independent. Compositing is done by a Compositor class (rather than the ShadowLayerManagerOMTA, which still have responsibility for managing the shadow layer tree). There are backend-specific compositor sub-classesAPZ, but the shadow layer tree tiling and it's manager are backendasync-independent. Buffers/textures video are handled by TextureClient/TextureHost pairs which have backend-specific subclasses and handle all inter-thread communicationenabled. The layer classes can then be agnostic about GL backend and IPC mechanismonly.
The [https'''Assignee''':Sotaro Ideka//wiki.mozilla.org/GeckoNicolas Silva'''Status''':Overview#Graphics Gecko overview] wiki page contains good documentation about the current (post refactoring) layers system.Shipped
==== Android ====
OMTC, APZ, tiling and async-video are enabled, OMTA is disabled. GL backend only. '''Assignee''': Benoit Girard/Ali Juma<br>
'''Status''': Shipped
==== Mac OS X ====
{{bug|756601}} OMTC, tiling and async-video are enabled, OMTA and APZ are disabled (work in progress). Mostly the GL backend, and to a lesser extent basic backend. '''Assignee''': UNASSIGNED<br>Matt Woodrow'''Status''': Beta qualityShipped
==== Linux ====
 
{{bug|722012}} Mostly works, one reftest failure to figure out before we can enable OMTC and async-video (work in progress). Linux will use basic layers by default at least for some time, the GL backend can be enabled through a pref.
'''Assignee''': Nicolas Silva<br>
'''Status''': In development, testable but buggy not optimized.
==== Direct3D 9 Windows ====
'''Assignee''': Nick Cameron<br>'''Status''': In developmentOMTC and async-video enabled, tiling, OMTA and APZ are disabled (work in progress). Windows users get the d3d11, d3d9 or basic backend depending on the OS and driver versions.
==== Direct3D 10 ===='''Assignee''': Bas Schouten/Nicolas Silva <br>'''Status''': Shipped
'''Assignee''': Bas Schouten<br>'''Status''': Alpha quality==== Basic backend (Software-only) ====
==== Basic (Software-only) ====This layers implementation is used when we have no hardware-accelerated layers backend; for example, when we're on a system with too-old or buggy drivers.
'''Assignee''': Marco Castelluccio /Nicolas Silva <br>'''Status''': In developmentShipped
=Tracking bug=
Confirm
137
edits

Navigation menu