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

Side by Side Diff: Source/platform/graphics/ImageDecodingStoreTest.cpp

Issue 485833005: Image decoding: Remove deprecated image caching code (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 4 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 11 matching lines...) Expand all
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */ 24 */
25 25
26 #include "config.h" 26 #include "config.h"
27 27
28 #include "platform/graphics/ImageDecodingStore.h" 28 #include "platform/graphics/ImageDecodingStore.h"
29 29
30 #include "platform/SharedBuffer.h" 30 #include "platform/SharedBuffer.h"
31 #include "platform/graphics/ImageFrameGenerator.h" 31 #include "platform/graphics/ImageFrameGenerator.h"
32 #include "platform/graphics/test/MockDiscardablePixelRef.h"
33 #include "platform/graphics/test/MockImageDecoder.h" 32 #include "platform/graphics/test/MockImageDecoder.h"
34 #include <gtest/gtest.h> 33 #include <gtest/gtest.h>
35 34
36 using namespace blink; 35 using namespace blink;
37 36
38 namespace { 37 namespace {
39 38
40 class ImageDecodingStoreTest : public ::testing::Test, public MockImageDecoderCl ient { 39 class ImageDecodingStoreTest : public ::testing::Test, public MockImageDecoderCl ient {
41 public: 40 public:
42 virtual void SetUp() 41 virtual void SetUp()
43 { 42 {
44 ImageDecodingStore::instance()->setCacheLimitInBytes(1024 * 1024); 43 ImageDecodingStore::instance()->setCacheLimitInBytes(1024 * 1024);
45 ImageDecodingStore::instance()->setImageCachingEnabled(true);
46 m_data = SharedBuffer::create(); 44 m_data = SharedBuffer::create();
47 m_generator = ImageFrameGenerator::create(SkISize::Make(100, 100), m_dat a, true); 45 m_generator = ImageFrameGenerator::create(SkISize::Make(100, 100), m_dat a, true);
48 m_decodersDestroyed = 0; 46 m_decodersDestroyed = 0;
49 } 47 }
50 48
51 virtual void TearDown() 49 virtual void TearDown()
52 { 50 {
53 ImageDecodingStore::instance()->clear(); 51 ImageDecodingStore::instance()->clear();
54 } 52 }
55 53
(...skipping 11 matching lines...) Expand all
67 virtual ImageFrame::Status status() 65 virtual ImageFrame::Status status()
68 { 66 {
69 return ImageFrame::FramePartial; 67 return ImageFrame::FramePartial;
70 } 68 }
71 69
72 virtual size_t frameCount() { return 1; } 70 virtual size_t frameCount() { return 1; }
73 virtual int repetitionCount() const { return cAnimationNone; } 71 virtual int repetitionCount() const { return cAnimationNone; }
74 virtual float frameDuration() const { return 0; } 72 virtual float frameDuration() const { return 0; }
75 73
76 protected: 74 protected:
77 PassOwnPtr<ScaledImageFragment> createCompleteImage(const SkISize& size, boo l discardable = false, size_t index = 0)
78 {
79 SkBitmap bitmap;
80 bitmap.setInfo(SkImageInfo::MakeN32Premul(size));
81 if (!discardable) {
82 bitmap.allocPixels();
83 } else {
84 MockDiscardablePixelRef::Allocator mockDiscardableAllocator;
85 bitmap.allocPixels(&mockDiscardableAllocator, 0);
86 }
87 return ScaledImageFragment::createComplete(size, index, bitmap);
88 }
89
90 PassOwnPtr<ScaledImageFragment> createIncompleteImage(const SkISize& size, b ool discardable = false, size_t generation = 0)
91 {
92 SkBitmap bitmap;
93 bitmap.setInfo(SkImageInfo::MakeN32Premul(size));
94 if (!discardable) {
95 bitmap.allocPixels();
96 } else {
97 MockDiscardablePixelRef::Allocator mockDiscardableAllocator;
98 bitmap.allocPixels(&mockDiscardableAllocator, 0);
99 }
100 return ScaledImageFragment::createPartial(size, 0, generation, bitmap);
101 }
102
103 void insertCache(const SkISize& size)
104 {
105 const ScaledImageFragment* image = ImageDecodingStore::instance()->inser tAndLockCache(
106 m_generator.get(), createCompleteImage(size));
107 unlockCache(image);
108 }
109
110 const ScaledImageFragment* lockCache(const SkISize& size, size_t index = 0)
111 {
112 const ScaledImageFragment* cachedImage = 0;
113 if (ImageDecodingStore::instance()->lockCache(m_generator.get(), size, i ndex, &cachedImage))
114 return cachedImage;
115 return 0;
116 }
117
118 void unlockCache(const ScaledImageFragment* cachedImage)
119 {
120 ImageDecodingStore::instance()->unlockCache(m_generator.get(), cachedIma ge);
121 }
122
123 void evictOneCache() 75 void evictOneCache()
124 { 76 {
125 size_t memoryUsageInBytes = ImageDecodingStore::instance()->memoryUsageI nBytes(); 77 size_t memoryUsageInBytes = ImageDecodingStore::instance()->memoryUsageI nBytes();
126 if (memoryUsageInBytes) 78 if (memoryUsageInBytes)
127 ImageDecodingStore::instance()->setCacheLimitInBytes(memoryUsageInBy tes - 1); 79 ImageDecodingStore::instance()->setCacheLimitInBytes(memoryUsageInBy tes - 1);
128 else 80 else
129 ImageDecodingStore::instance()->setCacheLimitInBytes(0); 81 ImageDecodingStore::instance()->setCacheLimitInBytes(0);
130 } 82 }
131 83
132 bool isCacheAlive(const SkISize& size)
133 {
134 const ScaledImageFragment* cachedImage = lockCache(size);
135 if (!cachedImage)
136 return false;
137 ImageDecodingStore::instance()->unlockCache(m_generator.get(), cachedIma ge);
138 return true;
139 }
140
141 RefPtr<SharedBuffer> m_data; 84 RefPtr<SharedBuffer> m_data;
142 RefPtr<ImageFrameGenerator> m_generator; 85 RefPtr<ImageFrameGenerator> m_generator;
143 int m_decodersDestroyed; 86 int m_decodersDestroyed;
144 }; 87 };
145 88
146 TEST_F(ImageDecodingStoreTest, evictOneCache)
147 {
148 insertCache(SkISize::Make(1, 1));
149 insertCache(SkISize::Make(2, 2));
150 insertCache(SkISize::Make(3, 3));
151 EXPECT_EQ(3, ImageDecodingStore::instance()->cacheEntries());
152
153 evictOneCache();
154 EXPECT_EQ(2, ImageDecodingStore::instance()->cacheEntries());
155
156 evictOneCache();
157 EXPECT_EQ(1, ImageDecodingStore::instance()->cacheEntries());
158 }
159
160 TEST_F(ImageDecodingStoreTest, pruneOrderIsLeastRecentlyUsed)
161 {
162 insertCache(SkISize::Make(1, 1));
163 insertCache(SkISize::Make(2, 2));
164 insertCache(SkISize::Make(3, 3));
165 insertCache(SkISize::Make(4, 4));
166 insertCache(SkISize::Make(5, 5));
167 EXPECT_EQ(5, ImageDecodingStore::instance()->cacheEntries());
168
169 // Use cache in the order 3, 2, 4, 1, 5.
170 EXPECT_TRUE(isCacheAlive(SkISize::Make(3, 3)));
171 EXPECT_TRUE(isCacheAlive(SkISize::Make(2, 2)));
172 EXPECT_TRUE(isCacheAlive(SkISize::Make(4, 4)));
173 EXPECT_TRUE(isCacheAlive(SkISize::Make(1, 1)));
174 EXPECT_TRUE(isCacheAlive(SkISize::Make(5, 5)));
175
176 // Evict 3.
177 evictOneCache();
178 EXPECT_FALSE(isCacheAlive(SkISize::Make(3, 3)));
179 EXPECT_EQ(4, ImageDecodingStore::instance()->cacheEntries());
180
181 // Evict 2.
182 evictOneCache();
183 EXPECT_FALSE(isCacheAlive(SkISize::Make(2, 2)));
184 EXPECT_EQ(3, ImageDecodingStore::instance()->cacheEntries());
185
186 // Evict 4.
187 evictOneCache();
188 EXPECT_FALSE(isCacheAlive(SkISize::Make(4, 4)));
189 EXPECT_EQ(2, ImageDecodingStore::instance()->cacheEntries());
190
191 // Evict 1.
192 evictOneCache();
193 EXPECT_FALSE(isCacheAlive(SkISize::Make(1, 1)));
194 EXPECT_EQ(1, ImageDecodingStore::instance()->cacheEntries());
195
196 // Evict 5.
197 evictOneCache();
198 EXPECT_FALSE(isCacheAlive(SkISize::Make(5, 5)));
199 EXPECT_EQ(0, ImageDecodingStore::instance()->cacheEntries());
200 }
201
202 TEST_F(ImageDecodingStoreTest, pruneCausedByInsertion)
203 {
204 ImageDecodingStore::instance()->setCacheLimitInBytes(100);
205
206 // Insert 100 entries.
207 // Cache entries stored should increase and eventually decrease to 1.
208 insertCache(SkISize::Make(1, 1));
209 insertCache(SkISize::Make(2, 2));
210 insertCache(SkISize::Make(3, 3));
211 EXPECT_EQ(3, ImageDecodingStore::instance()->cacheEntries());
212
213 for (int i = 4; i <= 100; ++i)
214 insertCache(SkISize::Make(i, i));
215
216 EXPECT_EQ(1, ImageDecodingStore::instance()->cacheEntries());
217 for (int i = 1; i <= 99; ++i)
218 EXPECT_FALSE(isCacheAlive(SkISize::Make(i, i)));
219 EXPECT_TRUE(isCacheAlive(SkISize::Make(100, 100)));
220 }
221
222 TEST_F(ImageDecodingStoreTest, cacheInUseNotEvicted)
223 {
224 insertCache(SkISize::Make(1, 1));
225 insertCache(SkISize::Make(2, 2));
226 insertCache(SkISize::Make(3, 3));
227 EXPECT_EQ(3, ImageDecodingStore::instance()->cacheEntries());
228
229 const ScaledImageFragment* cachedImage = lockCache(SkISize::Make(1, 1));
230 ASSERT_TRUE(cachedImage);
231
232 // Cache 2 is evicted because cache 1 is in use.
233 evictOneCache();
234 EXPECT_TRUE(isCacheAlive(SkISize::Make(1, 1)));
235 EXPECT_FALSE(isCacheAlive(SkISize::Make(2, 2)));
236 EXPECT_TRUE(isCacheAlive(SkISize::Make(3, 3)));
237
238 EXPECT_EQ(2, ImageDecodingStore::instance()->cacheEntries());
239 unlockCache(cachedImage);
240 }
241
242 TEST_F(ImageDecodingStoreTest, destroyImageFrameGenerator)
243 {
244 insertCache(SkISize::Make(1, 1));
245 insertCache(SkISize::Make(2, 2));
246 insertCache(SkISize::Make(3, 3));
247 OwnPtr<ImageDecoder> decoder = MockImageDecoder::create(this);
248 decoder->setSize(1, 1);
249 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder.rel ease(), false);
250 EXPECT_EQ(4, ImageDecodingStore::instance()->cacheEntries());
251
252 m_generator.clear();
253 EXPECT_FALSE(ImageDecodingStore::instance()->cacheEntries());
254 }
255
256 TEST_F(ImageDecodingStoreTest, insertDecoder) 89 TEST_F(ImageDecodingStoreTest, insertDecoder)
257 { 90 {
258 const SkISize size = SkISize::Make(1, 1); 91 const SkISize size = SkISize::Make(1, 1);
259 OwnPtr<ImageDecoder> decoder = MockImageDecoder::create(this); 92 OwnPtr<ImageDecoder> decoder = MockImageDecoder::create(this);
260 decoder->setSize(1, 1); 93 decoder->setSize(1, 1);
261 const ImageDecoder* refDecoder = decoder.get(); 94 const ImageDecoder* refDecoder = decoder.get();
262 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder.rel ease(), false); 95 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder.rel ease());
263 EXPECT_EQ(1, ImageDecodingStore::instance()->cacheEntries()); 96 EXPECT_EQ(1, ImageDecodingStore::instance()->cacheEntries());
264 EXPECT_EQ(4u, ImageDecodingStore::instance()->memoryUsageInBytes()); 97 EXPECT_EQ(4u, ImageDecodingStore::instance()->memoryUsageInBytes());
265 98
266 ImageDecoder* testDecoder; 99 ImageDecoder* testDecoder;
267 EXPECT_TRUE(ImageDecodingStore::instance()->lockDecoder(m_generator.get(), s ize, &testDecoder)); 100 EXPECT_TRUE(ImageDecodingStore::instance()->lockDecoder(m_generator.get(), s ize, &testDecoder));
268 EXPECT_TRUE(testDecoder); 101 EXPECT_TRUE(testDecoder);
269 EXPECT_EQ(refDecoder, testDecoder); 102 EXPECT_EQ(refDecoder, testDecoder);
270 ImageDecodingStore::instance()->unlockDecoder(m_generator.get(), testDecoder ); 103 ImageDecodingStore::instance()->unlockDecoder(m_generator.get(), testDecoder );
271 EXPECT_EQ(1, ImageDecodingStore::instance()->cacheEntries()); 104 EXPECT_EQ(1, ImageDecodingStore::instance()->cacheEntries());
272 } 105 }
273 106
274 TEST_F(ImageDecodingStoreTest, evictDecoder) 107 TEST_F(ImageDecodingStoreTest, evictDecoder)
275 { 108 {
276 OwnPtr<ImageDecoder> decoder1 = MockImageDecoder::create(this); 109 OwnPtr<ImageDecoder> decoder1 = MockImageDecoder::create(this);
277 OwnPtr<ImageDecoder> decoder2 = MockImageDecoder::create(this); 110 OwnPtr<ImageDecoder> decoder2 = MockImageDecoder::create(this);
278 OwnPtr<ImageDecoder> decoder3 = MockImageDecoder::create(this); 111 OwnPtr<ImageDecoder> decoder3 = MockImageDecoder::create(this);
279 decoder1->setSize(1, 1); 112 decoder1->setSize(1, 1);
280 decoder2->setSize(2, 2); 113 decoder2->setSize(2, 2);
281 decoder3->setSize(3, 3); 114 decoder3->setSize(3, 3);
282 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder1.re lease(), false); 115 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder1.re lease());
283 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder2.re lease(), false); 116 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder2.re lease());
284 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder3.re lease(), false); 117 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder3.re lease());
285 EXPECT_EQ(3, ImageDecodingStore::instance()->cacheEntries()); 118 EXPECT_EQ(3, ImageDecodingStore::instance()->cacheEntries());
286 EXPECT_EQ(56u, ImageDecodingStore::instance()->memoryUsageInBytes()); 119 EXPECT_EQ(56u, ImageDecodingStore::instance()->memoryUsageInBytes());
287 120
288 evictOneCache(); 121 evictOneCache();
289 EXPECT_EQ(2, ImageDecodingStore::instance()->cacheEntries()); 122 EXPECT_EQ(2, ImageDecodingStore::instance()->cacheEntries());
290 EXPECT_EQ(52u, ImageDecodingStore::instance()->memoryUsageInBytes()); 123 EXPECT_EQ(52u, ImageDecodingStore::instance()->memoryUsageInBytes());
291 124
292 evictOneCache(); 125 evictOneCache();
293 EXPECT_EQ(1, ImageDecodingStore::instance()->cacheEntries()); 126 EXPECT_EQ(1, ImageDecodingStore::instance()->cacheEntries());
294 EXPECT_EQ(36u, ImageDecodingStore::instance()->memoryUsageInBytes()); 127 EXPECT_EQ(36u, ImageDecodingStore::instance()->memoryUsageInBytes());
295 128
296 evictOneCache(); 129 evictOneCache();
297 EXPECT_FALSE(ImageDecodingStore::instance()->cacheEntries()); 130 EXPECT_FALSE(ImageDecodingStore::instance()->cacheEntries());
298 EXPECT_FALSE(ImageDecodingStore::instance()->memoryUsageInBytes()); 131 EXPECT_FALSE(ImageDecodingStore::instance()->memoryUsageInBytes());
299 } 132 }
300 133
301 TEST_F(ImageDecodingStoreTest, decoderInUseNotEvicted) 134 TEST_F(ImageDecodingStoreTest, decoderInUseNotEvicted)
302 { 135 {
303 OwnPtr<ImageDecoder> decoder1 = MockImageDecoder::create(this); 136 OwnPtr<ImageDecoder> decoder1 = MockImageDecoder::create(this);
304 OwnPtr<ImageDecoder> decoder2 = MockImageDecoder::create(this); 137 OwnPtr<ImageDecoder> decoder2 = MockImageDecoder::create(this);
305 OwnPtr<ImageDecoder> decoder3 = MockImageDecoder::create(this); 138 OwnPtr<ImageDecoder> decoder3 = MockImageDecoder::create(this);
306 decoder1->setSize(1, 1); 139 decoder1->setSize(1, 1);
307 decoder2->setSize(2, 2); 140 decoder2->setSize(2, 2);
308 decoder3->setSize(3, 3); 141 decoder3->setSize(3, 3);
309 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder1.re lease(), false); 142 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder1.re lease());
310 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder2.re lease(), false); 143 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder2.re lease());
311 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder3.re lease(), false); 144 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder3.re lease());
312 EXPECT_EQ(3, ImageDecodingStore::instance()->cacheEntries()); 145 EXPECT_EQ(3, ImageDecodingStore::instance()->cacheEntries());
313 146
314 ImageDecoder* testDecoder; 147 ImageDecoder* testDecoder;
315 EXPECT_TRUE(ImageDecodingStore::instance()->lockDecoder(m_generator.get(), S kISize::Make(2, 2), &testDecoder)); 148 EXPECT_TRUE(ImageDecodingStore::instance()->lockDecoder(m_generator.get(), S kISize::Make(2, 2), &testDecoder));
316 149
317 evictOneCache(); 150 evictOneCache();
318 evictOneCache(); 151 evictOneCache();
319 evictOneCache(); 152 evictOneCache();
320 EXPECT_EQ(1, ImageDecodingStore::instance()->cacheEntries()); 153 EXPECT_EQ(1, ImageDecodingStore::instance()->cacheEntries());
321 EXPECT_EQ(16u, ImageDecodingStore::instance()->memoryUsageInBytes()); 154 EXPECT_EQ(16u, ImageDecodingStore::instance()->memoryUsageInBytes());
322 155
323 ImageDecodingStore::instance()->unlockDecoder(m_generator.get(), testDecoder ); 156 ImageDecodingStore::instance()->unlockDecoder(m_generator.get(), testDecoder );
324 evictOneCache(); 157 evictOneCache();
325 EXPECT_FALSE(ImageDecodingStore::instance()->cacheEntries()); 158 EXPECT_FALSE(ImageDecodingStore::instance()->cacheEntries());
326 EXPECT_FALSE(ImageDecodingStore::instance()->memoryUsageInBytes()); 159 EXPECT_FALSE(ImageDecodingStore::instance()->memoryUsageInBytes());
327 } 160 }
328 161
329 TEST_F(ImageDecodingStoreTest, removeDecoder) 162 TEST_F(ImageDecodingStoreTest, removeDecoder)
330 { 163 {
331 const SkISize size = SkISize::Make(1, 1); 164 const SkISize size = SkISize::Make(1, 1);
332 OwnPtr<ImageDecoder> decoder = MockImageDecoder::create(this); 165 OwnPtr<ImageDecoder> decoder = MockImageDecoder::create(this);
333 decoder->setSize(1, 1); 166 decoder->setSize(1, 1);
334 const ImageDecoder* refDecoder = decoder.get(); 167 const ImageDecoder* refDecoder = decoder.get();
335 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder.rel ease(), false); 168 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder.rel ease());
336 EXPECT_EQ(1, ImageDecodingStore::instance()->cacheEntries()); 169 EXPECT_EQ(1, ImageDecodingStore::instance()->cacheEntries());
337 EXPECT_EQ(4u, ImageDecodingStore::instance()->memoryUsageInBytes()); 170 EXPECT_EQ(4u, ImageDecodingStore::instance()->memoryUsageInBytes());
338 171
339 ImageDecoder* testDecoder; 172 ImageDecoder* testDecoder;
340 EXPECT_TRUE(ImageDecodingStore::instance()->lockDecoder(m_generator.get(), s ize, &testDecoder)); 173 EXPECT_TRUE(ImageDecodingStore::instance()->lockDecoder(m_generator.get(), s ize, &testDecoder));
341 EXPECT_TRUE(testDecoder); 174 EXPECT_TRUE(testDecoder);
342 EXPECT_EQ(refDecoder, testDecoder); 175 EXPECT_EQ(refDecoder, testDecoder);
343 ImageDecodingStore::instance()->removeDecoder(m_generator.get(), testDecoder ); 176 ImageDecodingStore::instance()->removeDecoder(m_generator.get(), testDecoder );
344 EXPECT_FALSE(ImageDecodingStore::instance()->cacheEntries()); 177 EXPECT_FALSE(ImageDecodingStore::instance()->cacheEntries());
345 178
346 EXPECT_FALSE(ImageDecodingStore::instance()->lockDecoder(m_generator.get(), size, &testDecoder)); 179 EXPECT_FALSE(ImageDecodingStore::instance()->lockDecoder(m_generator.get(), size, &testDecoder));
347 } 180 }
348 181
349 TEST_F(ImageDecodingStoreTest, multipleIndex)
350 {
351 const SkISize size = SkISize::Make(1, 1);
352 const ScaledImageFragment* refImage = ImageDecodingStore::instance()->insert AndLockCache(
353 m_generator.get(), createCompleteImage(size, false, 0));
354 unlockCache(refImage);
355 const ScaledImageFragment* testImage = ImageDecodingStore::instance()->inser tAndLockCache(
356 m_generator.get(), createCompleteImage(size, false, 1));
357 unlockCache(testImage);
358 EXPECT_NE(refImage, testImage);
359 EXPECT_EQ(2, ImageDecodingStore::instance()->cacheEntries());
360
361 EXPECT_TRUE(ImageDecodingStore::instance()->lockCache(m_generator.get(), siz e, 1, &refImage));
362 EXPECT_EQ(refImage, testImage);
363 unlockCache(refImage);
364 }
365
366 TEST_F(ImageDecodingStoreTest, finalAndPartialImage)
367 {
368 const SkISize size = SkISize::Make(1, 1);
369 const ScaledImageFragment* refImage = ImageDecodingStore::instance()->insert AndLockCache(
370 m_generator.get(), createCompleteImage(size, false, 0));
371 unlockCache(refImage);
372 const ScaledImageFragment* testImage = ImageDecodingStore::instance()->inser tAndLockCache(
373 m_generator.get(), createIncompleteImage(size, false, 1));
374 unlockCache(testImage);
375 EXPECT_NE(refImage, testImage);
376 EXPECT_EQ(2, ImageDecodingStore::instance()->cacheEntries());
377
378 EXPECT_TRUE(ImageDecodingStore::instance()->lockCache(m_generator.get(), siz e, 0, &refImage));
379 EXPECT_NE(refImage, testImage);
380 unlockCache(refImage);
381 }
382
383 TEST_F(ImageDecodingStoreTest, insertNoGenerationCollision)
384 {
385 const SkISize size = SkISize::Make(1, 1);
386 const ScaledImageFragment* refImage = ImageDecodingStore::instance()->insert AndLockCache(
387 m_generator.get(), createIncompleteImage(size, false, 1));
388 unlockCache(refImage);
389 const ScaledImageFragment* testImage = ImageDecodingStore::instance()->inser tAndLockCache(
390 m_generator.get(), createIncompleteImage(size, false, 2));
391 unlockCache(testImage);
392 EXPECT_NE(refImage, testImage);
393 EXPECT_EQ(2, ImageDecodingStore::instance()->cacheEntries());
394 }
395
396 TEST_F(ImageDecodingStoreTest, insertGenerationCollision)
397 {
398 const SkISize size = SkISize::Make(1, 1);
399 const ScaledImageFragment* refImage = ImageDecodingStore::instance()->insert AndLockCache(
400 m_generator.get(), createIncompleteImage(size, false, 1));
401 unlockCache(refImage);
402 const ScaledImageFragment* testImage = ImageDecodingStore::instance()->inser tAndLockCache(
403 m_generator.get(), createIncompleteImage(size, false, 1));
404 unlockCache(testImage);
405 EXPECT_EQ(refImage, testImage);
406 EXPECT_EQ(1, ImageDecodingStore::instance()->cacheEntries());
407 }
408
409 TEST_F(ImageDecodingStoreTest, insertGenerationCollisionAfterMemoryDiscarded)
410 {
411 const SkISize size = SkISize::Make(1, 1);
412 const ScaledImageFragment* refImage = ImageDecodingStore::instance()->insert AndLockCache(
413 m_generator.get(), createIncompleteImage(size, true, 1));
414 unlockCache(refImage);
415 MockDiscardablePixelRef* pixelRef = static_cast<MockDiscardablePixelRef*>(re fImage->bitmap().pixelRef());
416 pixelRef->discard();
417 const ScaledImageFragment* testImage = ImageDecodingStore::instance()->inser tAndLockCache(
418 m_generator.get(), createIncompleteImage(size, false, 1));
419 unlockCache(testImage);
420 EXPECT_NE(refImage, testImage);
421 EXPECT_EQ(1, ImageDecodingStore::instance()->cacheEntries());
422 }
423
424 TEST_F(ImageDecodingStoreTest, lockCacheFailedAfterMemoryDiscarded)
425 {
426 const ScaledImageFragment* cachedImage = ImageDecodingStore::instance()->ins ertAndLockCache(
427 m_generator.get(), createCompleteImage(SkISize::Make(1, 1), true));
428 unlockCache(cachedImage);
429 MockDiscardablePixelRef* pixelRef = static_cast<MockDiscardablePixelRef*>(ca chedImage->bitmap().pixelRef());
430 pixelRef->discard();
431 EXPECT_EQ(0, lockCache(SkISize::Make(1, 1)));
432 EXPECT_EQ(0, ImageDecodingStore::instance()->cacheEntries());
433 }
434
435 TEST_F(ImageDecodingStoreTest, clear)
436 {
437 insertCache(SkISize::Make(1, 1));
438 insertCache(SkISize::Make(2, 2));
439 EXPECT_EQ(2, ImageDecodingStore::instance()->cacheEntries());
440
441 OwnPtr<ImageDecoder> decoder = MockImageDecoder::create(this);
442 decoder->setSize(1, 1);
443 ImageDecodingStore::instance()->insertDecoder(m_generator.get(), decoder.rel ease(), false);
444 EXPECT_EQ(3, ImageDecodingStore::instance()->cacheEntries());
445
446 ImageDecodingStore::instance()->clear();
447 EXPECT_EQ(0, ImageDecodingStore::instance()->cacheEntries());
448 }
449
450 TEST_F(ImageDecodingStoreTest, clearInUse)
451 {
452 insertCache(SkISize::Make(1, 1));
453 insertCache(SkISize::Make(2, 2));
454 EXPECT_EQ(2, ImageDecodingStore::instance()->cacheEntries());
455
456 const ScaledImageFragment* cachedImage = lockCache(SkISize::Make(1, 1));
457 ASSERT_TRUE(cachedImage);
458 ImageDecodingStore::instance()->clear();
459 EXPECT_EQ(1, ImageDecodingStore::instance()->cacheEntries());
460
461 unlockCache(cachedImage);
462 EXPECT_EQ(1, ImageDecodingStore::instance()->cacheEntries());
463 }
464
465 TEST_F(ImageDecodingStoreTest, disableImageCaching)
466 {
467 ImageDecodingStore::instance()->setImageCachingEnabled(false);
468 insertCache(SkISize::Make(1, 1));
469 insertCache(SkISize::Make(2, 2));
470 EXPECT_EQ(0, ImageDecodingStore::instance()->cacheEntries());
471
472 const ScaledImageFragment* cachedImage = ImageDecodingStore::instance()->ins ertAndLockCache(
473 m_generator.get(), createCompleteImage(SkISize::Make(3, 3), true));
474 EXPECT_EQ(1, ImageDecodingStore::instance()->cacheEntries());
475 unlockCache(cachedImage);
476 EXPECT_EQ(0, ImageDecodingStore::instance()->cacheEntries());
477 }
478
479 } // namespace 182 } // namespace
OLDNEW
« no previous file with comments | « Source/platform/graphics/ImageDecodingStore.cpp ('k') | Source/platform/graphics/ImageFrameGenerator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698