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

Side by Side Diff: src/core/SkBitmapCache.cpp

Issue 576763002: allow SkBitmapCache to operate on a local instance, for testability (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 3 months 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
OLDNEW
1 /* 1 /*
2 * Copyright 2014 Google Inc. 2 * Copyright 2014 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkBitmapCache.h" 8 #include "SkBitmapCache.h"
9 #include "SkResourceCache.h" 9 #include "SkResourceCache.h"
10 #include "SkMipMap.h" 10 #include "SkMipMap.h"
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 static bool Visitor(const SkResourceCache::Rec& baseRec, void* contextBitmap ) { 63 static bool Visitor(const SkResourceCache::Rec& baseRec, void* contextBitmap ) {
64 const BitmapRec& rec = static_cast<const BitmapRec&>(baseRec); 64 const BitmapRec& rec = static_cast<const BitmapRec&>(baseRec);
65 SkBitmap* result = (SkBitmap*)contextBitmap; 65 SkBitmap* result = (SkBitmap*)contextBitmap;
66 66
67 *result = rec.fBitmap; 67 *result = rec.fBitmap;
68 result->lockPixels(); 68 result->lockPixels();
69 return SkToBool(result->getPixels()); 69 return SkToBool(result->getPixels());
70 } 70 }
71 }; 71 };
72 72
73 bool SkBitmapCache::Find(const SkBitmap& src, SkScalar invScaleX, SkScalar invSc aleY, 73 #define CHECK_LOCAL(localCache, localName, globalName, args...) \
74 SkBitmap* result) { 74 (localCache) ? localCache->localName(args) : SkResourceCache::globalName(arg s)
75
76 bool SkBitmapCache::Find(const SkBitmap& src, SkScalar invScaleX, SkScalar invSc aleY, SkBitmap* result,
77 SkResourceCache* localCache) {
75 if (0 == invScaleX || 0 == invScaleY) { 78 if (0 == invScaleX || 0 == invScaleY) {
76 // degenerate, and the key we use for mipmaps 79 // degenerate, and the key we use for mipmaps
77 return false; 80 return false;
78 } 81 }
79 BitmapKey key(src.getGenerationID(), invScaleX, invScaleY, get_bounds_from_b itmap(src)); 82 BitmapKey key(src.getGenerationID(), invScaleX, invScaleY, get_bounds_from_b itmap(src));
80 return SkResourceCache::Find(key, BitmapRec::Visitor, result); 83
84 return CHECK_LOCAL(localCache, find, Find, key, BitmapRec::Visitor, result);
danakj 2014/09/16 15:26:27 This is really awkward to read :( Tho, given you
reed1 2014/09/16 17:31:12 I find it very nice for calls sites that want to a
81 } 85 }
82 86
83 void SkBitmapCache::Add(const SkBitmap& src, SkScalar invScaleX, SkScalar invSca leY, 87 void SkBitmapCache::Add(const SkBitmap& src, SkScalar invScaleX, SkScalar invSca leY,
84 const SkBitmap& result) { 88 const SkBitmap& result, SkResourceCache* localCache) {
85 if (0 == invScaleX || 0 == invScaleY) { 89 if (0 == invScaleX || 0 == invScaleY) {
86 // degenerate, and the key we use for mipmaps 90 // degenerate, and the key we use for mipmaps
87 return; 91 return;
88 } 92 }
89 SkASSERT(result.isImmutable()); 93 SkASSERT(result.isImmutable());
90 SkResourceCache::Add(SkNEW_ARGS(BitmapRec, (src.getGenerationID(), invScaleX , invScaleY, 94 BitmapRec* rec = SkNEW_ARGS(BitmapRec, (src.getGenerationID(), invScaleX, in vScaleY,
91 get_bounds_from_bitmap(src), res ult))); 95 get_bounds_from_bitmap(src), result) );
96 CHECK_LOCAL(localCache, add, Add, rec);
92 } 97 }
93 98
94 bool SkBitmapCache::Find(uint32_t genID, const SkIRect& subset, SkBitmap* result ) { 99 bool SkBitmapCache::Find(uint32_t genID, const SkIRect& subset, SkBitmap* result ,
100 SkResourceCache* localCache) {
95 BitmapKey key(genID, SK_Scalar1, SK_Scalar1, subset); 101 BitmapKey key(genID, SK_Scalar1, SK_Scalar1, subset);
96 return SkResourceCache::Find(key, BitmapRec::Visitor, result); 102
103 return CHECK_LOCAL(localCache, find, Find, key, BitmapRec::Visitor, result);
97 } 104 }
98 105
99 bool SkBitmapCache::Add(uint32_t genID, const SkIRect& subset, const SkBitmap& r esult) { 106 bool SkBitmapCache::Add(uint32_t genID, const SkIRect& subset, const SkBitmap& r esult,
107 SkResourceCache* localCache) {
100 SkASSERT(result.isImmutable()); 108 SkASSERT(result.isImmutable());
101 109
102 if (subset.isEmpty() 110 if (subset.isEmpty()
103 || subset.top() < 0 111 || subset.top() < 0
104 || subset.left() < 0 112 || subset.left() < 0
105 || result.width() != subset.width() 113 || result.width() != subset.width()
106 || result.height() != subset.height()) { 114 || result.height() != subset.height()) {
107 return false; 115 return false;
108 } else { 116 } else {
109 SkResourceCache::Add(SkNEW_ARGS(BitmapRec, (genID, SK_Scalar1, SK_Scalar 1, 117 BitmapRec* rec = SkNEW_ARGS(BitmapRec, (genID, SK_Scalar1, SK_Scalar1, s ubset, result));
110 subset, result)));
111 118
119 CHECK_LOCAL(localCache, add, Add, rec);
112 return true; 120 return true;
113 } 121 }
114 } 122 }
115 //////////////////////////////////////////////////////////////////////////////// ////////// 123 //////////////////////////////////////////////////////////////////////////////// //////////
116 124
117 struct MipMapRec : public SkResourceCache::Rec { 125 struct MipMapRec : public SkResourceCache::Rec {
118 MipMapRec(const SkBitmap& src, const SkMipMap* result) 126 MipMapRec(const SkBitmap& src, const SkMipMap* result)
119 : fKey(src.getGenerationID(), 0, 0, get_bounds_from_bitmap(src)) 127 : fKey(src.getGenerationID(), 0, 0, get_bounds_from_bitmap(src))
120 , fMipMap(SkRef(result)) 128 , fMipMap(SkRef(result))
121 {} 129 {}
(...skipping 26 matching lines...) Expand all
148 } 156 }
149 return result; 157 return result;
150 } 158 }
151 159
152 void SkMipMapCache::Add(const SkBitmap& src, const SkMipMap* result) { 160 void SkMipMapCache::Add(const SkBitmap& src, const SkMipMap* result) {
153 if (result) { 161 if (result) {
154 SkResourceCache::Add(SkNEW_ARGS(MipMapRec, (src, result))); 162 SkResourceCache::Add(SkNEW_ARGS(MipMapRec, (src, result)));
155 } 163 }
156 } 164 }
157 165
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698