Plugins/Async Drawing: Difference between revisions

(prefs)
 
(10 intermediate revisions by 2 users not shown)
Line 7: Line 7:
= Current WMODE Handling =
= Current WMODE Handling =


Flash wmode definitions for Windows and Linux:
== Linux ==


{| class="wikitable" style="width:300px"
{| class="wikitable" style="width:300px"
Line 24: Line 24:
|}
|}


On OSX, Flash always uses a hybrid windowless mode.
== OSX ==
Flash always uses a hybrid windowless mode.


Post Adobe Flash version 24, Flash internally switches to wmode opaque for windowed mode and makes use of a new [https://wiki.mozilla.org/NPAPI:AsyncDrawing async rendering API] developed by Mozilla and Adobe.
== Windows ==


{| class="wikitable" style="width:50%"
Windows supports three modes, none of which involve window-backed surfaces:
|-
* '''direct''': Post Adobe Flash version 24, Flash offers a new [https://wiki.mozilla.org/NPAPI:AsyncDrawing async rendering API] developed by Mozilla and Adobe.  This mode handles that behavior.  If <code>dom.ipc.plugins.allow_dxgi_surface=true</code> (the default) and the DirectX device supports it then hardware accelerated surfaces are used.  Otherwise, this mode uses in-memory (unaccelerated) surfaces.
! Platform !! WMODE !! Async Mode (Browser has acceleration) !! Async Mode (Browser does not has acceleration)
* '''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.
| Windows || unspecified || async (bitmap) || async (bitmap)
 
Some wmode values are rewritten by Firefox to promote certain modes to more performant and stable modes.
 
When <code>dom.ipc.plugins.forcedirect.enabled=true</code> (the default) [1] and <code>dom.ipc.plugins.asyncdrawing.enabled=true</code> (also the default) we use:
 
{| class="wikitable" style="width:75%"
|-
|-
| Windows || window || async (bitmap) || async (bitmap)
! Requested WMODE !! Resulting WMODE !! Rendering Mode (GPU supports acceleration) !! Rendering Mode (GPU does not support acceleration)
|-
|-
| Windows || direct || async (accelerated) || window [1]
| window || direct || async (GPU accelerated) || async (in-memory bitmap) [2]
|-
|-
| Windows || opaque || async (bitmap) || async (bitmap)
| gpu || direct || async (GPU accelerated) || async (in-memory bitmap) [3]
|-
|-
| Windows || transparent || windowless (bitmap) || windowless (bitmap)
| unspecified || direct || async (GPU accelerated) || async (in-memory bitmap) [2]
|-
|-
| Linux || na || na || na
| opaque || opaque || not async (in-memory bitmap) || not async (in-memory bitmap)
|-
|-
| OSX || na || na || na
| transparent || transparent || not async (in-memory bitmap) || not async (in-memory bitmap)
|}
|}


In addition to this Flash behavior, some wmode values are rewritten by Firefox to redirect certain modes to more performant and stable modes. Specifically:
When <code>dom.ipc.plugins.asyncdrawing.enabled=false</code> we use [4]:


{| class="wikitable" style="width:50%"
{| class="wikitable" style="width:50%"
|-
|-
! Platform !! WMODE !! Mode (Browser has acceleration) !! Mode (Browser does not has acceleration)
! Requested WMODE !! Resulting WMODE !! Rendering Mode
|-
| window || opaque || not async (in-memory bitmap)
|-
|-
| Windows || unspecified || direct || no change (opaque) [2]
| gpu || opaque || not async (in-memory bitmap)
|-
|-
| Windows || window || direct || no change (opaque) [2]
| unspecified || opaque || not async (in-memory bitmap)
|-
|-
| Linux || all modes || windowless || windowless
| opaque || opaque || not async (in-memory bitmap)
|-
|-
| OSX || all modes || windowless || windowless
| transparent || transparent || not async (in-memory bitmap)
|}
|}


[1] To be deprecated<br/>
[1] {{bug|1620461}}<br/>
[2] {{bug|1340276}}, {{bug|1359450}}
[2] {{bug|1340276}}, {{bug|1359450}}<br/>
[3] {{bug|1565980}}<br/>
[4] {{bug|1620466}}


= Telemetry Links =
= Telemetry Links =
Line 100: Line 110:


* dom.ipc.plugins.asyncdrawing.enabled=true
* dom.ipc.plugins.asyncdrawing.enabled=true
* dom.ipc.plugins.forcedirect.enabled=true
* dom.ipc.plugins.forcedirect.enabled=true (see {{bug|1620461}})
* make sure you are running Flash version >= 23
* make sure you are running Flash version >= 23
Async drawing is currently <strong>disabled</strong> via a pref in Release.


= Main Bug List =
= Main Bug List =
7

edits