New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 788216 link

Starred by 1 user

Issue metadata

Status: Available
Owner: ----
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 2
Type: Bug



Sign in to add a comment

RenderFrameProxy to main frame in child requests ContextProvider and CompositorFrameSink

Project Member Reported by fsam...@chromium.org, Nov 23 2017

Issue description

Right now a RenderFrameProxy in a child OOPIF will request a ContextProvider and CompositorFrameSink because it's a RenderView. Part of this work is a sync IPC to the GPU process to create a command buffer. This means that during that IPC the main content of the frame is not loading. I bet you can improve loading performance in OOPIFs if you avoid creating ContextProviders and CompositorFrameSink in RenderFrameProxys.


 
The proxy doesn't do any rendering so this is unnecessary work.

Comment 2 by danakj@chromium.org, Nov 23 2017

Components: -Internals>Compositing Blink>Internals>Frames

Comment 3 by danakj@chromium.org, Nov 23 2017

RenderWidgets that don't composite should be created with |never_visible|=true.

Comment 4 by lfg@chromium.org, Nov 23 2017

Keep in mind that the proxy can be swapped with a local main frame, and in that case the RenderWidget will start to submit frames.

The other way can also happen, a local main frame that was compositing can be swapped with a proxy and will stop producing frames.

Comment 5 by kenrb@chromium.org, Nov 23 2017

There is a slight complication where in some cases there can be a remote main frame that can later be 'swapped in' and become a local main frame, in that case the non-compositing RenderWidget will need to start compositing.

I am becoming increasingly motivated to pick up bug 419087 again to kill that RenderWidget, because it keeps causing pain working around the special case. Unfortunately, four different people have worked on that bug over three years now, and untangling RenderView from RenderWidget is still looking daunting.
FWIW, +1 to someone working on this decoupling sooner rather than later. We keep bumping into this issue in Viz developing and having to work around it. 
Re comment 5: can you explain in more detail the use-case of a remote main frame
that can be later swapped in?

Comment 8 by nasko@chromium.org, Feb 1 2018

A simple case for remote main frame swap is possible even without Site Isolation. If you have tab on a.com, which does window.open() to create another one with opener relationship, the two are put in the same BrowsingInstance since they can script each other. If the new tab is navigated to a new site, it will be navigated into a new process, however because of scriptability requirements, we create proxy objects for the respective windows in each process. If later on the opened tab navigates to the same site as the opener, they will be put again in the same process. In this case we will perform a RemoteFrame -> LocalFrame swap.
Let me know if I can help clarify anything else.

Sign in to add a comment