1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/memory/mozalloc/VolatileBufferFallback.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,81 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +#include "VolatileBuffer.h" 1.9 +#include "mozilla/Assertions.h" 1.10 +#include "mozilla/NullPtr.h" 1.11 +#include "mozilla/mozalloc.h" 1.12 + 1.13 +#ifdef MOZ_MEMORY 1.14 +int posix_memalign(void** memptr, size_t alignment, size_t size); 1.15 +#endif 1.16 + 1.17 +namespace mozilla { 1.18 + 1.19 +VolatileBuffer::VolatileBuffer() 1.20 + : mBuf(nullptr) 1.21 + , mSize(0) 1.22 + , mLockCount(0) 1.23 +{ 1.24 +} 1.25 + 1.26 +bool VolatileBuffer::Init(size_t aSize, size_t aAlignment) 1.27 +{ 1.28 + MOZ_ASSERT(!mSize && !mBuf, "Init called twice"); 1.29 + MOZ_ASSERT(!(aAlignment % sizeof(void *)), 1.30 + "Alignment must be multiple of pointer size"); 1.31 + 1.32 + mSize = aSize; 1.33 +#if defined(MOZ_MEMORY) 1.34 + posix_memalign(&mBuf, aAlignment, aSize); 1.35 +#elif defined(HAVE_POSIX_MEMALIGN) 1.36 + (void)moz_posix_memalign(&mBuf, aAlignment, aSize); 1.37 +#else 1.38 +#error "No memalign implementation found" 1.39 +#endif 1.40 + return !!mBuf; 1.41 +} 1.42 + 1.43 +VolatileBuffer::~VolatileBuffer() 1.44 +{ 1.45 + free(mBuf); 1.46 +} 1.47 + 1.48 +bool 1.49 +VolatileBuffer::Lock(void** aBuf) 1.50 +{ 1.51 + MOZ_ASSERT(mBuf, "Attempting to lock an uninitialized VolatileBuffer"); 1.52 + 1.53 + *aBuf = mBuf; 1.54 + mLockCount++; 1.55 + 1.56 + return true; 1.57 +} 1.58 + 1.59 +void 1.60 +VolatileBuffer::Unlock() 1.61 +{ 1.62 + mLockCount--; 1.63 + MOZ_ASSERT(mLockCount >= 0, "VolatileBuffer unlocked too many times!"); 1.64 +} 1.65 + 1.66 +bool 1.67 +VolatileBuffer::OnHeap() const 1.68 +{ 1.69 + return true; 1.70 +} 1.71 + 1.72 +size_t 1.73 +VolatileBuffer::HeapSizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const 1.74 +{ 1.75 + return aMallocSizeOf(mBuf); 1.76 +} 1.77 + 1.78 +size_t 1.79 +VolatileBuffer::NonHeapSizeOfExcludingThis() const 1.80 +{ 1.81 + return 0; 1.82 +} 1.83 + 1.84 +} // namespace mozilla