Bug 232125

Summary: Refactor handling of HTMLMediaElement::mediaPlayerRenderingCanBeAccelerated
Product: WebKit Reporter: Jean-Yves Avenard [:jya] <jean-yves.avenard>
Component: MediaAssignee: Jean-Yves Avenard [:jya] <jean-yves.avenard>
Status: NEW ---    
Severity: Normal CC: webkit-bug-importer
Priority: P2 Keywords: InRadar
Version: Other   
Hardware: Unspecified   
OS: Unspecified   
See Also: https://bugs.webkit.org/show_bug.cgi?id=232124
https://bugs.webkit.org/show_bug.cgi?id=230495
https://bugs.webkit.org/show_bug.cgi?id=215594
https://bugs.webkit.org/show_bug.cgi?id=220375

Description Jean-Yves Avenard [:jya] 2021-10-21 18:19:21 PDT
Related to bug 232124

There are three conditions that needs to be controlled:
1- Can the media player be accelerated
2- Can the renderer be accelerated
3- Should the video playing in this renderer be accelerated.

Right now, the logic is about as follow:

- The MediaPlayerPrivate contains the information related to 1.
- When the MediaPlayerPrivate needs to know 3) for the purpose of handling the call to acceleratedRenderingStateChanged, it will query the MediaPlayer, which queries the HTMLMediaElement client for 2), for this it will query the RenderLayerCompositor which will return false if accelerated rendering is disabled and if not queries the RenderVideo, which itself queries the HTMLMediaElement which queries the MediaElement which queries the MediaElementPrivate to determine if the player itself can be accelerated.

And there are some exceptions to the above if we are in PiP or in fullscreen then we assume it's always accelerated.

Not getting the information about the video being played in an accelerated layer right, causes the media to play without video and just audio. There's been multiple bugs related to the information not being correct when checked:
(bug 230495, bug 215594, bug 220375 to name a few)

We should split things so that the MediaPlayerPrivate only knows about 1; the compositor only knows about 2. And it's up to the HTMLMediaElement to determine 3 and relay this information to the MediaPlayerPrivate.

So there's no race or conflicting information between the various parties.
Comment 1 Radar WebKit Bug Importer 2021-10-21 18:20:31 PDT
<rdar://problem/84531384>