Bug 1216644 - part 3 - make BufferRecycleBin store UniquePtrs; r=jrmuizel
Changing mRecycledBuffers to store UniquePtrs instead of nsAutoArrayPtrs opens up the possibility of a reasonable facsimile of ownership in function signatures.
This commit is contained in:
@@ -116,7 +116,7 @@ BufferRecycleBin::BufferRecycleBin()
|
||||
}
|
||||
|
||||
void
|
||||
BufferRecycleBin::RecycleBuffer(uint8_t* aBuffer, uint32_t aSize)
|
||||
BufferRecycleBin::RecycleBuffer(UniquePtr<uint8_t[]> aBuffer, uint32_t aSize)
|
||||
{
|
||||
MutexAutoLock lock(mLock);
|
||||
|
||||
@@ -124,19 +124,19 @@ BufferRecycleBin::RecycleBuffer(uint8_t* aBuffer, uint32_t aSize)
|
||||
mRecycledBuffers.Clear();
|
||||
}
|
||||
mRecycledBufferSize = aSize;
|
||||
mRecycledBuffers.AppendElement(aBuffer);
|
||||
mRecycledBuffers.AppendElement(Move(aBuffer));
|
||||
}
|
||||
|
||||
uint8_t*
|
||||
UniquePtr<uint8_t[]>
|
||||
BufferRecycleBin::GetBuffer(uint32_t aSize)
|
||||
{
|
||||
MutexAutoLock lock(mLock);
|
||||
|
||||
if (mRecycledBuffers.IsEmpty() || mRecycledBufferSize != aSize)
|
||||
return new uint8_t[aSize];
|
||||
return MakeUnique<uint8_t[]>(aSize);
|
||||
|
||||
uint32_t last = mRecycledBuffers.Length() - 1;
|
||||
uint8_t* result = mRecycledBuffers[last].forget();
|
||||
UniquePtr<uint8_t[]> result = Move(mRecycledBuffers[last]);
|
||||
mRecycledBuffers.RemoveElementAt(last);
|
||||
return result;
|
||||
}
|
||||
@@ -439,7 +439,7 @@ PlanarYCbCrImage::PlanarYCbCrImage()
|
||||
RecyclingPlanarYCbCrImage::~RecyclingPlanarYCbCrImage()
|
||||
{
|
||||
if (mBuffer) {
|
||||
mRecycleBin->RecycleBuffer(mBuffer.forget(), mBufferSize);
|
||||
mRecycleBin->RecycleBuffer(Move(mBuffer), mBufferSize);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -454,7 +454,7 @@ RecyclingPlanarYCbCrImage::SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const
|
||||
// - mImplData is not used
|
||||
// Not owned:
|
||||
// - mRecycleBin
|
||||
size_t size = mBuffer.SizeOfExcludingThis(aMallocSizeOf);
|
||||
size_t size = aMallocSizeOf(mBuffer.get());
|
||||
|
||||
// Could add in the future:
|
||||
// - mBackendData (from base class)
|
||||
@@ -462,7 +462,7 @@ RecyclingPlanarYCbCrImage::SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const
|
||||
return size;
|
||||
}
|
||||
|
||||
uint8_t*
|
||||
UniquePtr<uint8_t[]>
|
||||
RecyclingPlanarYCbCrImage::AllocateBuffer(uint32_t aSize)
|
||||
{
|
||||
return mRecycleBin->GetBuffer(aSize);
|
||||
@@ -509,7 +509,7 @@ RecyclingPlanarYCbCrImage::CopyData(const Data& aData)
|
||||
// update buffer size
|
||||
mBufferSize = size;
|
||||
|
||||
mData.mYChannel = mBuffer;
|
||||
mData.mYChannel = mBuffer.get();
|
||||
mData.mCbChannel = mData.mYChannel + mData.mYStride * mData.mYSize.height;
|
||||
mData.mCrChannel = mData.mCbChannel + mData.mCbCrStride * mData.mCbCrSize.height;
|
||||
|
||||
@@ -555,7 +555,7 @@ RecyclingPlanarYCbCrImage::AllocateAndGetNewBuffer(uint32_t aSize)
|
||||
// update buffer size
|
||||
mBufferSize = aSize;
|
||||
}
|
||||
return mBuffer;
|
||||
return mBuffer.get();
|
||||
}
|
||||
|
||||
already_AddRefed<gfx::SourceSurface>
|
||||
|
||||
Reference in New Issue
Block a user