Bug 1936601. r=lsalzman a=RyanVM

Original Revision: https://phabricator.services.mozilla.com/D234803

Differential Revision: https://phabricator.services.mozilla.com/D234973
This commit is contained in:
Andrew Osmond 2025-01-21 17:54:30 +00:00
parent 681c87d49d
commit cd9ded6063
3 changed files with 13 additions and 19 deletions

View file

@ -105,7 +105,9 @@ bool SourceSurfaceSharedDataWrapper::Map(MapType aMapType,
MutexAutoLock lock(*mHandleLock);
dataPtr = GetData();
if (mMapCount == 0) {
SharedSurfacesParent::RemoveTracking(this);
if (mConsumers > 0) {
SharedSurfacesParent::RemoveTracking(this);
}
if (!dataPtr) {
size_t len = GetAlignedDataLength();
if (!EnsureMapped(len)) {
@ -129,7 +131,7 @@ bool SourceSurfaceSharedDataWrapper::Map(MapType aMapType,
void SourceSurfaceSharedDataWrapper::Unmap() {
if (mHandleLock) {
MutexAutoLock lock(*mHandleLock);
if (--mMapCount == 0) {
if (--mMapCount == 0 && mConsumers > 0) {
SharedSurfacesParent::AddTracking(this);
}
} else {

View file

@ -39,12 +39,7 @@ class SourceSurfaceSharedDataWrapper final : public DataSourceSurface {
MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(SourceSurfaceSharedDataWrapper,
override)
SourceSurfaceSharedDataWrapper()
: mStride(0),
mConsumers(0),
mFormat(SurfaceFormat::UNKNOWN),
mCreatorPid(0),
mCreatorRef(true) {}
SourceSurfaceSharedDataWrapper() = default;
void Init(const IntSize& aSize, int32_t aStride, SurfaceFormat aFormat,
SharedMemoryBasic::Handle aHandle, base::ProcessId aCreatorPid);
@ -85,10 +80,7 @@ class SourceSurfaceSharedDataWrapper final : public DataSourceSurface {
return --mConsumers == 0;
}
uint32_t GetConsumers() const {
MOZ_ASSERT(mConsumers > 0);
return mConsumers;
}
uint32_t GetConsumers() const { return mConsumers; }
bool HasCreatorRef() const { return mCreatorRef; }
@ -112,13 +104,13 @@ class SourceSurfaceSharedDataWrapper final : public DataSourceSurface {
// Protects mapping and unmapping of mBuf.
Maybe<Mutex> mHandleLock;
nsExpirationState mExpirationState;
int32_t mStride;
uint32_t mConsumers;
int32_t mStride = 0;
uint32_t mConsumers = 1;
IntSize mSize;
RefPtr<SharedMemoryBasic> mBuf;
SurfaceFormat mFormat;
base::ProcessId mCreatorPid;
bool mCreatorRef;
SurfaceFormat mFormat = SurfaceFormat::UNKNOWN;
base::ProcessId mCreatorPid = 0;
bool mCreatorRef = true;
};
/**

View file

@ -200,7 +200,6 @@ void SharedSurfacesParent::AddSameProcess(const wr::ExternalImageId& aId,
auto texture = MakeRefPtr<wr::RenderSharedSurfaceTextureHost>(surface);
wr::RenderThread::Get()->RegisterExternalImage(aId, texture.forget());
surface->AddConsumer();
sInstance->mSurfaces.InsertOrUpdate(id, std::move(surface));
}
@ -269,7 +268,6 @@ void SharedSurfacesParent::Add(const wr::ExternalImageId& aId,
auto texture = MakeRefPtr<wr::RenderSharedSurfaceTextureHost>(surface);
wr::RenderThread::Get()->RegisterExternalImage(aId, texture.forget());
surface->AddConsumer();
sInstance->mSurfaces.InsertOrUpdate(id, std::move(surface));
}
@ -284,6 +282,7 @@ void SharedSurfacesParent::AddTrackingLocked(
SourceSurfaceSharedDataWrapper* aSurface,
const StaticMutexAutoLock& aAutoLock) {
MOZ_ASSERT(!aSurface->GetExpirationState()->IsTracked());
MOZ_ASSERT(aSurface->GetConsumers() > 0);
sInstance->mTracker.AddObjectLocked(aSurface, aAutoLock);
}
@ -356,6 +355,7 @@ bool SharedSurfacesParent::AgeAndExpireOneGeneration() {
void SharedSurfacesParent::ExpireMap(
nsTArray<RefPtr<SourceSurfaceSharedDataWrapper>>& aExpired) {
for (auto& surface : aExpired) {
MOZ_ASSERT(surface->GetConsumers() > 0);
surface->ExpireMap();
}
}