Bug 1739553 - Use wr::ExternalImageId in more places r=gfx-reviewers,bradwerth

It could make code more explicit.

Differential Revision: https://phabricator.services.mozilla.com/D130434
This commit is contained in:
sotaro 2021-11-07 07:26:45 +00:00
Родитель dac9173b80
Коммит e13c31b137
10 изменённых файлов: 57 добавлений и 42 удалений

Просмотреть файл

@ -71,8 +71,8 @@ TextureHost* GPUVideoTextureHost::EnsureWrappedTextureHost() {
RefPtr<wr::RenderTextureHost> texture =
new wr::RenderTextureHostWrapper(wrappedId);
wr::RenderThread::Get()->RegisterExternalImage(
wr::AsUint64(mExternalImageId.ref()), texture.forget());
wr::RenderThread::Get()->RegisterExternalImage(mExternalImageId.ref(),
texture.forget());
}
if (mPendingSourceProvider) {
@ -220,8 +220,8 @@ void GPUVideoTextureHost::CreateRenderTexture(
RefPtr<wr::RenderTextureHost> texture =
new wr::RenderTextureHostWrapper(wrappedId);
wr::RenderThread::Get()->RegisterExternalImage(
wr::AsUint64(mExternalImageId.ref()), texture.forget());
wr::RenderThread::Get()->RegisterExternalImage(mExternalImageId.ref(),
texture.forget());
return;
}

Просмотреть файл

@ -433,8 +433,7 @@ void TextureHost::MaybeDestroyRenderTexture() {
void TextureHost::DestroyRenderTexture(
const wr::ExternalImageId& aExternalImageId) {
wr::RenderThread::Get()->UnregisterExternalImage(
wr::AsUint64(aExternalImageId));
wr::RenderThread::Get()->UnregisterExternalImage(aExternalImageId);
}
void TextureHost::EnsureRenderTexture(
@ -598,7 +597,7 @@ void BufferTextureHost::CreateRenderTexture(
new wr::RenderBufferTextureHost(GetBuffer(), GetBufferDescriptor());
}
wr::RenderThread::Get()->RegisterExternalImage(wr::AsUint64(aExternalImageId),
wr::RenderThread::Get()->RegisterExternalImage(aExternalImageId,
texture.forget());
}

Просмотреть файл

@ -998,7 +998,7 @@ void DXGITextureHostD3D11::CreateRenderTexture(
RefPtr<wr::RenderTextureHost> texture = new wr::RenderDXGITextureHost(
mHandle, mFormat, mYUVColorSpace, mColorRange, mSize);
wr::RenderThread::Get()->RegisterExternalImage(wr::AsUint64(aExternalImageId),
wr::RenderThread::Get()->RegisterExternalImage(aExternalImageId,
texture.forget());
}
@ -1299,7 +1299,7 @@ void DXGIYCbCrTextureHostD3D11::CreateRenderTexture(
RefPtr<wr::RenderTextureHost> texture = new wr::RenderDXGIYCbCrTextureHost(
mHandles, mYUVColorSpace, mColorDepth, mColorRange, mSizeY, mSizeCbCr);
wr::RenderThread::Get()->RegisterExternalImage(wr::AsUint64(aExternalImageId),
wr::RenderThread::Get()->RegisterExternalImage(aExternalImageId,
texture.forget());
}

Просмотреть файл

@ -74,7 +74,8 @@ void SharedSurfacesParent::ShutdownRenderThread() {
// There may be lingering consumers of the surfaces that didn't get shutdown
// yet but since we are here, we know the render thread is finished and we
// can unregister everything.
wr::RenderThread::Get()->UnregisterExternalImageDuringShutdown(key);
wr::RenderThread::Get()->UnregisterExternalImageDuringShutdown(
wr::ToExternalImageId(key));
}
}
@ -138,7 +139,7 @@ bool SharedSurfacesParent::Release(const wr::ExternalImageId& aId,
if (surface->RemoveConsumer(aForCreator)) {
RemoveTrackingLocked(surface, lock);
wr::RenderThread::Get()->UnregisterExternalImage(id);
wr::RenderThread::Get()->UnregisterExternalImage(wr::ToExternalImageId(id));
sInstance->mSurfaces.Remove(id);
}
@ -169,7 +170,7 @@ void SharedSurfacesParent::AddSameProcess(const wr::ExternalImageId& aId,
MOZ_ASSERT(!sInstance->mSurfaces.Contains(id));
auto texture = MakeRefPtr<wr::RenderSharedSurfaceTextureHost>(surface);
wr::RenderThread::Get()->RegisterExternalImage(id, texture.forget());
wr::RenderThread::Get()->RegisterExternalImage(aId, texture.forget());
surface->AddConsumer();
sInstance->mSurfaces.InsertOrUpdate(id, std::move(surface));
@ -189,7 +190,8 @@ void SharedSurfacesParent::DestroyProcess(base::ProcessId aPid) {
if (surface->GetCreatorPid() == aPid && surface->HasCreatorRef() &&
surface->RemoveConsumer(/* aForCreator */ true)) {
RemoveTrackingLocked(surface, lock);
wr::RenderThread::Get()->UnregisterExternalImage(i.Key());
wr::RenderThread::Get()->UnregisterExternalImage(
wr::ToExternalImageId(i.Key()));
i.Remove();
}
}
@ -225,7 +227,7 @@ void SharedSurfacesParent::Add(const wr::ExternalImageId& aId,
MOZ_ASSERT(!sInstance->mSurfaces.Contains(id));
auto texture = MakeRefPtr<wr::RenderSharedSurfaceTextureHost>(surface);
wr::RenderThread::Get()->RegisterExternalImage(id, texture.forget());
wr::RenderThread::Get()->RegisterExternalImage(aId, texture.forget());
surface->AddConsumer();
sInstance->mSurfaces.InsertOrUpdate(id, std::move(surface));

Просмотреть файл

@ -129,7 +129,7 @@ void DMABUFTextureHostOGL::CreateRenderTexture(
}
RefPtr<wr::RenderTextureHost> texture =
new wr::RenderDMABUFTextureHost(mSurface);
wr::RenderThread::Get()->RegisterExternalImage(wr::AsUint64(aExternalImageId),
wr::RenderThread::Get()->RegisterExternalImage(aExternalImageId,
texture.forget());
}

Просмотреть файл

@ -137,7 +137,7 @@ void MacIOSurfaceTextureHostOGL::CreateRenderTexture(
RefPtr<wr::RenderTextureHost> texture =
new wr::RenderMacIOSurfaceTextureHost(GetMacIOSurface());
wr::RenderThread::Get()->RegisterExternalImage(wr::AsUint64(aExternalImageId),
wr::RenderThread::Get()->RegisterExternalImage(aExternalImageId,
texture.forget());
}

Просмотреть файл

@ -665,7 +665,7 @@ void SurfaceTextureHost::CreateRenderTexture(
RefPtr<wr::RenderTextureHost> texture =
new wr::RenderAndroidSurfaceTextureHost(mSurfTex, mSize, mFormat,
mContinuousUpdate);
wr::RenderThread::Get()->RegisterExternalImage(wr::AsUint64(aExternalImageId),
wr::RenderThread::Get()->RegisterExternalImage(aExternalImageId,
texture.forget());
}
@ -978,7 +978,7 @@ void AndroidHardwareBufferTextureHost::CreateRenderTexture(
const wr::ExternalImageId& aExternalImageId) {
RefPtr<wr::RenderTextureHost> texture =
new wr::RenderAndroidHardwareBufferTextureHost(mAndroidHardwareBuffer);
wr::RenderThread::Get()->RegisterExternalImage(wr::AsUint64(aExternalImageId),
wr::RenderThread::Get()->RegisterExternalImage(aExternalImageId,
texture.forget());
}
@ -1194,7 +1194,7 @@ void EGLImageTextureHost::CreateRenderTexture(
const wr::ExternalImageId& aExternalImageId) {
RefPtr<wr::RenderTextureHost> texture =
new wr::RenderEGLImageTextureHost(mImage, mSync, mSize);
wr::RenderThread::Get()->RegisterExternalImage(wr::AsUint64(aExternalImageId),
wr::RenderThread::Get()->RegisterExternalImage(aExternalImageId,
texture.forget());
}

Просмотреть файл

@ -145,7 +145,7 @@ gfx::SurfaceFormat WebRenderTextureHost::GetFormat() const {
void WebRenderTextureHost::NotifyNotUsed() {
#ifdef MOZ_WIDGET_ANDROID
if (mWrappedTextureHost->AsSurfaceTextureHost()) {
wr::RenderThread::Get()->NotifyNotUsed(wr::AsUint64(GetExternalImageKey()));
wr::RenderThread::Get()->NotifyNotUsed(GetExternalImageKey());
}
#endif
TextureHost::NotifyNotUsed();
@ -154,7 +154,7 @@ void WebRenderTextureHost::NotifyNotUsed() {
void WebRenderTextureHost::MaybeNotifyForUse(wr::TransactionBuilder& aTxn) {
#if defined(MOZ_WIDGET_ANDROID)
if (mWrappedTextureHost->AsSurfaceTextureHost()) {
wr::RenderThread::Get()->NotifyForUse(wr::AsUint64(GetExternalImageKey()));
wr::RenderThread::Get()->NotifyForUse(GetExternalImageKey());
aTxn.Notify(wr::Checkpoint::FrameTexturesUpdated,
MakeUnique<ScheduleHandleRenderTextureOps>());
}
@ -166,7 +166,7 @@ void WebRenderTextureHost::PrepareForUse() {
mWrappedTextureHost->AsBufferTextureHost()) {
// Call PrepareForUse on render thread.
// See RenderAndroidSurfaceTextureHostOGL::PrepareForUse.
wr::RenderThread::Get()->PrepareForUse(wr::AsUint64(GetExternalImageKey()));
wr::RenderThread::Get()->PrepareForUse(GetExternalImageKey());
}
}

Просмотреть файл

@ -654,7 +654,8 @@ void RenderThread::DecPendingFrameBuildCount(wr::WindowId aWindowId) {
}
void RenderThread::RegisterExternalImage(
uint64_t aExternalImageId, already_AddRefed<RenderTextureHost> aTexture) {
const wr::ExternalImageId& aExternalImageId,
already_AddRefed<RenderTextureHost> aTexture) {
MutexAutoLock lock(mRenderTextureMapLock);
if (mHasShutdown) {
@ -668,7 +669,8 @@ void RenderThread::RegisterExternalImage(
mRenderTextures.emplace(aExternalImageId, texture);
}
void RenderThread::UnregisterExternalImage(uint64_t aExternalImageId) {
void RenderThread::UnregisterExternalImage(
const wr::ExternalImageId& aExternalImageId) {
MutexAutoLock lock(mRenderTextureMapLock);
if (mHasShutdown) {
return;
@ -703,20 +705,20 @@ void RenderThread::UnregisterExternalImage(uint64_t aExternalImageId) {
}
}
void RenderThread::PrepareForUse(uint64_t aExternalImageId) {
void RenderThread::PrepareForUse(const wr::ExternalImageId& aExternalImageId) {
AddRenderTextureOp(RenderTextureOp::PrepareForUse, aExternalImageId);
}
void RenderThread::NotifyNotUsed(uint64_t aExternalImageId) {
void RenderThread::NotifyNotUsed(const wr::ExternalImageId& aExternalImageId) {
AddRenderTextureOp(RenderTextureOp::NotifyNotUsed, aExternalImageId);
}
void RenderThread::NotifyForUse(uint64_t aExternalImageId) {
void RenderThread::NotifyForUse(const wr::ExternalImageId& aExternalImageId) {
AddRenderTextureOp(RenderTextureOp::NotifyForUse, aExternalImageId);
}
void RenderThread::AddRenderTextureOp(RenderTextureOp aOp,
uint64_t aExternalImageId) {
void RenderThread::AddRenderTextureOp(
RenderTextureOp aOp, const wr::ExternalImageId& aExternalImageId) {
MOZ_ASSERT(!IsInRenderThread());
MutexAutoLock lock(mRenderTextureMapLock);
@ -759,7 +761,7 @@ void RenderThread::HandleRenderTextureOps() {
}
void RenderThread::UnregisterExternalImageDuringShutdown(
uint64_t aExternalImageId) {
const wr::ExternalImageId& aExternalImageId) {
MOZ_ASSERT(IsInRenderThread());
MutexAutoLock lock(mRenderTextureMapLock);
MOZ_ASSERT(mHasShutdown);
@ -779,11 +781,11 @@ void RenderThread::DeferredRenderTextureHostDestroy() {
}
RenderTextureHost* RenderThread::GetRenderTexture(
wr::ExternalImageId aExternalImageId) {
const wr::ExternalImageId& aExternalImageId) {
MOZ_ASSERT(IsInRenderThread());
MutexAutoLock lock(mRenderTextureMapLock);
auto it = mRenderTextures.find(AsUint64(aExternalImageId));
auto it = mRenderTextures.find(aExternalImageId);
MOZ_ASSERT(it != mRenderTextures.end());
if (it == mRenderTextures.end()) {
return nullptr;

Просмотреть файл

@ -196,28 +196,30 @@ class RenderThread final {
bool Resume(wr::WindowId aWindowId);
/// Can be called from any thread.
void RegisterExternalImage(uint64_t aExternalImageId,
void RegisterExternalImage(const wr::ExternalImageId& aExternalImageId,
already_AddRefed<RenderTextureHost> aTexture);
/// Can be called from any thread.
void UnregisterExternalImage(uint64_t aExternalImageId);
void UnregisterExternalImage(const wr::ExternalImageId& aExternalImageId);
/// Can be called from any thread.
void PrepareForUse(uint64_t aExternalImageId);
void PrepareForUse(const wr::ExternalImageId& aExternalImageId);
/// Can be called from any thread.
void NotifyNotUsed(uint64_t aExternalImageId);
void NotifyNotUsed(const wr::ExternalImageId& aExternalImageId);
/// Can be called from any thread.
void NotifyForUse(uint64_t aExternalImageId);
void NotifyForUse(const wr::ExternalImageId& aExternalImageId);
void HandleRenderTextureOps();
/// Can only be called from the render thread.
void UnregisterExternalImageDuringShutdown(uint64_t aExternalImageId);
void UnregisterExternalImageDuringShutdown(
const wr::ExternalImageId& aExternalImageId);
/// Can only be called from the render thread.
RenderTextureHost* GetRenderTexture(ExternalImageId aExternalImageId);
RenderTextureHost* GetRenderTexture(
const wr::ExternalImageId& aExternalImageId);
/// Can be called from any thread.
bool IsDestroyed(wr::WindowId aWindowId);
@ -310,7 +312,8 @@ class RenderThread final {
void DoAccumulateMemoryReport(MemoryReport,
const RefPtr<MemoryReportPromise::Private>&);
void AddRenderTextureOp(RenderTextureOp aOp, uint64_t aExternalImageId);
void AddRenderTextureOp(RenderTextureOp aOp,
const wr::ExternalImageId& aExternalImageId);
void CreateSingletonGL(nsACString& aError);
@ -351,9 +354,18 @@ class RenderThread final {
DataMutex<std::unordered_map<uint64_t, WindowInfo*>> mWindowInfos;
struct ExternalImageIdHashFn {
std::size_t operator()(const wr::ExternalImageId& aId) const {
return HashGeneric(wr::AsUint64(aId));
}
};
Mutex mRenderTextureMapLock;
std::unordered_map<uint64_t, RefPtr<RenderTextureHost>> mRenderTextures;
std::unordered_map<uint64_t, RefPtr<RenderTextureHost>>
std::unordered_map<wr::ExternalImageId, RefPtr<RenderTextureHost>,
ExternalImageIdHashFn>
mRenderTextures;
std::unordered_map<wr::ExternalImageId, RefPtr<RenderTextureHost>,
ExternalImageIdHashFn>
mSyncObjectNeededRenderTextures;
std::list<std::pair<RenderTextureOp, RefPtr<RenderTextureHost>>>
mRenderTextureOps;