From 746121ba6706dcc1142929c39aee5e0499c5e559 Mon Sep 17 00:00:00 2001 From: sotaro Date: Mon, 27 May 2024 16:39:17 +0000 Subject: [PATCH] Bug 1899096 - Update FwdTransactionTracker::mFwdTransactionId in ShareableCanvasRenderer::UpdateCompositableClient() even when canvas is not dirty r=gfx-reviewers,lsalzman ShareableCanvasRenderer::UpdateCompositableClient() does not update FwdTransactionTracker::mFwdTransactionId when canvas is not dirty. It caused small emoteTextureTxnId in RecordedTextureData::~RecordedTextureData(). It caused too early remote texture owner removal. And it caused Bug 1898650 comment 2. Differential Revision: https://phabricator.services.mozilla.com/D211713 --- gfx/layers/ShareableCanvasRenderer.cpp | 10 ++++++++++ gfx/layers/ipc/CompositableForwarder.h | 6 +++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/gfx/layers/ShareableCanvasRenderer.cpp b/gfx/layers/ShareableCanvasRenderer.cpp index 39721b8a0db2..e9ac13740815 100644 --- a/gfx/layers/ShareableCanvasRenderer.cpp +++ b/gfx/layers/ShareableCanvasRenderer.cpp @@ -88,6 +88,16 @@ void ShareableCanvasRenderer::UpdateCompositableClient() { } if (!IsDirty()) { + const auto context = mData.GetContext(); + if (!context) { + return; + } + const auto& forwarder = GetForwarder(); + RefPtr tracker = + context->UseCompositableForwarder(forwarder); + if (forwarder && tracker) { + forwarder->TrackFwdTransaction(tracker); + } return; } ResetDirty(); diff --git a/gfx/layers/ipc/CompositableForwarder.h b/gfx/layers/ipc/CompositableForwarder.h index ba4bb41b5db9..64700c4adace 100644 --- a/gfx/layers/ipc/CompositableForwarder.h +++ b/gfx/layers/ipc/CompositableForwarder.h @@ -174,15 +174,15 @@ class CompositableForwarder : public KnowsCompositor { void AssertInForwarderThread() { MOZ_ASSERT(InForwarderThread()); } - protected: - virtual FwdTransactionCounter& GetFwdTransactionCounter() = 0; - void TrackFwdTransaction(const RefPtr& aTracker) { if (aTracker) { aTracker->Use(GetFwdTransactionCounter()); } } + protected: + virtual FwdTransactionCounter& GetFwdTransactionCounter() = 0; + nsTArray> mTexturesToRemove; nsTArray> mCompositableClientsToRemove; };