Index: src/ports/SkDiscardableMemory_ashmem.cpp |
diff --git a/src/ports/SkDiscardableMemory_ashmem.cpp b/src/ports/SkDiscardableMemory_ashmem.cpp |
deleted file mode 100644 |
index 27d3e23d7810af51642e0bd63045ad4a1e929ead..0000000000000000000000000000000000000000 |
--- a/src/ports/SkDiscardableMemory_ashmem.cpp |
+++ /dev/null |
@@ -1,128 +0,0 @@ |
-/* |
- * Copyright 2013 Google Inc. |
- * |
- * Use of this source code is governed by a BSD-style license that can be |
- * found in the LICENSE file. |
- */ |
- |
-#include <unistd.h> |
-#include <sys/mman.h> |
-#include "SkDiscardableMemory.h" |
-#include "SkDiscardableMemoryPool.h" |
-#include "SkTypes.h" |
-#include "android/ashmem.h" |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-namespace { |
-/** |
- * DiscardableMemory implementation that uses the Android kernel's |
- * ashmem (Android shared memory). |
- */ |
-class SkAshmemDiscardableMemory : public SkDiscardableMemory { |
-public: |
- SkAshmemDiscardableMemory(int fd, void* address, size_t size); |
- virtual ~SkAshmemDiscardableMemory(); |
- virtual bool lock() SK_OVERRIDE; |
- virtual void* data() SK_OVERRIDE; |
- virtual void unlock() SK_OVERRIDE; |
- static SkAshmemDiscardableMemory* Create(size_t bytes); |
- |
-private: |
- bool fLocked; |
- int fFd; |
- void* fMemory; |
- const size_t fSize; |
-}; |
- |
-SkAshmemDiscardableMemory::SkAshmemDiscardableMemory(int fd, |
- void* address, |
- size_t size) |
- : fLocked(true) // Ashmem pages are pinned by default. |
- , fFd(fd) |
- , fMemory(address) |
- , fSize(size) { |
- SkASSERT(fFd >= 0); |
- SkASSERT(fMemory != NULL); |
- SkASSERT(fSize > 0); |
-} |
- |
-SkAshmemDiscardableMemory::~SkAshmemDiscardableMemory() { |
- SkASSERT(!fLocked); |
- if (NULL != fMemory) { |
- munmap(fMemory, fSize); |
- } |
- if (fFd != -1) { |
- close(fFd); |
- } |
-} |
- |
-bool SkAshmemDiscardableMemory::lock() { |
- SkASSERT(!fLocked); |
- if (-1 == fFd) { |
- fLocked = false; |
- return false; |
- } |
- SkASSERT(fMemory != NULL); |
- if (fLocked || (ASHMEM_NOT_PURGED == ashmem_pin_region(fFd, 0, 0))) { |
- fLocked = true; |
- return true; |
- } else { |
- munmap(fMemory, fSize); |
- fMemory = NULL; |
- |
- close(fFd); |
- fFd = -1; |
- fLocked = false; |
- return false; |
- } |
-} |
- |
-void* SkAshmemDiscardableMemory::data() { |
- SkASSERT(fLocked); |
- return fLocked ? fMemory : NULL; |
-} |
- |
-void SkAshmemDiscardableMemory::unlock() { |
- SkASSERT(fLocked); |
- if (fLocked && (fFd != -1)) { |
- ashmem_unpin_region(fFd, 0, 0); |
- } |
- fLocked = false; |
-} |
- |
-SkAshmemDiscardableMemory* SkAshmemDiscardableMemory::Create(size_t bytes) { |
- // ashmem likes lengths on page boundaries. |
- const size_t mask = getpagesize() - 1; |
- size_t size = (bytes + mask) & ~mask; |
- |
- static const char name[] = "Skia_Ashmem_Discardable_Memory"; |
- int fd = ashmem_create_region(name, size); |
- if (fd < 0) { |
- return NULL; |
- } |
- if (0 != ashmem_set_prot_region(fd, PROT_READ | PROT_WRITE)) { |
- close(fd); |
- return NULL; |
- } |
- void* addr = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0); |
- if ((MAP_FAILED == addr) || (NULL == addr)) { |
- close(fd); |
- return NULL; |
- } |
- |
- return SkNEW_ARGS(SkAshmemDiscardableMemory, (fd, addr, size)); |
-} |
-} // namespace |
-//////////////////////////////////////////////////////////////////////////////// |
- |
-#ifndef SK_ASHMEM_MINIMUM_MEMORY_SIZE |
-// number taken from android/graphics/BitmapFactory.cpp |
-#define SK_ASHMEM_MINIMUM_MEMORY_SIZE (32 * 1024) |
-#endif // SK_ASHMEM_MINIMUM_MEMORY_SIZE |
-SkDiscardableMemory* SkDiscardableMemory::Create(size_t bytes) { |
- if (bytes < SK_ASHMEM_MINIMUM_MEMORY_SIZE) { |
- return SkGetGlobalDiscardableMemoryPool()->create(bytes); |
- } else { |
- return SkAshmemDiscardableMemory::Create(bytes); |
- } |
-} |