Index: src/ports/SkPurgeableMemoryBlock_android.cpp |
diff --git a/src/ports/SkPurgeableMemoryBlock_android.cpp b/src/ports/SkPurgeableMemoryBlock_android.cpp |
deleted file mode 100644 |
index acabb0d808836241922334b11a25ad070a2dc175..0000000000000000000000000000000000000000 |
--- a/src/ports/SkPurgeableMemoryBlock_android.cpp |
+++ /dev/null |
@@ -1,110 +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 "SkPurgeableMemoryBlock.h" |
- |
-#include "android/ashmem.h" |
-#include <sys/mman.h> |
-#include <unistd.h> |
- |
-bool SkPurgeableMemoryBlock::IsSupported() { |
- return true; |
-} |
- |
-#ifdef SK_DEBUG |
-bool SkPurgeableMemoryBlock::PlatformSupportsPurgingAllUnpinnedBlocks() { |
- return false; |
-} |
- |
-bool SkPurgeableMemoryBlock::PurgeAllUnpinnedBlocks() { |
- return false; |
-} |
- |
-bool SkPurgeableMemoryBlock::purge() { |
- SkASSERT(!fPinned); |
- if (-1 != fFD) { |
- ashmem_purge_all_caches(fFD); |
- return true; |
- } else { |
- return false; |
- } |
-} |
-#endif |
- |
-// ashmem likes lengths on page boundaries. |
-static size_t round_to_page_size(size_t size) { |
- const size_t mask = getpagesize() - 1; |
- size_t newSize = (size + mask) & ~mask; |
- return newSize; |
-} |
- |
-SkPurgeableMemoryBlock::SkPurgeableMemoryBlock(size_t size) |
- : fAddr(NULL) |
- , fSize(round_to_page_size(size)) |
- , fPinned(false) |
- , fFD(-1) { |
-} |
- |
-SkPurgeableMemoryBlock::~SkPurgeableMemoryBlock() { |
- if (-1 != fFD) { |
- munmap(fAddr, fSize); |
- close(fFD); |
- } |
-} |
- |
-void* SkPurgeableMemoryBlock::pin(SkPurgeableMemoryBlock::PinResult* pinResult) { |
- SkASSERT(!fPinned); |
- if (-1 == fFD) { |
- int fd = ashmem_create_region(NULL, fSize); |
- if (-1 == fd) { |
- SkDebugf("ashmem_create_region failed\n"); |
- return NULL; |
- } |
- |
- int err = ashmem_set_prot_region(fd, PROT_READ | PROT_WRITE); |
- if (err != 0) { |
- SkDebugf("ashmem_set_prot_region failed\n"); |
- close(fd); |
- return NULL; |
- } |
- |
- void* addr = mmap(NULL, fSize, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0); |
- if (-1 == (long) addr) { |
- SkDebugf("mmap failed\n"); |
- close(fd); |
- return NULL; |
- } |
- fAddr = addr; |
- fFD = fd; |
- (void) ashmem_pin_region(fd, 0, 0); |
- *pinResult = kUninitialized_PinResult; |
- fPinned = true; |
- } else { |
- int pin = ashmem_pin_region(fFD, 0, 0); |
- if (ASHMEM_NOT_PURGED == pin) { |
- fPinned = true; |
- *pinResult = kRetained_PinResult; |
- } else if (ASHMEM_WAS_PURGED == pin) { |
- fPinned = true; |
- *pinResult = kUninitialized_PinResult; |
- } else { |
- // Failed. |
- munmap(fAddr, fSize); |
- close(fFD); |
- fFD = -1; |
- fAddr = NULL; |
- } |
- } |
- return fAddr; |
-} |
- |
-void SkPurgeableMemoryBlock::unpin() { |
- if (-1 != fFD) { |
- ashmem_unpin_region(fFD, 0, 0); |
- fPinned = false; |
- } |
-} |