Changes

Jump to: navigation, search

Platform/GFX/OffMainThreadCompositing

3,474 bytes added, 21:36, 18 May 2012
Plan
=Plan=
Our highest priority platform for this project is has been Android. Since , but we expect that a significant portion of the desktop and mobile implementations will overlapwant to extend this to all supported platforms: Mac, and since desktop development still proceeds more quickly than mobile developmentWindows (D3D9 + D3D10), we will actually develop the OS X implementation firstLinux, porting to Android as we go alongB2G (Gonk) and software-only (BasicLayers).
Overview ==Current status===== Features ===* Only scrolling is asynchronous/off main thread. All other features require further work.=== Operating systems ===* Android: Beta quality. We continue to iron out OMTC bugs as the Android 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.* 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.* B2G (Gonk): {{bug|741837}} Alpha quality. The B2G team has been working on getting it enabled and working through the implementation.* 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 current planCairo library thread-safe.* Windows:** Direct3D 10: {{bug|756606}} Not started yet.** Direct3D 9:{{bug|756608}} Not started yet.
* Desktop implementation (OS X)==Future Work==** Setup compositing thread. - Done===WebGL===** Setup ITC protocolCurrently, we read WebGL content back from the graphics card, and pass messagesthen send it to the compositor. This is terrible for performance. - Done** Make PLayers update asyncSharing WebGL backing textures between threads {{bug|728524}} will let us avoid reading back.** Setup Async VideoDouble-buffering WebGL {{bug|716859}} will let us hand off a texture to the compositor, then go back to drawing to the WebGL context.** Get Cairo working in Not using glFinish() to synchronize between threads {{bug|697831}} (most likely using the new threadARB_sync extension) will let us hand those textures off faster.
* Mobile implementation** Port the desktop implementation to Android. '''Assignee''': Cody Brocious (In progressDaeken)<br>'''Status''': Being worked
===Video===Video decoding is already off-main-thread, but it needs a synchronization point between the Gecko thread and the video thread to publish decoded frames. We need to be able to publish frames directly to the compositor thread, never involving the main thread.* Asynchronous video composition is {{bug|706172}} '''Assignee''': Nicolas Silva (nical)<br>'''Status''': Blocked on Linux implementation of OMTC ===CSS Animations===Currently CSS animations are driven by the main thread. It'd be better if the style and layout code could assign attributes to relevant layers that would then be interpolated using specified functions on the compositor thread.* Other desktop platformsAsynchronous CSS animation is {{bug|706179}} '''Assignee''': UNASSIGNED<br>'''Status''': No work done ===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.*{{bug|706499}} '''Assignee''': UNASSIGNED<br>'''Status''': No work done ===Animated images===Animated images are drawn using the main thread, but at least conceivably we could publish all the frames to the compositor and have the compositor know how to animate the images. This could help us to animate throbbers, etc, but we don't currently have any layers support at all for animated images, so it will be more work for potentially less gain.* Port {{bug|717872}} '''Assignee''': UNASSIGNED<br>'''Status''': No work done ===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. ==== Android ==== '''Assignee''': Benoit Girard/Ali Juma<br>'''Status''': Beta quality ==== Mac OS X ==== '''Assignee''': UNASSIGNED<br>'''Status''': Alpha quality ==== Linux ==== '''Assignee''': Nicolas Silva<br>'''Status''': In development ==== Direct3D 9 ==== '''Assignee''': UNASSIGNED<br>'''Status''': No work done ==== Direct3D 10 ==== '''Assignee''': UNASSIGNED<br>'''Status''': No work done ==== Basic (Software-only) ====This layers implementation to Windows and Linuxis used when we have no hardware-accelerated layers backend; for example, when we're on a system with too-old drivers'''Assignee''': Marco Castelluccio <br>'''Status''': In development
=Tracking bug=
Confirm
856
edits

Navigation menu