[Webkit-unassigned] [Bug 198788] REGRESSION(r245818): Async scrolling: Fixed position banner jumps around page

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Wed Jun 12 08:23:29 PDT 2019


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

Simon Fraser (smfr) <simon.fraser at apple.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
 Attachment #371955|review?                     |review+
              Flags|                            |

--- Comment #3 from Simon Fraser (smfr) <simon.fraser at apple.com> ---
Comment on attachment 371955
  --> https://bugs.webkit.org/attachment.cgi?id=371955
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=371955&action=review

> Source/WebCore/ChangeLog:3
> +        REGRESSION(r245818): Async scrolling: Fixed position banner jumps around page

Change the title to make it clear this is about fixed inside sticky.

> Source/WebCore/page/scrolling/cocoa/ScrollingTreeFixedNode.mm:106
> +            if (is<ScrollingTreePositionedNode>(*ancestor)) {
> +                auto& positioningAncestor = downcast<ScrollingTreePositionedNode>(*ancestor);
> +                // See if sticky node already handled this positioning node.
> +                // FIXME: Include positioning node information to sticky/fixed node to avoid these tests.
> +                if (lastStickyNode && lastStickyNode->layer() == positioningAncestor.layer())
> +                    continue;
> +                if (positioningAncestor.layer() != m_layer)
> +                    overflowScrollDelta -= positioningAncestor.scrollDeltaSinceLastCommit();
> +                continue;
> +            }
> +
> +            if (is<ScrollingTreeStickyNode>(*ancestor)) {
> +                auto& stickyNode = downcast<ScrollingTreeStickyNode>(*ancestor);
> +                overflowScrollDelta += stickyNode.scrollDeltaSinceLastCommit();
> +                lastStickyNode = &stickyNode;
> +                continue;
> +            }

It seems weird for ScrollingTreeFixedNode to have to test all its ancestor node types. This was the problem that the old delta was trying to solve, I think; these ancestors should pass state down the tree for the applyLayerPositions() tree walk.

> Source/WebCore/rendering/RenderLayerCompositor.cpp:3057
> +        if (ancestor->hasCompositedScrollableOverflow())
> +            return true;

But this might not be in the ancestor paint order chain. A simple fixed -> non-stacking overflow -> fixed should not need to composite the inner fixed. I think we only need to composite the inner fixed if some paint-order ancestor has a scrolling tree node (but we can't do that check at this stage).

-- 
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20190612/3e81bdbe/attachment.html>


More information about the webkit-unassigned mailing list