зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
dac9173b80
Коммит
e13c31b137
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче