[Webkit-unassigned] [Bug 55257] Support creating compositing layers for scrollable frames and iframes

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Wed Apr 6 09:53:29 PDT 2011


https://bugs.webkit.org/show_bug.cgi?id=55257





--- Comment #38 from Simon Fraser (smfr) <simon.fraser at apple.com>  2011-04-06 09:53:28 PST ---
(In reply to comment #37)

> With respect to your question to what causes the compositing to be re-evaluated when e.g. the iframe size changes: With my attached patch, the compositing layers will always be updated after layout (even if we previously were not compositing, because I set 'm_compositingDependendsOnGeometry').

But the parent document many not see any layout when the iframe contents change.

> About handling the overflow from the RenderIFrame: needsToBeComposited() is currently not called for RenderIFrames, because RenderIFrames usually don't have a RenderLayer. They only create a RenderLayer it if the child is compositing. That's why it plays nicely with the attached change.

That's not true. <iframe style="position: relative"> will create a RenderIFrame with a RenderLayer.

> Also it seems like the overflow would have to be detected by the child in one form or another anyway, because it has to happen after the child FrameView has completed layout.
> 
> About using 'RenderLayerCompositor::m_forceCompositing', that seems to work fine too. However, not sure what a good place to force it would be. Somewhere at the end of FrameView::layout() is called? It could probably go into FrameView::layout before updateCompositingLayers() is called after the actual layout, so that if the document changes and does not overflow anymore we can disable m_forceCompositing again (compositing will still have to be updated because we don't know if 'force' was the only reason to turn it on).

Something like that.

> Otherwise, the graphics layers created by m_forceCompositing vs. using needsToBeComposited() for the RenderView's layer seem to be the same.
> Speaking of which, I don't understand the '(inCompositingMode() && layer->isRootLayer())' part in needsToBeComposited(). Why does the root layer need a backing when it already creates a 'root platform layer' (the latter being what seems to be used in compositing)?

m_rootPlatformLayer is the layer handed off to the native layer-hosting code.
The root RenderLayer's GraphicsLayer (which is often a layer with no backing) exists to host other compositing layers in the document, and is required to get the geometry right.

-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.



More information about the webkit-unassigned mailing list