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

Side by Side Diff: tests/ImageFilterCacheTest.cpp

Issue 1812023002: Switch SkSpecialImage & SkSpecialSurface classes over to smart pointers (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix build Created 4 years, 9 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
« no previous file with comments | « src/gpu/GrLayerHoister.cpp ('k') | tests/ImageFilterTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2016 Google Inc. 2 * Copyright 2016 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 "Test.h" 8 #include "Test.h"
9 9
10 #include "SkBitmap.h" 10 #include "SkBitmap.h"
11 #include "SkImage.h" 11 #include "SkImage.h"
12 #include "SkImageFilter.h" 12 #include "SkImageFilter.h"
13 #include "SkImageFilterCacheKey.h" 13 #include "SkImageFilterCacheKey.h"
14 #include "SkMatrix.h" 14 #include "SkMatrix.h"
15 #include "SkSpecialImage.h" 15 #include "SkSpecialImage.h"
16 16
17 static const int kSmallerSize = 10; 17 static const int kSmallerSize = 10;
18 static const int kPad = 3; 18 static const int kPad = 3;
19 static const int kFullSize = kSmallerSize + 2 * kPad; 19 static const int kFullSize = kSmallerSize + 2 * kPad;
20 20
21 static SkBitmap create_bm() { 21 static SkBitmap create_bm() {
22 SkBitmap bm; 22 SkBitmap bm;
23 bm.allocN32Pixels(kFullSize, kFullSize, true); 23 bm.allocN32Pixels(kFullSize, kFullSize, true);
24 bm.eraseColor(SK_ColorTRANSPARENT); 24 bm.eraseColor(SK_ColorTRANSPARENT);
25 return bm; 25 return bm;
26 } 26 }
27 27
28 // Ensure the cache can return a cached image 28 // Ensure the cache can return a cached image
29 static void test_find_existing(skiatest::Reporter* reporter, 29 static void test_find_existing(skiatest::Reporter* reporter,
30 SkSpecialImage* image, 30 const sk_sp<SkSpecialImage>& image,
31 SkSpecialImage* subset) { 31 const sk_sp<SkSpecialImage>& subset) {
32 static const size_t kCacheSize = 1000000; 32 static const size_t kCacheSize = 1000000;
33 SkAutoTUnref<SkImageFilter::Cache> cache(SkImageFilter::Cache::Create(kCache Size)); 33 SkAutoTUnref<SkImageFilter::Cache> cache(SkImageFilter::Cache::Create(kCache Size));
34 34
35 SkIRect clip = SkIRect::MakeWH(100, 100); 35 SkIRect clip = SkIRect::MakeWH(100, 100);
36 SkImageFilter::Cache::Key key1(0, SkMatrix::I(), clip, image->uniqueID(), im age->subset()); 36 SkImageFilter::Cache::Key key1(0, SkMatrix::I(), clip, image->uniqueID(), im age->subset());
37 SkImageFilter::Cache::Key key2(0, SkMatrix::I(), clip, subset->uniqueID(), s ubset->subset()); 37 SkImageFilter::Cache::Key key2(0, SkMatrix::I(), clip, subset->uniqueID(), s ubset->subset());
38 38
39 SkIPoint offset = SkIPoint::Make(3, 4); 39 SkIPoint offset = SkIPoint::Make(3, 4);
40 cache->set(key1, image, offset); 40 cache->set(key1, image.get(), offset);
41 41
42 SkIPoint foundOffset; 42 SkIPoint foundOffset;
43 43
44 SkSpecialImage* foundImage = cache->get(key1, &foundOffset); 44 SkSpecialImage* foundImage = cache->get(key1, &foundOffset);
45 REPORTER_ASSERT(reporter, foundImage); 45 REPORTER_ASSERT(reporter, foundImage);
46 REPORTER_ASSERT(reporter, offset == foundOffset); 46 REPORTER_ASSERT(reporter, offset == foundOffset);
47 47
48 REPORTER_ASSERT(reporter, !cache->get(key2, &foundOffset)); 48 REPORTER_ASSERT(reporter, !cache->get(key2, &foundOffset));
49 } 49 }
50 50
51 // If either id is different or the clip or the matrix are different the 51 // If either id is different or the clip or the matrix are different the
52 // cached image won't be found. Even if it is caching the same bitmap. 52 // cached image won't be found. Even if it is caching the same bitmap.
53 static void test_dont_find_if_diff_key(skiatest::Reporter* reporter, 53 static void test_dont_find_if_diff_key(skiatest::Reporter* reporter,
54 SkSpecialImage* image, 54 const sk_sp<SkSpecialImage>& image,
55 SkSpecialImage* subset) { 55 const sk_sp<SkSpecialImage>& subset) {
56 static const size_t kCacheSize = 1000000; 56 static const size_t kCacheSize = 1000000;
57 SkAutoTUnref<SkImageFilter::Cache> cache(SkImageFilter::Cache::Create(kCache Size)); 57 SkAutoTUnref<SkImageFilter::Cache> cache(SkImageFilter::Cache::Create(kCache Size));
58 58
59 SkIRect clip1 = SkIRect::MakeWH(100, 100); 59 SkIRect clip1 = SkIRect::MakeWH(100, 100);
60 SkIRect clip2 = SkIRect::MakeWH(200, 200); 60 SkIRect clip2 = SkIRect::MakeWH(200, 200);
61 SkImageFilter::Cache::Key key0(0, SkMatrix::I(), clip1, image->uniqueID(), i mage->subset()); 61 SkImageFilter::Cache::Key key0(0, SkMatrix::I(), clip1, image->uniqueID(), i mage->subset());
62 SkImageFilter::Cache::Key key1(1, SkMatrix::I(), clip1, image->uniqueID(), i mage->subset()); 62 SkImageFilter::Cache::Key key1(1, SkMatrix::I(), clip1, image->uniqueID(), i mage->subset());
63 SkImageFilter::Cache::Key key2(0, SkMatrix::MakeTrans(5, 5), clip1, 63 SkImageFilter::Cache::Key key2(0, SkMatrix::MakeTrans(5, 5), clip1,
64 image->uniqueID(), image->subset()); 64 image->uniqueID(), image->subset());
65 SkImageFilter::Cache::Key key3(0, SkMatrix::I(), clip2, image->uniqueID(), i mage->subset()); 65 SkImageFilter::Cache::Key key3(0, SkMatrix::I(), clip2, image->uniqueID(), i mage->subset());
66 SkImageFilter::Cache::Key key4(0, SkMatrix::I(), clip1, subset->uniqueID(), subset->subset()); 66 SkImageFilter::Cache::Key key4(0, SkMatrix::I(), clip1, subset->uniqueID(), subset->subset());
67 67
68 SkIPoint offset = SkIPoint::Make(3, 4); 68 SkIPoint offset = SkIPoint::Make(3, 4);
69 cache->set(key0, image, offset); 69 cache->set(key0, image.get(), offset);
70 70
71 SkIPoint foundOffset; 71 SkIPoint foundOffset;
72 REPORTER_ASSERT(reporter, !cache->get(key1, &foundOffset)); 72 REPORTER_ASSERT(reporter, !cache->get(key1, &foundOffset));
73 REPORTER_ASSERT(reporter, !cache->get(key2, &foundOffset)); 73 REPORTER_ASSERT(reporter, !cache->get(key2, &foundOffset));
74 REPORTER_ASSERT(reporter, !cache->get(key3, &foundOffset)); 74 REPORTER_ASSERT(reporter, !cache->get(key3, &foundOffset));
75 REPORTER_ASSERT(reporter, !cache->get(key4, &foundOffset)); 75 REPORTER_ASSERT(reporter, !cache->get(key4, &foundOffset));
76 } 76 }
77 77
78 // Test purging when the max cache size is exceeded 78 // Test purging when the max cache size is exceeded
79 static void test_internal_purge(skiatest::Reporter* reporter, SkSpecialImage* im age) { 79 static void test_internal_purge(skiatest::Reporter* reporter, const sk_sp<SkSpec ialImage>& image) {
80 SkASSERT(image->getSize()); 80 SkASSERT(image->getSize());
81 const size_t kCacheSize = image->getSize() + 10; 81 const size_t kCacheSize = image->getSize() + 10;
82 SkAutoTUnref<SkImageFilter::Cache> cache(SkImageFilter::Cache::Create(kCache Size)); 82 SkAutoTUnref<SkImageFilter::Cache> cache(SkImageFilter::Cache::Create(kCache Size));
83 83
84 SkIRect clip = SkIRect::MakeWH(100, 100); 84 SkIRect clip = SkIRect::MakeWH(100, 100);
85 SkImageFilter::Cache::Key key1(0, SkMatrix::I(), clip, image->uniqueID(), im age->subset()); 85 SkImageFilter::Cache::Key key1(0, SkMatrix::I(), clip, image->uniqueID(), im age->subset());
86 SkImageFilter::Cache::Key key2(1, SkMatrix::I(), clip, image->uniqueID(), im age->subset()); 86 SkImageFilter::Cache::Key key2(1, SkMatrix::I(), clip, image->uniqueID(), im age->subset());
87 87
88 SkIPoint offset = SkIPoint::Make(3, 4); 88 SkIPoint offset = SkIPoint::Make(3, 4);
89 cache->set(key1, image, offset); 89 cache->set(key1, image.get(), offset);
90 90
91 SkIPoint foundOffset; 91 SkIPoint foundOffset;
92 92
93 REPORTER_ASSERT(reporter, cache->get(key1, &foundOffset)); 93 REPORTER_ASSERT(reporter, cache->get(key1, &foundOffset));
94 94
95 // This should knock the first one out of the cache 95 // This should knock the first one out of the cache
96 cache->set(key2, image, offset); 96 cache->set(key2, image.get(), offset);
97 97
98 REPORTER_ASSERT(reporter, cache->get(key2, &foundOffset)); 98 REPORTER_ASSERT(reporter, cache->get(key2, &foundOffset));
99 REPORTER_ASSERT(reporter, !cache->get(key1, &foundOffset)); 99 REPORTER_ASSERT(reporter, !cache->get(key1, &foundOffset));
100 } 100 }
101 101
102 // Exercise the purgeByKeys and purge methods 102 // Exercise the purgeByKeys and purge methods
103 static void test_explicit_purging(skiatest::Reporter* reporter, 103 static void test_explicit_purging(skiatest::Reporter* reporter,
104 SkSpecialImage* image, 104 const sk_sp<SkSpecialImage>& image,
105 SkSpecialImage* subset) { 105 const sk_sp<SkSpecialImage>& subset) {
106 static const size_t kCacheSize = 1000000; 106 static const size_t kCacheSize = 1000000;
107 SkAutoTUnref<SkImageFilter::Cache> cache(SkImageFilter::Cache::Create(kCache Size)); 107 SkAutoTUnref<SkImageFilter::Cache> cache(SkImageFilter::Cache::Create(kCache Size));
108 108
109 SkIRect clip = SkIRect::MakeWH(100, 100); 109 SkIRect clip = SkIRect::MakeWH(100, 100);
110 SkImageFilter::Cache::Key key1(0, SkMatrix::I(), clip, image->uniqueID(), im age->subset()); 110 SkImageFilter::Cache::Key key1(0, SkMatrix::I(), clip, image->uniqueID(), im age->subset());
111 SkImageFilter::Cache::Key key2(1, SkMatrix::I(), clip, subset->uniqueID(), i mage->subset()); 111 SkImageFilter::Cache::Key key2(1, SkMatrix::I(), clip, subset->uniqueID(), i mage->subset());
112 112
113 SkIPoint offset = SkIPoint::Make(3, 4); 113 SkIPoint offset = SkIPoint::Make(3, 4);
114 cache->set(key1, image, offset); 114 cache->set(key1, image.get(), offset);
115 cache->set(key2, image, offset); 115 cache->set(key2, image.get(), offset);
116 116
117 SkIPoint foundOffset; 117 SkIPoint foundOffset;
118 118
119 REPORTER_ASSERT(reporter, cache->get(key1, &foundOffset)); 119 REPORTER_ASSERT(reporter, cache->get(key1, &foundOffset));
120 REPORTER_ASSERT(reporter, cache->get(key2, &foundOffset)); 120 REPORTER_ASSERT(reporter, cache->get(key2, &foundOffset));
121 121
122 cache->purgeByKeys(&key1, 1); 122 cache->purgeByKeys(&key1, 1);
123 123
124 REPORTER_ASSERT(reporter, !cache->get(key1, &foundOffset)); 124 REPORTER_ASSERT(reporter, !cache->get(key1, &foundOffset));
125 REPORTER_ASSERT(reporter, cache->get(key2, &foundOffset)); 125 REPORTER_ASSERT(reporter, cache->get(key2, &foundOffset));
126 126
127 cache->purge(); 127 cache->purge();
128 128
129 REPORTER_ASSERT(reporter, !cache->get(key1, &foundOffset)); 129 REPORTER_ASSERT(reporter, !cache->get(key1, &foundOffset));
130 REPORTER_ASSERT(reporter, !cache->get(key2, &foundOffset)); 130 REPORTER_ASSERT(reporter, !cache->get(key2, &foundOffset));
131 } 131 }
132 132
133 DEF_TEST(ImageFilterCache_RasterBacked, reporter) { 133 DEF_TEST(ImageFilterCache_RasterBacked, reporter) {
134 SkBitmap srcBM = create_bm(); 134 SkBitmap srcBM = create_bm();
135 135
136 const SkIRect& full = SkIRect::MakeWH(kFullSize, kFullSize); 136 const SkIRect& full = SkIRect::MakeWH(kFullSize, kFullSize);
137 137
138 SkAutoTUnref<SkSpecialImage> fullImg(SkSpecialImage::NewFromRaster(nullptr, full, srcBM)); 138 sk_sp<SkSpecialImage> fullImg(SkSpecialImage::MakeFromRaster(nullptr, full, srcBM));
139 139
140 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller Size); 140 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller Size);
141 141
142 SkAutoTUnref<SkSpecialImage> subsetImg(SkSpecialImage::NewFromRaster(nullptr , subset, srcBM)); 142 sk_sp<SkSpecialImage> subsetImg(SkSpecialImage::MakeFromRaster(nullptr, subs et, srcBM));
143 143
144 test_find_existing(reporter, fullImg, subsetImg); 144 test_find_existing(reporter, fullImg, subsetImg);
145 test_dont_find_if_diff_key(reporter, fullImg, subsetImg); 145 test_dont_find_if_diff_key(reporter, fullImg, subsetImg);
146 test_internal_purge(reporter, fullImg); 146 test_internal_purge(reporter, fullImg);
147 test_explicit_purging(reporter, fullImg, subsetImg); 147 test_explicit_purging(reporter, fullImg, subsetImg);
148 } 148 }
149 149
150 150
151 // Shared test code for both the raster and gpu-backed image cases 151 // Shared test code for both the raster and gpu-backed image cases
152 static void test_image_backed(skiatest::Reporter* reporter, SkImage* srcImage) { 152 static void test_image_backed(skiatest::Reporter* reporter, const sk_sp<SkImage> & srcImage) {
153 const SkIRect& full = SkIRect::MakeWH(kFullSize, kFullSize); 153 const SkIRect& full = SkIRect::MakeWH(kFullSize, kFullSize);
154 154
155 SkAutoTUnref<SkSpecialImage> fullImg(SkSpecialImage::NewFromImage(nullptr, f ull, srcImage)); 155 sk_sp<SkSpecialImage> fullImg(SkSpecialImage::MakeFromImage(nullptr, full, s rcImage));
156 156
157 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller Size); 157 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller Size);
158 158
159 SkAutoTUnref<SkSpecialImage> subsetImg(SkSpecialImage::NewFromImage(nullptr, 159 sk_sp<SkSpecialImage> subsetImg(SkSpecialImage::MakeFromImage(nullptr, subse t, srcImage));
160 subset,
161 srcImage ));
162 160
163 test_find_existing(reporter, fullImg, subsetImg); 161 test_find_existing(reporter, fullImg, subsetImg);
164 test_dont_find_if_diff_key(reporter, fullImg, subsetImg); 162 test_dont_find_if_diff_key(reporter, fullImg, subsetImg);
165 test_internal_purge(reporter, fullImg); 163 test_internal_purge(reporter, fullImg);
166 test_explicit_purging(reporter, fullImg, subsetImg); 164 test_explicit_purging(reporter, fullImg, subsetImg);
167 } 165 }
168 166
169 DEF_TEST(ImageFilterCache_ImageBackedRaster, reporter) { 167 DEF_TEST(ImageFilterCache_ImageBackedRaster, reporter) {
170 SkBitmap srcBM = create_bm(); 168 SkBitmap srcBM = create_bm();
171 169
172 sk_sp<SkImage> srcImage(SkImage::MakeFromBitmap(srcBM)); 170 sk_sp<SkImage> srcImage(SkImage::MakeFromBitmap(srcBM));
173 171
174 test_image_backed(reporter, srcImage.get()); 172 test_image_backed(reporter, srcImage);
175 } 173 }
176 174
177 #if SK_SUPPORT_GPU 175 #if SK_SUPPORT_GPU
178 #include "GrContext.h" 176 #include "GrContext.h"
179 177
180 static GrTexture* create_texture(GrContext* context) { 178 static GrTexture* create_texture(GrContext* context) {
181 SkBitmap srcBM = create_bm(); 179 SkBitmap srcBM = create_bm();
182 180
183 GrSurfaceDesc desc; 181 GrSurfaceDesc desc;
184 desc.fConfig = kSkia8888_GrPixelConfig; 182 desc.fConfig = kSkia8888_GrPixelConfig;
(...skipping 15 matching lines...) Expand all
200 backendDesc.fFlags = kNone_GrBackendTextureFlag; 198 backendDesc.fFlags = kNone_GrBackendTextureFlag;
201 backendDesc.fWidth = kFullSize; 199 backendDesc.fWidth = kFullSize;
202 backendDesc.fHeight = kFullSize; 200 backendDesc.fHeight = kFullSize;
203 backendDesc.fSampleCnt = 0; 201 backendDesc.fSampleCnt = 0;
204 backendDesc.fTextureHandle = srcTexture->getTextureHandle(); 202 backendDesc.fTextureHandle = srcTexture->getTextureHandle();
205 sk_sp<SkImage> srcImage(SkImage::MakeFromTexture(context, backendDesc, kPrem ul_SkAlphaType)); 203 sk_sp<SkImage> srcImage(SkImage::MakeFromTexture(context, backendDesc, kPrem ul_SkAlphaType));
206 if (!srcImage) { 204 if (!srcImage) {
207 return; 205 return;
208 } 206 }
209 207
210 test_image_backed(reporter, srcImage.get()); 208 test_image_backed(reporter, srcImage);
211 } 209 }
212 210
213 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageFilterCache_GPUBacked, reporter, context ) { 211 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageFilterCache_GPUBacked, reporter, context ) {
214 212
215 SkAutoTUnref<GrTexture> srcTexture(create_texture(context)); 213 SkAutoTUnref<GrTexture> srcTexture(create_texture(context));
216 if (!srcTexture) { 214 if (!srcTexture) {
217 return; 215 return;
218 } 216 }
219 217
220 const SkIRect& full = SkIRect::MakeWH(kFullSize, kFullSize); 218 const SkIRect& full = SkIRect::MakeWH(kFullSize, kFullSize);
221 219
222 SkAutoTUnref<SkSpecialImage> fullImg(SkSpecialImage::NewFromGpu( 220 sk_sp<SkSpecialImage> fullImg(SkSpecialImage::MakeFromGpu(nullptr, full,
223 nullptr, full, 221 kNeedNewImageUniqu eID_SpecialImage,
222 srcTexture));
223
224 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller Size);
225
226 sk_sp<SkSpecialImage> subsetImg(SkSpecialImage::MakeFromGpu(nullptr, subset,
224 kNeedNewImageUni queID_SpecialImage, 227 kNeedNewImageUni queID_SpecialImage,
225 srcTexture)); 228 srcTexture));
226 229
227 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller Size);
228
229 SkAutoTUnref<SkSpecialImage> subsetImg(SkSpecialImage::NewFromGpu(
230 nullptr, subset,
231 kNeedNewImageUni queID_SpecialImage,
232 srcTexture));
233
234 test_find_existing(reporter, fullImg, subsetImg); 230 test_find_existing(reporter, fullImg, subsetImg);
235 test_dont_find_if_diff_key(reporter, fullImg, subsetImg); 231 test_dont_find_if_diff_key(reporter, fullImg, subsetImg);
236 test_internal_purge(reporter, fullImg); 232 test_internal_purge(reporter, fullImg);
237 test_explicit_purging(reporter, fullImg, subsetImg); 233 test_explicit_purging(reporter, fullImg, subsetImg);
238 } 234 }
239 #endif 235 #endif
240 236
OLDNEW
« no previous file with comments | « src/gpu/GrLayerHoister.cpp ('k') | tests/ImageFilterTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698