Title: [245471] trunk
- Revision
- 245471
- Author
- [email protected]
- Date
- 2019-05-17 11:28:34 -0700 (Fri, 17 May 2019)
Log Message
REGRESSION (r245170): gmail.com header flickers when hovering over the animating buttons
https://bugs.webkit.org/show_bug.cgi?id=197975
<rdar://problem/50865946>
Reviewed by Antti Koivisto.
Source/WebCore:
When computeCompositingRequirements() determined that a layer could paint into shared backing, it
pushed an overlap container. If that layer then converted to normal composting, we'd push a second
overlap container, which left the overlap map in a bad state for the rest of the compositing
traversal, causing layers to not get composited when necessary.
Test: compositing/shared-backing/overlap-after-shared-to-composited.html
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::computeCompositingRequirements):
LayoutTests:
* compositing/shared-backing/overlap-after-shared-to-composited-expected.html: Added.
* compositing/shared-backing/overlap-after-shared-to-composited.html: Added.
Modified Paths
Added Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (245470 => 245471)
--- trunk/LayoutTests/ChangeLog 2019-05-17 17:30:22 UTC (rev 245470)
+++ trunk/LayoutTests/ChangeLog 2019-05-17 18:28:34 UTC (rev 245471)
@@ -1,3 +1,14 @@
+2019-05-17 Simon Fraser <[email protected]>
+
+ REGRESSION (r245170): gmail.com header flickers when hovering over the animating buttons
+ https://bugs.webkit.org/show_bug.cgi?id=197975
+ <rdar://problem/50865946>
+
+ Reviewed by Antti Koivisto.
+
+ * compositing/shared-backing/overlap-after-shared-to-composited-expected.html: Added.
+ * compositing/shared-backing/overlap-after-shared-to-composited.html: Added.
+
2019-05-16 Said Abou-Hallawa <[email protected]>
SVGElement should detach itself from all its properties before it is deleted
Added: trunk/LayoutTests/compositing/shared-backing/overlap-after-shared-to-composited-expected.html (0 => 245471)
--- trunk/LayoutTests/compositing/shared-backing/overlap-after-shared-to-composited-expected.html (rev 0)
+++ trunk/LayoutTests/compositing/shared-backing/overlap-after-shared-to-composited-expected.html 2019-05-17 18:28:34 UTC (rev 245471)
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Tests that overlap testing continues to work after a layer converts from shared to composited</title>
+ <style>
+ .trigger {
+ position: absolute;
+ transform: translateZ(0);
+ background-color: silver;
+ width: 20px;
+ height: 400px;
+ }
+
+ .provider {
+ position: absolute;
+ left: 20px;
+ top: 20px;
+ width: 400px;
+ height: 100px;
+ background-color: gray;
+ }
+
+ .box {
+ width: 100px;
+ height: 100px;
+ background-color: gray;
+ }
+
+ .absolute {
+ position: absolute;
+ top: 200px;
+ left: 0px;
+ background-color: lightblue;
+ }
+
+ .overlapper {
+ position: absolute;
+ top: 70px;
+ left: 150px;
+ width: 200px;
+ height: 100px;
+ padding: 10px;
+ background-color: green;
+ }
+
+ .stacking {
+ position: relative;
+ z-index: 0;
+ padding: 10px;
+ height: 120px;
+ border: 1px solid black;
+ transform: translateZ(0);
+ }
+
+ .negative {
+ position: relative;
+ z-index: -1;
+ background-color: orange;
+ transform: translateZ(0);
+ }
+ </style>
+</head>
+<body>
+ <div class="trigger"></div>
+ <div class="provider">
+ <div class="absolute box"></div>
+ <div class="stacking box">
+ <div class="negative box"></div>
+ </div>
+ </div>
+ <div class="overlapper"></div>
+</body>
+</html>
Added: trunk/LayoutTests/compositing/shared-backing/overlap-after-shared-to-composited.html (0 => 245471)
--- trunk/LayoutTests/compositing/shared-backing/overlap-after-shared-to-composited.html (rev 0)
+++ trunk/LayoutTests/compositing/shared-backing/overlap-after-shared-to-composited.html 2019-05-17 18:28:34 UTC (rev 245471)
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>Tests that overlap testing continues to work after a layer converts from shared to composited</title>
+ <style>
+ .trigger {
+ position: absolute;
+ transform: translateZ(0);
+ background-color: silver;
+ width: 20px;
+ height: 400px;
+ }
+
+ .provider {
+ position: absolute;
+ left: 20px;
+ top: 20px;
+ width: 400px;
+ height: 100px;
+ background-color: gray;
+ }
+
+ .box {
+ width: 100px;
+ height: 100px;
+ background-color: gray;
+ }
+
+ .absolute {
+ position: absolute;
+ top: 200px;
+ left: 0px;
+ background-color: lightblue;
+ }
+
+ .overlapper {
+ position: absolute;
+ top: 70px;
+ left: 150px;
+ width: 200px;
+ height: 100px;
+ padding: 10px;
+ background-color: green;
+ }
+
+ .stacking {
+ position: relative;
+ z-index: 0;
+ padding: 10px;
+ height: 120px;
+ border: 1px solid black;
+ }
+
+ .negative {
+ position: relative;
+ z-index: -1;
+ background-color: orange;
+ }
+
+ .negative.changed {
+ transform: translateZ(0);
+ }
+
+ </style>
+ <script>
+ if (window.testRunner)
+ testRunner.waitUntilDone();
+
+ window.addEventListener('load', () => {
+ setTimeout(() => {
+ document.querySelector('.negative').classList.add('changed');
+ if (window.testRunner)
+ testRunner.notifyDone();
+ }, 0);
+ }, false);
+ </script>
+</head>
+<body>
+ <div class="trigger"></div>
+ <div class="provider">
+ <div class="absolute box"></div>
+ <div class="stacking box">
+ <div class="negative box"></div>
+ </div>
+ </div>
+ <div class="overlapper"></div>
+</body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (245470 => 245471)
--- trunk/Source/WebCore/ChangeLog 2019-05-17 17:30:22 UTC (rev 245470)
+++ trunk/Source/WebCore/ChangeLog 2019-05-17 18:28:34 UTC (rev 245471)
@@ -1,3 +1,21 @@
+2019-05-17 Simon Fraser <[email protected]>
+
+ REGRESSION (r245170): gmail.com header flickers when hovering over the animating buttons
+ https://bugs.webkit.org/show_bug.cgi?id=197975
+ <rdar://problem/50865946>
+
+ Reviewed by Antti Koivisto.
+
+ When computeCompositingRequirements() determined that a layer could paint into shared backing, it
+ pushed an overlap container. If that layer then converted to normal composting, we'd push a second
+ overlap container, which left the overlap map in a bad state for the rest of the compositing
+ traversal, causing layers to not get composited when necessary.
+
+ Test: compositing/shared-backing/overlap-after-shared-to-composited.html
+
+ * rendering/RenderLayerCompositor.cpp:
+ (WebCore::RenderLayerCompositor::computeCompositingRequirements):
+
2019-05-17 Commit Queue <[email protected]>
Unreviewed, rolling out r245401.
Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (245470 => 245471)
--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2019-05-17 17:30:22 UTC (rev 245470)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2019-05-17 18:28:34 UTC (rev 245471)
@@ -910,8 +910,10 @@
layer.setIndirectCompositingReason(compositingReason);
// Check if the computed indirect reason will force the layer to become composited.
- if (!willBeComposited && layer.mustCompositeForIndirectReasons() && canBeComposited(layer))
+ if (!willBeComposited && layer.mustCompositeForIndirectReasons() && canBeComposited(layer)) {
willBeComposited = true;
+ layerPaintsIntoProvidedBacking = false;
+ }
// The children of this layer don't need to composite, unless there is
// a compositing layer among them, so start by inheriting the compositing
@@ -924,8 +926,11 @@
currentState.testingOverlap = true;
// This layer now acts as the ancestor for kids.
currentState.compositingAncestor = &layer;
- overlapMap.pushCompositingContainer();
- LOG_WITH_STREAM(CompositingOverlap, stream << "layer " << &layer << " will composite, pushed container " << overlapMap);
+
+ if (!layerPaintsIntoProvidedBacking) {
+ overlapMap.pushCompositingContainer();
+ LOG_WITH_STREAM(CompositingOverlap, stream << "layer " << &layer << " will composite, pushed container " << overlapMap);
+ }
willBeComposited = true;
layerPaintsIntoProvidedBacking = false;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes