Bug 1458258 - Fix compositor invalidatation after resume with e10s r=mattwoodrow
MozReview-Commit-ID: CAZCUXSa9WZ
--- a/gfx/layers/composite/LayerManagerComposite.h
+++ b/gfx/layers/composite/LayerManagerComposite.h
@@ -114,16 +114,17 @@ public:
virtual void BeginTransactionWithDrawTarget(gfx::DrawTarget* aTarget,
const gfx::IntRect& aRect) = 0;
virtual Compositor* GetCompositor() const = 0;
virtual TextureSourceProvider* GetTextureSourceProvider() const = 0;
virtual void EndTransaction(const TimeStamp& aTimeStamp,
EndTransactionFlags aFlags = END_DEFAULT) = 0;
virtual void UpdateRenderBounds(const gfx::IntRect& aRect) {}
virtual void SetDiagnosticTypes(DiagnosticTypes aDiagnostics) {}
+ virtual void InvalidateAll() = 0;
virtual HostLayerManager* AsHostLayerManager() override {
return this;
}
virtual LayerManagerMLGPU* AsLayerManagerMLGPU() {
return nullptr;
}
@@ -401,16 +402,20 @@ public:
}
virtual LayersBackend GetBackendType() override {
return mCompositor ? mCompositor->GetBackendType() : LayersBackend::LAYERS_NONE;
}
virtual void SetDiagnosticTypes(DiagnosticTypes aDiagnostics) override {
mCompositor->SetDiagnosticTypes(aDiagnostics);
}
+ virtual void InvalidateAll() override {
+ AddInvalidRegion(nsIntRegion(mRenderBounds));
+ }
+
void ForcePresent() override { mCompositor->ForcePresent(); }
private:
/** Region we're clipping our current drawing to. */
nsIntRegion mClippingRegion;
gfx::IntRect mRenderBounds;
/** Current root layer. */
--- a/gfx/layers/ipc/CompositorBridgeParent.cpp
+++ b/gfx/layers/ipc/CompositorBridgeParent.cpp
@@ -632,19 +632,18 @@ CompositorBridgeParent::RecvNotifyRegion
mLayerManager->AddInvalidRegion(aRegion);
}
return IPC_OK();
}
void
CompositorBridgeParent::Invalidate()
{
- if (mLayerManager && mLayerManager->GetRoot()) {
- mLayerManager->AddInvalidRegion(
- mLayerManager->GetRoot()->GetLocalVisibleRegion().ToUnknownRegion().GetBounds());
+ if (mLayerManager) {
+ mLayerManager->InvalidateAll();
}
}
mozilla::ipc::IPCResult
CompositorBridgeParent::RecvStartFrameTimeRecording(const int32_t& aBufferSize, uint32_t* aOutStartIndex)
{
if (mLayerManager) {
*aOutStartIndex = mLayerManager->StartFrameTimeRecording(aBufferSize);
--- a/gfx/layers/mlgpu/LayerManagerMLGPU.h
+++ b/gfx/layers/mlgpu/LayerManagerMLGPU.h
@@ -64,16 +64,20 @@ public:
return nullptr;
}
bool IsCompositingToScreen() const override;
TextureSourceProvider* GetTextureSourceProvider() const override;
void ClearCachedResources(Layer* aSubtree = nullptr) override;
void NotifyShadowTreeTransaction() override;
void UpdateRenderBounds(const gfx::IntRect& aRect) override;
+ void InvalidateAll() override {
+ AddInvalidRegion(nsIntRegion(mRenderBounds));
+ }
+
LayerManagerMLGPU* AsLayerManagerMLGPU() override {
return this;
}
const char* Name() const override {
return "";
}
// This should only be called while a FrameBuilder is live.