Bug 1411813 - Don't fallback nsDisplayFilter if opacity is present. r=kats draft
authorMorris Tseng <mtseng@mozilla.com>
Thu, 26 Oct 2017 11:39:00 +0800
changeset 687238 ea9153aa1d31cd03201b2cce861bd53316677404
parent 687186 aa958b29c149a67fce772f8473e9586e71fbdb46
child 737608 fe25431eb2ace1365df6ee393c776f40463d9bde
push id86448
push userbmo:mtseng@mozilla.com
push dateFri, 27 Oct 2017 00:59:10 +0000
reviewerskats
bugs1411813
milestone58.0a1
Bug 1411813 - Don't fallback nsDisplayFilter if opacity is present. r=kats MozReview-Commit-ID: 4I8W5JZ2fyx
layout/painting/nsDisplayList.cpp
--- a/layout/painting/nsDisplayList.cpp
+++ b/layout/painting/nsDisplayList.cpp
@@ -9613,17 +9613,17 @@ ClampStdDeviation(float aStdDeviation)
 
 bool
 nsDisplayFilter::CreateWebRenderCommands(mozilla::wr::DisplayListBuilder& aBuilder,
                                          mozilla::wr::IpcResourceUpdateQueue& aResources,
                                          const StackingContextHelper& aSc,
                                          mozilla::layers::WebRenderLayerManager* aManager,
                                          nsDisplayListBuilder* aDisplayListBuilder)
 {
-  if (mFrame->IsFrameOfType(nsIFrame::eSVG) || mFrame->StyleEffects()->mOpacity != 1.0f) {
+  if (mFrame->IsFrameOfType(nsIFrame::eSVG)) {
     return false;
   }
 
   // Due to differences in the way that WebRender filters operate
   // only the brightness and contrast filters use that path. We
   // can gradually enable more filters as WebRender bugs are fixed.
   nsTArray<mozilla::wr::WrFilterOp> wrFilters;
   const nsTArray<nsStyleFilter>& filters = mFrame->StyleEffects()->mFilters;
@@ -9653,17 +9653,18 @@ nsDisplayFilter::CreateWebRenderCommands
         wrFilters.AppendElement(filterOp);
         break;
       }
       default:
         return false;
     }
   }
 
-  StackingContextHelper sc(aSc, aBuilder, wrFilters);
+  float opacity = mFrame->StyleEffects()->mOpacity;
+  StackingContextHelper sc(aSc, aBuilder, wrFilters, nullptr, 0, opacity != 1.0f && mHandleOpacity ? &opacity : nullptr);
 
   nsDisplaySVGEffects::CreateWebRenderCommands(aBuilder, aResources, sc, aManager, aDisplayListBuilder);
   return true;
 }
 
 #ifdef MOZ_DUMP_PAINTING
 void
 nsDisplayFilter::PrintEffects(nsACString& aTo)