Bug 1384387 - Clear frame's invalidation state bits in layers-free mode. r=kats draft
authorEthan Lin <ethlin@mozilla.com>
Wed, 26 Jul 2017 12:05:24 +0800
changeset 616434 e4cade3b333dc06badddaca9a9d60d8f89e5971b
parent 615492 9eddb0a92820c6445f9d1e680e4c239e888e93f0
child 639472 0f2794dbed257485a8e53878130c0981b4e1fae6
push id70684
push userbmo:ethlin@mozilla.com
push dateThu, 27 Jul 2017 02:03:22 +0000
reviewerskats
bugs1384387
milestone56.0a1
Bug 1384387 - Clear frame's invalidation state bits in layers-free mode. r=kats MozReview-Commit-ID: DRv5IcRQVs0
layout/painting/nsDisplayList.cpp
--- a/layout/painting/nsDisplayList.cpp
+++ b/layout/painting/nsDisplayList.cpp
@@ -2102,16 +2102,27 @@ already_AddRefed<LayerManager> nsDisplay
           return nullptr;
         }
       }
     }
 
     MaybeSetupTransactionIdAllocator(layerManager, presContext);
     bool temp = aBuilder->SetIsCompositingCheap(layerManager->IsCompositingCheap());
     static_cast<WebRenderLayerManager*>(layerManager.get())->EndTransactionWithoutLayer(this, aBuilder);
+
+    // For layers-free mode, we check the invalidation state bits in the EndTransaction.
+    // So we clear the invalidation state bits after EndTransaction.
+    if (widgetTransaction ||
+        // SVG-as-an-image docs don't paint as part of the retained layer tree,
+        // but they still need the invalidation state bits cleared in order for
+        // invalidation for CSS/SMIL animation to work properly.
+        (document && document->IsBeingUsedAsImage())) {
+      frame->ClearInvalidationStateBits();
+    }
+
     aBuilder->SetIsCompositingCheap(temp);
     return layerManager.forget();
   }
 
   NotifySubDocInvalidationFunc computeInvalidFunc =
     presContext->MayHavePaintEventListenerInSubDocument() ? nsPresContext::NotifySubDocInvalidation : 0;
 
   UniquePtr<LayerProperties> props;