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:
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);