Bug 1464288 - Make sure PreProcessDisplayLists logic for switching AGRs matches what ComputeRebuildRegion uses. r=miko a=RyanVM
authorMatt Woodrow <mwoodrow@mozilla.com>
Sat, 26 May 2018 16:55:17 +1200
changeset 473481 fd2dd9452ccd7b0b22656a4566a136a8c1eb27af
parent 473480 17fdd7dd7ba3a4c25de8adb311b4c3305389d12d
child 473482 d81b581fbd2cdb5fcfd982c7d2d3222204192725
push id1728
push userjlund@mozilla.com
push dateMon, 18 Jun 2018 21:12:27 +0000
treeherdermozilla-release@c296fde26f5f [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmiko, RyanVM
bugs1464288
milestone61.0
Bug 1464288 - Make sure PreProcessDisplayLists logic for switching AGRs matches what ComputeRebuildRegion uses. r=miko a=RyanVM 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
@@ -27,8 +27,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