Bug 1303761 - Disable paint skipping for all scroll frames between the fixed element and the scrolled clip. r?tnikkel draft
authorMarkus Stange <mstange@themasta.com>
Tue, 20 Sep 2016 19:39:02 -0400
changeset 415755 a11aee2cd1e79be3124be46c5b0b81f85a2283e4
parent 415751 de940401d445f412871f8d157d41111c77fa63dc
child 531690 38c19ba5fbc38c5330f028daf9cf7281c6542f5d
push id29956
push userbmo:mstange@themasta.com
push dateTue, 20 Sep 2016 23:45:54 +0000
reviewerstnikkel
bugs1303761
milestone51.0a1
Bug 1303761 - Disable paint skipping for all scroll frames between the fixed element and the scrolled clip. r?tnikkel MozReview-Commit-ID: 1FIQcJT55DJ
layout/base/DisplayListClipState.cpp
--- a/layout/base/DisplayListClipState.cpp
+++ b/layout/base/DisplayListClipState.cpp
@@ -37,20 +37,24 @@ DisplayListClipState::GetCurrentCombined
 
 void
 DisplayListClipState::SetScrollClipForContainingBlockDescendants(
     nsDisplayListBuilder* aBuilder,
     const DisplayItemScrollClip* aScrollClip)
 {
   if (aBuilder->IsPaintingToWindow() &&
       mClipContentDescendants &&
-      aScrollClip != mScrollClipContainingBlockDescendants &&
-      !DisplayItemScrollClip::IsAncestor(mClipContentDescendantsScrollClip, aScrollClip)) {
-    if (mClipContentDescendantsScrollClip && mClipContentDescendantsScrollClip->mScrollableFrame) {
-      mClipContentDescendantsScrollClip->mScrollableFrame->SetScrollsClipOnUnscrolledOutOfFlow();
+      aScrollClip != mScrollClipContainingBlockDescendants) {
+    // Disable paint skipping for all scroll frames on the way to aScrollClip.
+    for (const DisplayItemScrollClip* sc = mClipContentDescendantsScrollClip;
+         sc && !DisplayItemScrollClip::IsAncestor(sc, aScrollClip);
+         sc = sc->mParent) {
+      if (sc->mScrollableFrame) {
+        sc->mScrollableFrame->SetScrollsClipOnUnscrolledOutOfFlow();
+      }
     }
     mClipContentDescendantsScrollClip = nullptr;
   }
   mScrollClipContainingBlockDescendants = aScrollClip;
   mStackingContextAncestorSC = DisplayItemScrollClip::PickAncestor(mStackingContextAncestorSC, aScrollClip);
 }
 
 void