Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 /* | |
| 2 * Copyright 2013 Google Inc. | |
| 3 * | |
| 4 * Use of this source code is governed by a BSD-style license that can be | |
| 5 * found in the LICENSE file. | |
| 6 */ | |
| 7 | |
| 8 #include "SkImageCache.h" | |
| 9 | |
| 10 namespace { | |
| 11 class ImageCacheBackedDM : public SkDiscardableMemory { | |
| 12 public: | |
| 13 static SkDiscardableMemory * create(SkImageCache* cache, size_t size); | |
|
scroggo
2013/12/02 19:00:09
SkDiscardableMemory* create
| |
| 14 virtual ~ImageCacheBackedDM(); | |
| 15 virtual bool lock() SK_OVERRIDE; | |
| 16 virtual void* data() SK_OVERRIDE; | |
| 17 virtual void unlock() SK_OVERRIDE; | |
| 18 private: | |
| 19 ImageCacheBackedDM(SkImageCache* cache, SkImageCache::ID id, void* ptr); | |
| 20 SkImageCache* fCache; | |
| 21 SkImageCache::ID fId; | |
| 22 void* fPtr; | |
| 23 }; | |
| 24 | |
| 25 SkDiscardableMemory * ImageCacheBackedDM::create(SkImageCache* cache, | |
|
scroggo
2013/12/02 19:00:09
SkDiscardableMemory* ImageCacheBackedDM...
| |
| 26 size_t bytes) { | |
| 27 SkASSERT(cache); | |
| 28 SkImageCache::ID id(SkImageCache::UNINITIALIZED_ID); | |
| 29 void* ptr = cache->allocAndPinCache(bytes, &id); | |
| 30 SkASSERT((NULL == ptr) == (SkImageCache::UNINITIALIZED_ID == id)); | |
| 31 if (ptr == NULL) { | |
| 32 return NULL; | |
| 33 } | |
| 34 return SkNEW_ARGS(ImageCacheBackedDM, (cache, id, ptr)); | |
| 35 } | |
| 36 | |
| 37 ImageCacheBackedDM::ImageCacheBackedDM(SkImageCache* cache, | |
| 38 SkImageCache::ID id, void* ptr) | |
| 39 : fCache(cache), fId(id), fPtr(ptr) { | |
|
scroggo
2013/12/02 19:00:09
These should be on their own line:
: fCache(cache
| |
| 40 fCache->ref(); | |
| 41 } | |
| 42 | |
| 43 ImageCacheBackedDM::~ImageCacheBackedDM() { | |
| 44 if (fId != SkImageCache::UNINITIALIZED_ID) { | |
| 45 fCache->throwAwayCache(fId); | |
| 46 } | |
| 47 fCache->unref(); | |
| 48 } | |
| 49 | |
| 50 bool ImageCacheBackedDM::lock() { | |
| 51 SkImageCache::DataStatus status; | |
| 52 SkASSERT(NULL == fPtr); | |
| 53 fPtr = fCache->pinCache(fId, &status); | |
| 54 if (NULL == fPtr) { | |
| 55 fId = SkImageCache::UNINITIALIZED_ID; | |
| 56 return false; | |
| 57 } | |
| 58 if (SkImageCache::kRetained_DataStatus == status) { | |
| 59 return true; | |
| 60 } | |
| 61 // not retained, fail. | |
| 62 fCache->releaseCache(fId); | |
| 63 fCache->throwAwayCache(fId); | |
| 64 fId = SkImageCache::UNINITIALIZED_ID; | |
| 65 fPtr = NULL; | |
| 66 return false; | |
| 67 } | |
| 68 | |
| 69 void* ImageCacheBackedDM::data() { | |
| 70 return fPtr; | |
| 71 } | |
| 72 | |
| 73 void ImageCacheBackedDM::unlock() { | |
| 74 if (fId != SkImageCache::UNINITIALIZED_ID) { | |
| 75 fCache->releaseCache(fId); | |
| 76 } | |
| 77 fPtr = NULL; | |
| 78 } | |
| 79 } // namespace | |
| 80 | |
| 81 SkDiscardableMemory* SkImageCache::create(size_t bytes) { | |
| 82 return ImageCacheBackedDM::create(this, bytes); | |
| 83 } | |
| OLD | NEW |