зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1380649 - Part 2. Ensure SourceSurfaceVolatileData does not forget its purged state. r=jrmuizel
Currently if SourceSurfaceVolatileData::Map fails due to being purged, we expect that the surface will be discarded by the caller. This has not consistently been the case, and as such, we should ensure we do not forget if a buffer was previously purged when we reacquire it. Since we do not at this time support repopulating an already allocated buffer with new data, we cannot reset this state once it has been set.
This commit is contained in:
Родитель
264d6b5edf
Коммит
9df74d4975
|
@ -32,6 +32,7 @@ public:
|
|||
, mStride(0)
|
||||
, mMapCount(0)
|
||||
, mFormat(SurfaceFormat::UNKNOWN)
|
||||
, mWasPurged(false)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -66,10 +67,14 @@ public:
|
|||
bool Map(MapType, MappedSurface *aMappedSurface) override
|
||||
{
|
||||
MutexAutoLock lock(mMutex);
|
||||
if (mWasPurged) {
|
||||
return false;
|
||||
}
|
||||
if (mMapCount == 0) {
|
||||
mVBufPtr = mVBuf;
|
||||
}
|
||||
if (mVBufPtr.WasBufferPurged()) {
|
||||
mWasPurged = true;
|
||||
return false;
|
||||
}
|
||||
aMappedSurface->mData = mVBufPtr;
|
||||
|
@ -82,6 +87,7 @@ public:
|
|||
{
|
||||
MutexAutoLock lock(mMutex);
|
||||
MOZ_ASSERT(mMapCount > 0);
|
||||
MOZ_ASSERT(!mWasPurged);
|
||||
if (--mMapCount == 0) {
|
||||
mVBufPtr = nullptr;
|
||||
}
|
||||
|
@ -100,6 +106,7 @@ private:
|
|||
RefPtr<VolatileBuffer> mVBuf;
|
||||
VolatileBufferPtr<uint8_t> mVBufPtr;
|
||||
SurfaceFormat mFormat;
|
||||
bool mWasPurged;
|
||||
};
|
||||
|
||||
} // namespace gfx
|
||||
|
|
Загрузка…
Ссылка в новой задаче