Bug 1464288 - Make sure PreProcessDisplayLists logic for switching AGRs matches what ComputeRebuildRegion uses. r?miko draft
authorMatt Woodrow <mwoodrow@mozilla.com>
Sat, 26 May 2018 16:55:17 +1200
changeset 800179 7541d312b1567e780c494a072d0cee809ea8c668
parent 799635 75fd91bfeaeeef136fefc23b661f87b5ee2bd0c1
push id111293
push usermwoodrow@mozilla.com
push dateSat, 26 May 2018 04:56:10 +0000
reviewersmiko
bugs1464288
milestone62.0a1
Bug 1464288 - Make sure PreProcessDisplayLists logic for switching AGRs matches what ComputeRebuildRegion uses. r?miko MozReview-Commit-ID: F6N0XLCpuEe
layout/painting/RetainedDisplayListBuilder.cpp
layout/reftests/display-list/1464288-1.html
layout/reftests/display-list/1464288-ref.html
layout/reftests/display-list/reftest.list
--- a/layout/painting/RetainedDisplayListBuilder.cpp
+++ b/layout/painting/RetainedDisplayListBuilder.cpp
@@ -70,17 +70,18 @@ MarkFramesWithItemsAndImagesModified(nsD
       MarkFramesWithItemsAndImagesModified(i->GetChildren());
     }
   }
 }
 
 static AnimatedGeometryRoot*
 SelectAGRForFrame(nsIFrame* aFrame, AnimatedGeometryRoot* aParentAGR)
 {
-  if (!aFrame->IsStackingContext()) {
+  if (!aFrame->IsStackingContext() ||
+      !aFrame->IsFixedPosContainingBlock()) {
     return aParentAGR;
   }
 
   if (!aFrame->HasOverrideDirtyRegion()) {
     return nullptr;
   }
 
   nsDisplayListBuilder::DisplayListBuildingData* data =
new file mode 100644
--- /dev/null
+++ b/layout/reftests/display-list/1464288-1.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html reftest-async-scroll
+      reftest-displayport-x="0" reftest-displayport-y="0"
+      reftest-displayport-w="800" reftest-displayport-h="2000"
+      reftest-async-scroll-x="0" reftest-async-scroll-y="400"
+      class="reftest-wait">
+<head>
+
+<style>
+
+body {
+  margin: 0;
+  height: 4000px;
+  overflow:hidden;
+}
+
+div {
+  left: 200px;
+  top: 200px;
+  width: 200px;
+  height: 200px;
+}
+
+.scrolled {
+  position: absolute;
+  z-index: 1;
+}
+
+.fixed {
+  position: fixed;
+  background-color: red;
+}
+
+</style>
+</head>
+<body>
+
+<div style="opacity:0.5">
+  <div class="scrolled" style="top: 200px; background-color: green"></div>
+  <div class="scrolled" style="top: 600px; background-color:blue" id="scrolled"></div>
+  <div class="fixed" style="top: 200px"></div>
+  <div class="fixed" id="fixed" style="top: 200px; width: 100px; height: 100px; z-index: 2; background-color: orange"></div>
+</div>
+
+</body>
+
+<script>
+function doTest() {
+  document.getElementById("fixed").style.backgroundColor = "red";
+  document.documentElement.removeAttribute("class");
+}
+
+window.addEventListener("MozReftestInvalidate", doTest);
+</script>
+</html>
new file mode 100644
--- /dev/null
+++ b/layout/reftests/display-list/1464288-ref.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+<style>
+body {
+  margin: 0;
+}
+
+div {
+  left: 200px;
+  top: 200px;
+  position:absolute;
+}
+</style>
+</head>
+<body>
+<div style="opacity:0.5; position:static">
+  <div style="width: 200px; height: 200px; background-color: blue;"></div>
+  <div style="width: 100px; height: 100px; background-color: red;"></div>
+</div>
+</body>
+</html>
--- a/layout/reftests/display-list/reftest.list
+++ b/layout/reftests/display-list/reftest.list
@@ -28,8 +28,9 @@ skip-if(!asyncPan) == 1437374-1.html 143
 == 1443027-1.html 1443027-ref.html
 == 1443027-2.html 1443027-ref.html
 == 1443027-3.html 1443027-3-ref.html
 == 1451971-1.html 1451971-ref.html
 == 1453541-1.html 1453541-ref.html
 == 1453541-2.html 1453541-ref.html
 == 1452805-1.html 1452805-ref.html
 == 1461231-1.html about:blank
+fuzzy(2,40000) skip-if(!asyncPan) == 1464288-1.html 1464288-ref.html