From 537b99244797175981a0bf91f5f64bfd9119fd79 Mon Sep 17 00:00:00 2001
From: Chris Lord <chrislord.net@gmail.com>
Date: Mon, 31 Mar 2014 17:42:32 +0100
Subject: [PATCH] Bug 988370 - Don't use progressive/low precision rendering on
 fixed layers. r=mattwoodrow

Fixed layers don't async scroll, so it doesn't make sense for them to have
a low precision region or for them to be rendered progressively.
---
 gfx/layers/client/ClientTiledThebesLayer.cpp | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/gfx/layers/client/ClientTiledThebesLayer.cpp b/gfx/layers/client/ClientTiledThebesLayer.cpp
index d46dc0be1432a..2c0fddadfc106 100644
--- a/gfx/layers/client/ClientTiledThebesLayer.cpp
+++ b/gfx/layers/client/ClientTiledThebesLayer.cpp
@@ -216,13 +216,17 @@ ClientTiledThebesLayer::RenderLayer()
     ToClientLayer(GetMaskLayer())->RenderLayer();
   }
 
+  bool isFixed = GetIsFixedPosition() || GetParent()->GetIsFixedPosition();
+
   // Fast path for no progressive updates, no low-precision updates and no
-  // critical display-port set, or no display-port set.
+  // critical display-port set, or no display-port set, or this is a fixed
+  // position layer/contained in a fixed position layer
   const FrameMetrics& parentMetrics = GetParent()->GetFrameMetrics();
   if ((!gfxPrefs::UseProgressiveTilePainting() &&
        !gfxPrefs::UseLowPrecisionBuffer() &&
        parentMetrics.mCriticalDisplayPort.IsEmpty()) ||
-       parentMetrics.mDisplayPort.IsEmpty()) {
+       parentMetrics.mDisplayPort.IsEmpty() ||
+       isFixed) {
     mValidRegion = mVisibleRegion;
 
     NS_ASSERTION(!ClientManager()->IsRepeatTransaction(), "Didn't paint our mask layer");
-- 
GitLab