Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(92)

Side by Side Diff: src/lazy/SkImageCache.cpp

Issue 84783002: SkDiscardableMemory::Factory class (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698