forked from mirrors/gecko-dev
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:
parent
681c87d49d
commit
cd9ded6063
3 changed files with 13 additions and 19 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue