diff options
Diffstat (limited to 'memory/volatile')
-rw-r--r-- | memory/volatile/VolatileBuffer.h | 4 | ||||
-rw-r--r-- | memory/volatile/VolatileBufferAshmem.cpp | 139 | ||||
-rw-r--r-- | memory/volatile/moz.build | 22 | ||||
-rw-r--r-- | memory/volatile/tests/TestVolatileBuffer.cpp | 8 |
4 files changed, 7 insertions, 166 deletions
diff --git a/memory/volatile/VolatileBuffer.h b/memory/volatile/VolatileBuffer.h index ebb471332..b6bcdfcb7 100644 --- a/memory/volatile/VolatileBuffer.h +++ b/memory/volatile/VolatileBuffer.h @@ -76,9 +76,7 @@ private: void* mBuf; size_t mSize; int mLockCount; -#if defined(ANDROID) - int mFd; -#elif defined(XP_DARWIN) +#ifdef XP_DARWIN bool mHeap; #elif defined(XP_WIN) bool mHeap; diff --git a/memory/volatile/VolatileBufferAshmem.cpp b/memory/volatile/VolatileBufferAshmem.cpp deleted file mode 100644 index 09904d6ef..000000000 --- a/memory/volatile/VolatileBufferAshmem.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "VolatileBuffer.h" -#include "mozilla/Assertions.h" -#include "mozilla/mozalloc.h" - -#include <fcntl.h> -#include <linux/ashmem.h> -#include <sys/mman.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <unistd.h> - -#ifdef MOZ_MEMORY -extern "C" int posix_memalign(void** memptr, size_t alignment, size_t size); -#endif - -#define MIN_VOLATILE_ALLOC_SIZE 8192 - -namespace mozilla { - -VolatileBuffer::VolatileBuffer() - : mMutex("VolatileBuffer") - , mBuf(nullptr) - , mSize(0) - , mLockCount(0) - , mFd(-1) -{ -} - -bool -VolatileBuffer::Init(size_t aSize, size_t aAlignment) -{ - MOZ_ASSERT(!mSize && !mBuf, "Init called twice"); - MOZ_ASSERT(!(aAlignment % sizeof(void *)), - "Alignment must be multiple of pointer size"); - - mSize = aSize; - if (aSize < MIN_VOLATILE_ALLOC_SIZE) { - goto heap_alloc; - } - - mFd = open("/" ASHMEM_NAME_DEF, O_RDWR); - if (mFd < 0) { - goto heap_alloc; - } - - if (ioctl(mFd, ASHMEM_SET_SIZE, mSize) < 0) { - goto heap_alloc; - } - - mBuf = mmap(nullptr, mSize, PROT_READ | PROT_WRITE, MAP_SHARED, mFd, 0); - if (mBuf != MAP_FAILED) { - return true; - } - -heap_alloc: - mBuf = nullptr; - if (mFd >= 0) { - close(mFd); - mFd = -1; - } - -#ifdef MOZ_MEMORY - posix_memalign(&mBuf, aAlignment, aSize); -#else - mBuf = memalign(aAlignment, aSize); -#endif - return !!mBuf; -} - -VolatileBuffer::~VolatileBuffer() -{ - MOZ_ASSERT(mLockCount == 0, "Being destroyed with non-zero lock count?"); - - if (OnHeap()) { - free(mBuf); - } else { - munmap(mBuf, mSize); - close(mFd); - } -} - -bool -VolatileBuffer::Lock(void** aBuf) -{ - MutexAutoLock lock(mMutex); - - MOZ_ASSERT(mBuf, "Attempting to lock an uninitialized VolatileBuffer"); - - *aBuf = mBuf; - if (++mLockCount > 1 || OnHeap()) { - return true; - } - - // Zero offset and zero length means we want to pin/unpin the entire thing. - struct ashmem_pin pin = { 0, 0 }; - return ioctl(mFd, ASHMEM_PIN, &pin) == ASHMEM_NOT_PURGED; -} - -void -VolatileBuffer::Unlock() -{ - MutexAutoLock lock(mMutex); - - MOZ_ASSERT(mLockCount > 0, "VolatileBuffer unlocked too many times!"); - if (--mLockCount || OnHeap()) { - return; - } - - struct ashmem_pin pin = { 0, 0 }; - ioctl(mFd, ASHMEM_UNPIN, &pin); -} - -bool -VolatileBuffer::OnHeap() const -{ - return mFd < 0; -} - -size_t -VolatileBuffer::HeapSizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const -{ - return OnHeap() ? aMallocSizeOf(mBuf) : 0; -} - -size_t -VolatileBuffer::NonHeapSizeOfExcludingThis() const -{ - if (OnHeap()) { - return 0; - } - - return (mSize + (PAGE_SIZE - 1)) & PAGE_MASK; -} - -} // namespace mozilla diff --git a/memory/volatile/moz.build b/memory/volatile/moz.build index deacdf433..5132237a2 100644 --- a/memory/volatile/moz.build +++ b/memory/volatile/moz.build @@ -5,26 +5,14 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. NO_VISIBILITY_FLAGS = True -EXPORTS.mozilla += [ - 'VolatileBuffer.h', -] +EXPORTS.mozilla += ['VolatileBuffer.h'] -if CONFIG['OS_TARGET'] == 'Android': - UNIFIED_SOURCES += [ - 'VolatileBufferAshmem.cpp', - ] -elif CONFIG['OS_TARGET'] == 'Darwin': - UNIFIED_SOURCES += [ - 'VolatileBufferOSX.cpp', - ] +if CONFIG['OS_TARGET'] == 'Darwin': + UNIFIED_SOURCES += ['VolatileBufferOSX.cpp'] elif CONFIG['OS_TARGET'] == 'WINNT': - UNIFIED_SOURCES += [ - 'VolatileBufferWindows.cpp', - ] + UNIFIED_SOURCES += ['VolatileBufferWindows.cpp'] else: - UNIFIED_SOURCES += [ - 'VolatileBufferFallback.cpp', - ] + UNIFIED_SOURCES += ['VolatileBufferFallback.cpp'] FINAL_LIBRARY = 'xul' diff --git a/memory/volatile/tests/TestVolatileBuffer.cpp b/memory/volatile/tests/TestVolatileBuffer.cpp index dff8e794a..7d21236a4 100644 --- a/memory/volatile/tests/TestVolatileBuffer.cpp +++ b/memory/volatile/tests/TestVolatileBuffer.cpp @@ -6,13 +6,7 @@ #include "mozilla/VolatileBuffer.h" #include <string.h> -#if defined(ANDROID) -#include <fcntl.h> -#include <linux/ashmem.h> -#include <sys/ioctl.h> -#include <sys/stat.h> -#include <sys/types.h> -#elif defined(XP_DARWIN) +#ifdef XP_DARWIN #include <mach/mach.h> #endif |