diff options
author | 2014-05-23 20:25:15 +0000 | |
---|---|---|
committer | 2014-05-23 20:25:15 +0000 | |
commit | e5a8e66668a1594e49b2c221f26da4c6d2a4e99f (patch) | |
tree | 22f558f1a30e924cd29d5543e70ba2e9d39dde81 | |
parent | 4c4506441cad3917ce5797ae041853d31d8e7e2e (diff) |
move ashmem switching logic to SkDiscardableMemory::Create
R=scroggo@google.com, reed@google.com
Author: halcanary@google.com
Review URL: https://codereview.chromium.org/293283002
git-svn-id: http://skia.googlecode.com/svn/trunk@14882 2bbb7eff-a529-9590-31e7-b0007b416f81
-rw-r--r-- | src/ports/SkDiscardableMemory_ashmem.cpp | 22 | ||||
-rw-r--r-- | tests/ImageDecodingTest.cpp | 14 |
2 files changed, 21 insertions, 15 deletions
diff --git a/src/ports/SkDiscardableMemory_ashmem.cpp b/src/ports/SkDiscardableMemory_ashmem.cpp index e5e5f53969..88261543fd 100644 --- a/src/ports/SkDiscardableMemory_ashmem.cpp +++ b/src/ports/SkDiscardableMemory_ashmem.cpp @@ -8,6 +8,7 @@ #include <unistd.h> #include <sys/mman.h> #include "SkDiscardableMemory.h" +#include "SkDiscardableMemoryPool.h" #include "SkTypes.h" #include "android/ashmem.h" @@ -24,6 +25,8 @@ public: 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; @@ -86,10 +89,8 @@ void SkAshmemDiscardableMemory::unlock() { } fLocked = false; } -} // namespace -//////////////////////////////////////////////////////////////////////////////// -SkDiscardableMemory* SkDiscardableMemory::Create(size_t bytes) { +SkAshmemDiscardableMemory* SkAshmemDiscardableMemory::Create(size_t bytes) { // ashmem likes lengths on page boundaries. const size_t mask = getpagesize() - 1; size_t size = (bytes + mask) & ~mask; @@ -111,3 +112,18 @@ SkDiscardableMemory* SkDiscardableMemory::Create(size_t bytes) { 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); + } +} + diff --git a/tests/ImageDecodingTest.cpp b/tests/ImageDecodingTest.cpp index d5dd11ac85..7f9ff3042e 100644 --- a/tests/ImageDecodingTest.cpp +++ b/tests/ImageDecodingTest.cpp @@ -491,18 +491,8 @@ static SkPixelRef* install_pixel_ref(SkBitmap* bitmap, SkASSERT(stream->unique()); SkColorType colorType = bitmap->colorType(); SkDecodingImageGenerator::Options opts(sampleSize, ditherImage, colorType); - SkAutoTDelete<SkImageGenerator> gen( - SkDecodingImageGenerator::Create(stream, opts)); - SkImageInfo info; - if ((NULL == gen.get()) || !gen->getInfo(&info)) { - return NULL; - } - SkDiscardableMemory::Factory* factory = NULL; - if (info.getSafeSize(info.minRowBytes()) < (32 * 1024)) { - // only use ashmem for large images, since mmaps come at a price - factory = SkGetGlobalDiscardableMemoryPool(); - } - if (SkInstallDiscardablePixelRef(gen.detach(), bitmap, factory)) { + if (SkInstallDiscardablePixelRef( + SkDecodingImageGenerator::Create(stream, opts), bitmap)) { return bitmap->pixelRef(); } return NULL; |