Plugins/Async Drawing
General
- Async Drawing NPAPI spec
- Async Drawing Test Plan
- bug 1217665 - Revive async drawing code for plugins (dvander's landings)
Current WMODE Handling
Linux
| WMODE | layout |
|---|---|
| unspecified | child window |
| window | child window |
| direct | child window |
| opaque | shared surface (windowless) |
| transparent | shared surface (windowless) |
OSX
Flash always uses a hybrid windowless mode.
Windows
Windows supports three modes, none of which involve window-backed surfaces:
- direct: Post Adobe Flash version 24, Flash offers a new async rendering API developed by Mozilla and Adobe. This mode handles that behavior. If
dom.ipc.plugins.allow_dxgi_surface=true(the default) and the DirectX device supports it then hardware accelerated surfaces are used. Otherwise, this mode uses in-memory (unaccelerated) surfaces. - opaque: This mode always uses unaccelerated surfaces. It is intended for plugins that opaquely cover any HTML elements.
- transparent: This mode always uses unaccelerated surfaces. It is intended to blend with HTML elements. For that reason, this mode is slower than opaque mode.
Some wmode values are rewritten by Firefox to promote certain modes to more performant and stable modes.
When dom.ipc.plugins.forcedirect.enabled=true (the default) [1] and dom.ipc.plugins.asyncdrawing.enabled=true (also the default) we use:
| Requested WMODE | Resulting WMODE | Rendering Mode (GPU supports acceleration) | Rendering Mode (GPU does not support acceleration) |
|---|---|---|---|
| window | direct | async (GPU accelerated) | async (in-memory bitmap) [2] |
| gpu | direct | async (GPU accelerated) | async (in-memory bitmap) [3] |
| unspecified | direct | async (GPU accelerated) | async (in-memory bitmap) [2] |
| opaque | opaque | not async (in-memory bitmap) | not async (in-memory bitmap) |
| transparent | transparent | not async (in-memory bitmap) | not async (in-memory bitmap) |
When dom.ipc.plugins.asyncdrawing.enabled=false we use [4]:
| Requested WMODE | Resulting WMODE | Rendering Mode |
|---|---|---|
| window | opaque | not async (in-memory bitmap) |
| gpu | opaque | not async (in-memory bitmap) |
| unspecified | opaque | not async (in-memory bitmap) |
| opaque | opaque | not async (in-memory bitmap) |
| transparent | transparent | not async (in-memory bitmap) |
[1] bug 1620461
[2] bug 1340276, bug 1359450
[3] bug 1565980
[4] bug 1620466
Telemetry Links
| Telemetry Value | Platform | Type |
|---|---|---|
| 0 | Windows, Linux | child window |
| 1 | OSX | NPDrawingModelQuickDraw |
| 2 | OSX | NPDrawingModelCoreGraphics |
| 3 | OSX | NPDrawingModelOpenGL |
| 4 | OSX | NPDrawingModelCoreAnimation |
| 5 | OSX | NPDrawingModelInvalidatingCoreAnimation |
| 6 | Windows | NPDrawingModelSyncWin |
| 7 | Linux | NPDrawingModelSyncX |
| 8 | Windows | NPDrawingModelAsyncBitmapSurface |
| 9 | Windows | NPDrawingModelAsyncWindowsDXGISurface |
Testing
To enable:
- dom.ipc.plugins.asyncdrawing.enabled=true
- dom.ipc.plugins.forcedirect.enabled=true (see bug 1620461)
- make sure you are running Flash version >= 23
Main Bug List
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 406 [1] => Not Acceptable ) ) 1
Breakdown
Bugs associated with performance problems.
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 406 [1] => Not Acceptable ) ) 1
Bugs associated with incorrect clipping with surrounding content, z-order issues.
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 406 [1] => Not Acceptable ) ) 1
Bugs associated with missing plugin frames during painting. Need to determine if the issue is on our end of Adobe's.
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 406 [1] => Not Acceptable ) ) 1
Bugs associated with incorrect background transparency, wmode="transparent" issues.
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 406 [1] => Not Acceptable ) ) 1
Regressions from the3 bgcolor fix.
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 406 [1] => Not Acceptable ) ) 1
Bugs associated with sitecompat issues.
Bugzilla query error
Array ( [type] => error [message] => http-bad-status [params] => Array ( [0] => 406 [1] => Not Acceptable ) ) 1