Plugins/Async Drawing

General

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

PLUGIN_DRAWING_MODEL Nightly Evolution

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

Main 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