Skip to content

Commit 43b67ab

Browse files
committed
Bug 1936601. r=gfx-reviewers,lsalzman
Differential Revision: https://phabricator.services.mozilla.com/D234803
1 parent 21e4840 commit 43b67ab

File tree

3 files changed

+13
-19
lines changed

3 files changed

+13
-19
lines changed

gfx/layers/SourceSurfaceSharedData.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,9 @@ bool SourceSurfaceSharedDataWrapper::Map(MapType aMapType,
105105
MutexAutoLock lock(*mHandleLock);
106106
dataPtr = GetData();
107107
if (mMapCount == 0) {
108-
SharedSurfacesParent::RemoveTracking(this);
108+
if (mConsumers > 0) {
109+
SharedSurfacesParent::RemoveTracking(this);
110+
}
109111
if (!dataPtr) {
110112
size_t len = GetAlignedDataLength();
111113
if (!EnsureMapped(len)) {
@@ -129,7 +131,7 @@ bool SourceSurfaceSharedDataWrapper::Map(MapType aMapType,
129131
void SourceSurfaceSharedDataWrapper::Unmap() {
130132
if (mHandleLock) {
131133
MutexAutoLock lock(*mHandleLock);
132-
if (--mMapCount == 0) {
134+
if (--mMapCount == 0 && mConsumers > 0) {
133135
SharedSurfacesParent::AddTracking(this);
134136
}
135137
} else {

gfx/layers/SourceSurfaceSharedData.h

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,7 @@ class SourceSurfaceSharedDataWrapper final : public DataSourceSurface {
4040
MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(SourceSurfaceSharedDataWrapper,
4141
override)
4242

43-
SourceSurfaceSharedDataWrapper()
44-
: mStride(0),
45-
mConsumers(0),
46-
mFormat(SurfaceFormat::UNKNOWN),
47-
mCreatorPid(0),
48-
mCreatorRef(true) {}
43+
SourceSurfaceSharedDataWrapper() = default;
4944

5045
void Init(const IntSize& aSize, int32_t aStride, SurfaceFormat aFormat,
5146
SharedMemory::Handle aHandle, base::ProcessId aCreatorPid);
@@ -86,10 +81,7 @@ class SourceSurfaceSharedDataWrapper final : public DataSourceSurface {
8681
return --mConsumers == 0;
8782
}
8883

89-
uint32_t GetConsumers() const {
90-
MOZ_ASSERT(mConsumers > 0);
91-
return mConsumers;
92-
}
84+
uint32_t GetConsumers() const { return mConsumers; }
9385

9486
bool HasCreatorRef() const { return mCreatorRef; }
9587

@@ -113,13 +105,13 @@ class SourceSurfaceSharedDataWrapper final : public DataSourceSurface {
113105
// Protects mapping and unmapping of mBuf.
114106
Maybe<Mutex> mHandleLock;
115107
nsExpirationState mExpirationState;
116-
int32_t mStride;
117-
uint32_t mConsumers;
108+
int32_t mStride = 0;
109+
uint32_t mConsumers = 1;
118110
IntSize mSize;
119111
RefPtr<SharedMemory> mBuf;
120-
SurfaceFormat mFormat;
121-
base::ProcessId mCreatorPid;
122-
bool mCreatorRef;
112+
SurfaceFormat mFormat = SurfaceFormat::UNKNOWN;
113+
base::ProcessId mCreatorPid = 0;
114+
bool mCreatorRef = true;
123115
};
124116

125117
/**

gfx/layers/ipc/SharedSurfacesParent.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,6 @@ void SharedSurfacesParent::AddSameProcess(const wr::ExternalImageId& aId,
200200
auto texture = MakeRefPtr<wr::RenderSharedSurfaceTextureHost>(surface);
201201
wr::RenderThread::Get()->RegisterExternalImage(aId, texture.forget());
202202

203-
surface->AddConsumer();
204203
sInstance->mSurfaces.InsertOrUpdate(id, std::move(surface));
205204
}
206205

@@ -269,7 +268,6 @@ void SharedSurfacesParent::Add(const wr::ExternalImageId& aId,
269268
auto texture = MakeRefPtr<wr::RenderSharedSurfaceTextureHost>(surface);
270269
wr::RenderThread::Get()->RegisterExternalImage(aId, texture.forget());
271270

272-
surface->AddConsumer();
273271
sInstance->mSurfaces.InsertOrUpdate(id, std::move(surface));
274272
}
275273

@@ -284,6 +282,7 @@ void SharedSurfacesParent::AddTrackingLocked(
284282
SourceSurfaceSharedDataWrapper* aSurface,
285283
const StaticMutexAutoLock& aAutoLock) {
286284
MOZ_ASSERT(!aSurface->GetExpirationState()->IsTracked());
285+
MOZ_ASSERT(aSurface->GetConsumers() > 0);
287286
sInstance->mTracker.AddObjectLocked(aSurface, aAutoLock);
288287
}
289288

@@ -356,6 +355,7 @@ bool SharedSurfacesParent::AgeAndExpireOneGeneration() {
356355
void SharedSurfacesParent::ExpireMap(
357356
nsTArray<RefPtr<SourceSurfaceSharedDataWrapper>>& aExpired) {
358357
for (auto& surface : aExpired) {
358+
MOZ_ASSERT(surface->GetConsumers() > 0);
359359
surface->ExpireMap();
360360
}
361361
}

0 commit comments

Comments
 (0)