tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit ec62de7f10822149665b3741b77263acbcf51686
parent 5791b22e6b43e183662eadd5e48e3c2198d234e6
Author: Sotaro Ikeda <sotaro.ikeda.g@gmail.com>
Date:   Sat, 27 Dec 2025 01:09:28 +0000

Bug 2007768 - Clean up Fence handling around AsyncImagePipelineManager r=gfx-reviewers,lsalzman

Differential Revision: https://phabricator.services.mozilla.com/D277544

Diffstat:
Mgfx/layers/composite/TextureHost.h | 8--------
Mgfx/layers/opengl/TextureHostOGL.cpp | 26+++++++++-----------------
Mgfx/layers/opengl/TextureHostOGL.h | 6+-----
Mgfx/layers/wr/AsyncImagePipelineManager.cpp | 21+++++----------------
Mgfx/layers/wr/WebRenderTextureHost.cpp | 12------------
Mgfx/layers/wr/WebRenderTextureHost.h | 6------
6 files changed, 15 insertions(+), 64 deletions(-)

diff --git a/gfx/layers/composite/TextureHost.h b/gfx/layers/composite/TextureHost.h @@ -701,14 +701,6 @@ class TextureHost : public AtomicRefCountedWithFinalize<TextureHost> { virtual bool NeedsYFlip() const; - virtual void SetAcquireFence(UniqueFileHandle&& aFenceFd) {} - - virtual void SetReleaseFence(UniqueFileHandle&& aFenceFd) {} - - virtual UniqueFileHandle GetAndResetReleaseFence() { - return UniqueFileHandle(); - } - virtual AndroidHardwareBuffer* GetAndroidHardwareBuffer() const { return nullptr; } diff --git a/gfx/layers/opengl/TextureHostOGL.cpp b/gfx/layers/opengl/TextureHostOGL.cpp @@ -818,27 +818,19 @@ void AndroidHardwareBufferTextureHost::DeallocateDeviceData() { mAndroidHardwareBuffer = nullptr; } -void AndroidHardwareBufferTextureHost::SetAcquireFence( - UniqueFileHandle&& aFenceFd) { - if (!mAndroidHardwareBuffer) { - return; - } - mAndroidHardwareBuffer->SetAcquireFence(std::move(aFenceFd)); -} +void AndroidHardwareBufferTextureHost::SetReadFence(Fence* aReadFence) { + MOZ_ASSERT(aReadFence); + MOZ_ASSERT(mReadFence->AsFenceFileHandle()); + MOZ_ASSERT(mAndroidHardwareBuffer); -void AndroidHardwareBufferTextureHost::SetReleaseFence( - UniqueFileHandle&& aFenceFd) { - if (!mAndroidHardwareBuffer) { + if (!aReadFence || !mReadFence->AsFenceFileHandle() || + !mAndroidHardwareBuffer) { return; } - mAndroidHardwareBuffer->SetReleaseFence(std::move(aFenceFd)); -} -UniqueFileHandle AndroidHardwareBufferTextureHost::GetAndResetReleaseFence() { - if (!mAndroidHardwareBuffer) { - return UniqueFileHandle(); - } - return mAndroidHardwareBuffer->GetAndResetReleaseFence(); + UniqueFileHandle handle = + aReadFence->AsFenceFileHandle()->DuplicateFileHandle(); + mAndroidHardwareBuffer->SetReleaseFence(std::move(handle)); } void AndroidHardwareBufferTextureHost::CreateRenderTexture( diff --git a/gfx/layers/opengl/TextureHostOGL.h b/gfx/layers/opengl/TextureHostOGL.h @@ -540,11 +540,7 @@ class AndroidHardwareBufferTextureHost : public TextureHost { const Range<wr::ImageKey>& aImageKeys, PushDisplayItemFlagSet aFlags) override; - void SetAcquireFence(UniqueFileHandle&& aFenceFd) override; - - void SetReleaseFence(UniqueFileHandle&& aFenceFd) override; - - UniqueFileHandle GetAndResetReleaseFence() override; + void SetReadFence(Fence* aReadFence) override; AndroidHardwareBuffer* GetAndroidHardwareBuffer() const override { return mAndroidHardwareBuffer; diff --git a/gfx/layers/wr/AsyncImagePipelineManager.cpp b/gfx/layers/wr/AsyncImagePipelineManager.cpp @@ -24,15 +24,6 @@ #include "mozilla/webrender/WebRenderAPI.h" #include "mozilla/webrender/WebRenderTypes.h" -#ifdef MOZ_WIDGET_ANDROID -# include "mozilla/layers/TextureHostOGL.h" -#endif - -#ifdef XP_WIN -# include "mozilla/layers/FenceD3D11.h" -# include "mozilla/layers/TextureD3D11.h" -#endif - namespace mozilla { namespace layers { @@ -734,21 +725,19 @@ void AsyncImagePipelineManager::ProcessPipelineRendered( holder->mTextureHostsUntilRenderSubmitted.begin(), holder->mTextureHostsUntilRenderSubmitted.end(), [&aEpoch](const auto& entry) { return aEpoch <= entry.mEpoch; }); -#ifdef MOZ_WIDGET_ANDROID - // Set release fence if TextureHost owns AndroidHardwareBuffer. + + // Set read fence if TextureHost owns AndroidHardwareBuffer. // The TextureHost handled by mTextureHostsUntilRenderSubmitted instead of // mTextureHostsUntilRenderCompleted, since android fence could be used // to wait until its end of usage by GPU. for (auto it = holder->mTextureHostsUntilRenderSubmitted.begin(); it != firstSubmittedHostToKeep; ++it) { const auto& entry = it; - if (entry->mTexture->GetAndroidHardwareBuffer() && mReadFence && - mReadFence->AsFenceFileHandle()) { - entry->mTexture->SetReleaseFence( - mReadFence->AsFenceFileHandle()->DuplicateFileHandle()); + if (entry->mTexture->GetAndroidHardwareBuffer() && mReadFence) { + entry->mTexture->SetReadFence(mReadFence); } } -#endif + holder->mTextureHostsUntilRenderSubmitted.erase( holder->mTextureHostsUntilRenderSubmitted.begin(), firstSubmittedHostToKeep); diff --git a/gfx/layers/wr/WebRenderTextureHost.cpp b/gfx/layers/wr/WebRenderTextureHost.cpp @@ -200,18 +200,6 @@ bool WebRenderTextureHost::SupportsExternalCompositing( return mWrappedTextureHost->SupportsExternalCompositing(aBackend); } -void WebRenderTextureHost::SetAcquireFence(UniqueFileHandle&& aFenceFd) { - mWrappedTextureHost->SetAcquireFence(std::move(aFenceFd)); -} - -void WebRenderTextureHost::SetReleaseFence(UniqueFileHandle&& aFenceFd) { - mWrappedTextureHost->SetReleaseFence(std::move(aFenceFd)); -} - -UniqueFileHandle WebRenderTextureHost::GetAndResetReleaseFence() { - return mWrappedTextureHost->GetAndResetReleaseFence(); -} - void WebRenderTextureHost::SetReadFence(Fence* aReadFence) { return mWrappedTextureHost->SetReadFence(aReadFence); } diff --git a/gfx/layers/wr/WebRenderTextureHost.h b/gfx/layers/wr/WebRenderTextureHost.h @@ -103,14 +103,8 @@ class WebRenderTextureHost final : public TextureHost { bool SupportsExternalCompositing(WebRenderBackend aBackend) override; - void SetAcquireFence(UniqueFileHandle&& aFenceFd) override; - - void SetReleaseFence(UniqueFileHandle&& aFenceFd) override; - void SetReadFence(Fence* aReadFence) override; - UniqueFileHandle GetAndResetReleaseFence() override; - AndroidHardwareBuffer* GetAndroidHardwareBuffer() const override; void MaybeNotifyForUse(wr::TransactionBuilder& aTxn);