⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 267634 in webkit


Ignore:
Timestamp:
Sep 26, 2020, 2:08:49 PM (6 years ago)
Author:
Alan Coon
Message:

Cherry-pick r267067. rdar://problem/69586680

REGRESSION (Async overflow scroll): Code snippets on getkirby.com appear and disappear as content is scrolled
https://bugs.webkit.org/show_bug.cgi?id=216490
<rdar://problem/67018073>

Reviewed by Zalan Bujtas.
Source/WebCore:

The content in question had a z-order layer tree like this:

A (0,0) width=997 height=829 (layerID 20) {sc 2} RenderView

+ B (0,0) width=997 height=8 RenderBlock HTML class='no-js'

+ C (0,0) width=997 height=829 RenderFlexibleBox MAIN

n D (0,0) width=256 height=829 RenderFlexibleBox NAV class='left panel'

n E (0,0) width=256 height=829 (layerID 25) {sc 3} RenderBlock DIV class='scroller'

n F (256,0) width=741 height=829 RenderFlexibleBox ARTICLE class='main panel'

n G (0,0) width=741 height=829 (layerID 26) {sc 4} RenderBlock DIV class='scroller'

n H (0,-816) width=741 height=2810 RenderBlock DIV class='article-content'

+ I (0,0) width=256 height=1000 (layerID 27) overlap RenderBlock (relative positioned) DIV class='content'
+ J (10,300) width=721 height=202 (layerID 28) overlap RenderBlock (relative positioned) DIV class='relative-box'
+ K (10,802) width=721 height=202 (layerID 29) overlap RenderBlock (relative positioned) DIV class='relative-box'
+ L (10,1304) width=721 height=202 (layerID 30) overlap RenderBlock (relative positioned) DIV class='relative-box'
+ M (10,1806) width=721 height=202 (layerID 31) overlap RenderBlock (relative positioned) DIV class='relative-box'
+ M (10,2308) width=721 height=202 (layerID 32) overlap RenderBlock (relative positioned) DIV class='relative-box'

When layer 'G' is scrolled, the code would find the paint-order parent, F, which is normal-flow because it has overflow:hidden,
and would call setDescendantsNeedUpdateBackingAndHierarchyTraversal() on it. However, that doesn't go high enough, because
we need to update J-M since their ancestor clipping stacks have geometry that relies on the scroll position of G. If we don't
update that geometry, GraphicsLayers have an incorrect notion of what's visible, and we don't attach backing store.

The fix is to climb up to the stacking context B and call setDescendantsNeedUpdateBackingAndHierarchyTraversal() on it.

Test: compositing/scrolling/async-overflow-scrolling/nested-scrollers-backing-attachment.html

  • rendering/RenderLayer.cpp: (WebCore::RenderLayer::scrollTo):

LayoutTests:

  • compositing/scrolling/async-overflow-scrolling/nested-scrollers-backing-attachment-expected.txt: Added.
  • compositing/scrolling/async-overflow-scrolling/nested-scrollers-backing-attachment.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@267067 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Location:
branches/safari-610-branch
Files:
3 added
5 edited

Legend:

Unmodified
Added
Removed
  • branches/safari-610-branch/LayoutTests/ChangeLog

    r267633 r267634  
     12020-09-25  Alan Coon  <alancoon@apple.com>
     2
     3        Cherry-pick r267067. rdar://problem/69586680
     4
     5    REGRESSION (Async overflow scroll): Code snippets on getkirby.com appear and disappear as content is scrolled
     6    https://bugs.webkit.org/show_bug.cgi?id=216490
     7    <rdar://problem/67018073>
     8   
     9    Reviewed by Zalan Bujtas.
     10    Source/WebCore:
     11   
     12    The content in question had a z-order layer tree like this:
     13   
     14        A (0,0) width=997 height=829 (layerID 20) {sc 2} RenderView
     15          + B (0,0) width=997 height=8 RenderBlock  HTML  class='no-js'
     16            + C (0,0) width=997 height=829 RenderFlexibleBox  MAIN
     17              n D (0,0) width=256 height=829 RenderFlexibleBox  NAV  class='left panel'
     18                n E (0,0) width=256 height=829 (layerID 25) {sc 3} RenderBlock  DIV  class='scroller'
     19              n F (256,0) width=741 height=829 RenderFlexibleBox  ARTICLE  class='main panel'
     20                n G (0,0) width=741 height=829 (layerID 26) {sc 4} RenderBlock  DIV  class='scroller'
     21                  n H (0,-816) width=741 height=2810 RenderBlock  DIV  class='article-content'
     22            + I (0,0) width=256 height=1000 (layerID 27) overlap RenderBlock (relative positioned)  DIV  class='content'
     23            + J (10,300) width=721 height=202 (layerID 28) overlap RenderBlock (relative positioned)  DIV  class='relative-box'
     24            + K (10,802) width=721 height=202 (layerID 29) overlap RenderBlock (relative positioned)  DIV  class='relative-box'
     25            + L (10,1304) width=721 height=202 (layerID 30) overlap RenderBlock (relative positioned)  DIV  class='relative-box'
     26            + M (10,1806) width=721 height=202 (layerID 31) overlap RenderBlock (relative positioned)  DIV  class='relative-box'
     27            + M (10,2308) width=721 height=202 (layerID 32) overlap RenderBlock (relative positioned)  DIV  class='relative-box'
     28   
     29    When layer 'G' is scrolled, the code would find the paint-order parent, F, which is normal-flow because it has overflow:hidden,
     30    and would call setDescendantsNeedUpdateBackingAndHierarchyTraversal() on it. However, that doesn't go high enough, because
     31    we need to update J-M since their ancestor clipping stacks have geometry that relies on the scroll position of G. If we don't
     32    update that geometry, GraphicsLayers have an incorrect notion of what's visible, and we don't attach backing store.
     33   
     34    The fix is to climb up to the stacking context B and call setDescendantsNeedUpdateBackingAndHierarchyTraversal() on it.
     35   
     36    Test: compositing/scrolling/async-overflow-scrolling/nested-scrollers-backing-attachment.html
     37   
     38    * rendering/RenderLayer.cpp:
     39    (WebCore::RenderLayer::scrollTo):
     40   
     41    LayoutTests:
     42   
     43    * compositing/scrolling/async-overflow-scrolling/nested-scrollers-backing-attachment-expected.txt: Added.
     44    * compositing/scrolling/async-overflow-scrolling/nested-scrollers-backing-attachment.html: Added.
     45   
     46   
     47    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@267067 268f45cc-cd09-0410-ab3c-d52691b4dbfc
     48
     49    2020-09-14  Simon Fraser  <simon.fraser@apple.com>
     50
     51            REGRESSION (Async overflow scroll): Code snippets on getkirby.com appear and disappear as content is scrolled
     52            https://bugs.webkit.org/show_bug.cgi?id=216490
     53            <rdar://problem/67018073>
     54
     55            Reviewed by Zalan Bujtas.
     56
     57            * compositing/scrolling/async-overflow-scrolling/nested-scrollers-backing-attachment-expected.txt: Added.
     58            * compositing/scrolling/async-overflow-scrolling/nested-scrollers-backing-attachment.html: Added.
     59
    1602020-09-25  Alan Coon  <alancoon@apple.com>
    261
  • branches/safari-610-branch/LayoutTests/compositing/scrolling/async-overflow-scrolling/clipped-layer-in-overflow-nested-expected.txt

    r267629 r267634  
    8888                (GraphicsLayer
    8989                  (position 23.00 23.00)
     90                  (bounds origin 0.00 150.00)
    9091                  (bounds 195.00 210.00)
    9192                  (clips 1)
  • branches/safari-610-branch/LayoutTests/platform/ios-wk2/compositing/scrolling/async-overflow-scrolling/clipped-layer-in-overflow-nested-expected.txt

    r246725 r267634  
    7777                (GraphicsLayer
    7878                  (position 23.00 23.00)
     79                  (bounds origin 0.00 150.00)
    7980                  (bounds 210.00 210.00)
    8081                  (clips 1)
  • branches/safari-610-branch/Source/WebCore/ChangeLog

    r267633 r267634  
     12020-09-25  Alan Coon  <alancoon@apple.com>
     2
     3        Cherry-pick r267067. rdar://problem/69586680
     4
     5    REGRESSION (Async overflow scroll): Code snippets on getkirby.com appear and disappear as content is scrolled
     6    https://bugs.webkit.org/show_bug.cgi?id=216490
     7    <rdar://problem/67018073>
     8   
     9    Reviewed by Zalan Bujtas.
     10    Source/WebCore:
     11   
     12    The content in question had a z-order layer tree like this:
     13   
     14        A (0,0) width=997 height=829 (layerID 20) {sc 2} RenderView
     15          + B (0,0) width=997 height=8 RenderBlock  HTML  class='no-js'
     16            + C (0,0) width=997 height=829 RenderFlexibleBox  MAIN
     17              n D (0,0) width=256 height=829 RenderFlexibleBox  NAV  class='left panel'
     18                n E (0,0) width=256 height=829 (layerID 25) {sc 3} RenderBlock  DIV  class='scroller'
     19              n F (256,0) width=741 height=829 RenderFlexibleBox  ARTICLE  class='main panel'
     20                n G (0,0) width=741 height=829 (layerID 26) {sc 4} RenderBlock  DIV  class='scroller'
     21                  n H (0,-816) width=741 height=2810 RenderBlock  DIV  class='article-content'
     22            + I (0,0) width=256 height=1000 (layerID 27) overlap RenderBlock (relative positioned)  DIV  class='content'
     23            + J (10,300) width=721 height=202 (layerID 28) overlap RenderBlock (relative positioned)  DIV  class='relative-box'
     24            + K (10,802) width=721 height=202 (layerID 29) overlap RenderBlock (relative positioned)  DIV  class='relative-box'
     25            + L (10,1304) width=721 height=202 (layerID 30) overlap RenderBlock (relative positioned)  DIV  class='relative-box'
     26            + M (10,1806) width=721 height=202 (layerID 31) overlap RenderBlock (relative positioned)  DIV  class='relative-box'
     27            + M (10,2308) width=721 height=202 (layerID 32) overlap RenderBlock (relative positioned)  DIV  class='relative-box'
     28   
     29    When layer 'G' is scrolled, the code would find the paint-order parent, F, which is normal-flow because it has overflow:hidden,
     30    and would call setDescendantsNeedUpdateBackingAndHierarchyTraversal() on it. However, that doesn't go high enough, because
     31    we need to update J-M since their ancestor clipping stacks have geometry that relies on the scroll position of G. If we don't
     32    update that geometry, GraphicsLayers have an incorrect notion of what's visible, and we don't attach backing store.
     33   
     34    The fix is to climb up to the stacking context B and call setDescendantsNeedUpdateBackingAndHierarchyTraversal() on it.
     35   
     36    Test: compositing/scrolling/async-overflow-scrolling/nested-scrollers-backing-attachment.html
     37   
     38    * rendering/RenderLayer.cpp:
     39    (WebCore::RenderLayer::scrollTo):
     40   
     41    LayoutTests:
     42   
     43    * compositing/scrolling/async-overflow-scrolling/nested-scrollers-backing-attachment-expected.txt: Added.
     44    * compositing/scrolling/async-overflow-scrolling/nested-scrollers-backing-attachment.html: Added.
     45   
     46   
     47    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@267067 268f45cc-cd09-0410-ab3c-d52691b4dbfc
     48
     49    2020-09-14  Simon Fraser  <simon.fraser@apple.com>
     50
     51            REGRESSION (Async overflow scroll): Code snippets on getkirby.com appear and disappear as content is scrolled
     52            https://bugs.webkit.org/show_bug.cgi?id=216490
     53            <rdar://problem/67018073>
     54
     55            Reviewed by Zalan Bujtas.
     56
     57            The content in question had a z-order layer tree like this:
     58
     59                A (0,0) width=997 height=829 (layerID 20) {sc 2} RenderView
     60                  + B (0,0) width=997 height=8 RenderBlock  HTML  class='no-js'
     61                    + C (0,0) width=997 height=829 RenderFlexibleBox  MAIN
     62                      n D (0,0) width=256 height=829 RenderFlexibleBox  NAV  class='left panel'
     63                        n E (0,0) width=256 height=829 (layerID 25) {sc 3} RenderBlock  DIV  class='scroller'
     64                      n F (256,0) width=741 height=829 RenderFlexibleBox  ARTICLE  class='main panel'
     65                        n G (0,0) width=741 height=829 (layerID 26) {sc 4} RenderBlock  DIV  class='scroller'
     66                          n H (0,-816) width=741 height=2810 RenderBlock  DIV  class='article-content'
     67                    + I (0,0) width=256 height=1000 (layerID 27) overlap RenderBlock (relative positioned)  DIV  class='content'
     68                    + J (10,300) width=721 height=202 (layerID 28) overlap RenderBlock (relative positioned)  DIV  class='relative-box'
     69                    + K (10,802) width=721 height=202 (layerID 29) overlap RenderBlock (relative positioned)  DIV  class='relative-box'
     70                    + L (10,1304) width=721 height=202 (layerID 30) overlap RenderBlock (relative positioned)  DIV  class='relative-box'
     71                    + M (10,1806) width=721 height=202 (layerID 31) overlap RenderBlock (relative positioned)  DIV  class='relative-box'
     72                    + M (10,2308) width=721 height=202 (layerID 32) overlap RenderBlock (relative positioned)  DIV  class='relative-box'
     73
     74            When layer 'G' is scrolled, the code would find the paint-order parent, F, which is normal-flow because it has overflow:hidden,
     75            and would call setDescendantsNeedUpdateBackingAndHierarchyTraversal() on it. However, that doesn't go high enough, because
     76            we need to update J-M since their ancestor clipping stacks have geometry that relies on the scroll position of G. If we don't
     77            update that geometry, GraphicsLayers have an incorrect notion of what's visible, and we don't attach backing store.
     78
     79            The fix is to climb up to the stacking context B and call setDescendantsNeedUpdateBackingAndHierarchyTraversal() on it.
     80
     81            Test: compositing/scrolling/async-overflow-scrolling/nested-scrollers-backing-attachment.html
     82
     83            * rendering/RenderLayer.cpp:
     84            (WebCore::RenderLayer::scrollTo):
     85
    1862020-09-25  Alan Coon  <alancoon@apple.com>
    287
  • branches/safari-610-branch/Source/WebCore/rendering/RenderLayer.cpp

    r267270 r267634  
    27262726
    27272727                // Scroll position can affect the location of a composited descendant (which may be a sibling in z-order),
    2728                 // so trigger a descendant walk from the paint-order parent.
    2729                 if (auto* paintParent = paintOrderParent())
     2728                // so trigger a descendant walk from the stacking context.
     2729                if (auto* paintParent = stackingContext())
    27302730                    paintParent->setDescendantsNeedUpdateBackingAndHierarchyTraversal();
    27312731            }
Note: See TracChangeset for help on using the changeset viewer.