WebKit Bugzilla
Attachment 370102 Details for
Bug 197975
: REGRESSION (r245170): gmail.com header flickers when hovering over the animating buttons
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-197975-20190516215228.patch (text/plain), 8.14 KB, created by
Simon Fraser (smfr)
on 2019-05-16 21:52:29 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Simon Fraser (smfr)
Created:
2019-05-16 21:52:29 PDT
Size:
8.14 KB
patch
obsolete
>Subversion Revision: 245375 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 3804d09e151934d569cf080116623570870763ba..ee555b918cd1c4a714bc36d2c3466f9036b9f600 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,21 @@ >+2019-05-16 Simon Fraser <simon.fraser@apple.com> >+ >+ 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 NOBODY (OOPS!). >+ >+ 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-15 Simon Fraser <simon.fraser@apple.com> > > Avoid a recursive descendants layer walk sometimes >diff --git a/Source/WebCore/rendering/RenderLayerCompositor.cpp b/Source/WebCore/rendering/RenderLayerCompositor.cpp >index b5b8046423b9eaf8051476fb69bfb427cc32727d..b88f8b93ffff3fa397059b58ed375480d264563c 100644 >--- a/Source/WebCore/rendering/RenderLayerCompositor.cpp >+++ b/Source/WebCore/rendering/RenderLayerCompositor.cpp >@@ -924,11 +924,16 @@ void RenderLayerCompositor::computeCompositingRequirements(RenderLayer* ancestor > 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) { >+ LOG_WITH_STREAM(CompositingOverlap, stream << "layer " << &layer << " converted from shared painting to compositing"); >+ layerPaintsIntoProvidedBacking = false; >+ } else { >+ overlapMap.pushCompositingContainer(); >+ LOG_WITH_STREAM(CompositingOverlap, stream << "layer " << &layer << " will composite, pushed container " << overlapMap); >+ } > > willBeComposited = true; >- layerPaintsIntoProvidedBacking = false; > }; > > auto layerWillCompositePostDescendants = [&] { >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index ab3bd9dff0367a73064510faf0b2e7410da2ed31..caac60a2e03d704ad10082ff30fc2b8ae0cd303c 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,14 @@ >+2019-05-16 Simon Fraser <simon.fraser@apple.com> >+ >+ 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 NOBODY (OOPS!). >+ >+ * compositing/shared-backing/overlap-after-shared-to-composited-expected.html: Added. >+ * compositing/shared-backing/overlap-after-shared-to-composited.html: Added. >+ > 2019-05-15 Devin Rousso <drousso@apple.com> > > Web Inspector: user gesture toggle should also force user interaction flag >diff --git a/LayoutTests/compositing/shared-backing/overlap-after-shared-to-composited-expected.html b/LayoutTests/compositing/shared-backing/overlap-after-shared-to-composited-expected.html >new file mode 100644 >index 0000000000000000000000000000000000000000..1415d4e1436e2398d96eb73d0a3ddb9fddbde7df >--- /dev/null >+++ b/LayoutTests/compositing/shared-backing/overlap-after-shared-to-composited-expected.html >@@ -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> >diff --git a/LayoutTests/compositing/shared-backing/overlap-after-shared-to-composited.html b/LayoutTests/compositing/shared-backing/overlap-after-shared-to-composited.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8e99d63b570eecb66cac7cbef4e92f6feb0f57d3 >--- /dev/null >+++ b/LayoutTests/compositing/shared-backing/overlap-after-shared-to-composited.html >@@ -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>
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 197975
:
370101
|
370102
|
370103
|
370104
|
370105
|
370106
|
370122