1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 #include "VolatileBuffer.h"
6 #include "mozilla/Assertions.h"
7 #include "mozilla/NullPtr.h"
8 #include "mozilla/mozalloc.h"
11 int posix_memalign(void** memptr
, size_t alignment
, size_t size
);
16 VolatileBuffer::VolatileBuffer()
23 bool VolatileBuffer::Init(size_t aSize
, size_t aAlignment
)
25 MOZ_ASSERT(!mSize
&& !mBuf
, "Init called twice");
26 MOZ_ASSERT(!(aAlignment
% sizeof(void *)),
27 "Alignment must be multiple of pointer size");
30 #if defined(MOZ_MEMORY)
31 posix_memalign(&mBuf
, aAlignment
, aSize
);
32 #elif defined(HAVE_POSIX_MEMALIGN)
33 (void)moz_posix_memalign(&mBuf
, aAlignment
, aSize
);
35 #error "No memalign implementation found"
40 VolatileBuffer::~VolatileBuffer()
46 VolatileBuffer::Lock(void** aBuf
)
48 MOZ_ASSERT(mBuf
, "Attempting to lock an uninitialized VolatileBuffer");
57 VolatileBuffer::Unlock()
60 MOZ_ASSERT(mLockCount
>= 0, "VolatileBuffer unlocked too many times!");
64 VolatileBuffer::OnHeap() const
70 VolatileBuffer::HeapSizeOfExcludingThis(MallocSizeOf aMallocSizeOf
) const
72 return aMallocSizeOf(mBuf
);
76 VolatileBuffer::NonHeapSizeOfExcludingThis() const
81 } // namespace mozilla