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

Side by Side Diff: tests/SpecialImageTest.cpp

Issue 1861643003: Upgrade SkSpecialImage to have getTextureRef & getROPixels entry points (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Address code review comments Created 4 years, 8 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 | « tests/ImageFilterTest.cpp ('k') | tests/TestingSpecialImageAccess.h » ('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 "SkAutoPixmapStorage.h" 8 #include "SkAutoPixmapStorage.h"
9 #include "SkBitmap.h" 9 #include "SkBitmap.h"
10 #include "SkCanvas.h" 10 #include "SkCanvas.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 44
45 temp.drawRect(SkRect::MakeXYWH(SkIntToScalar(kPad), SkIntToScalar(kPad), 45 temp.drawRect(SkRect::MakeXYWH(SkIntToScalar(kPad), SkIntToScalar(kPad),
46 SkIntToScalar(kSmallerSize), SkIntToScalar(kS mallerSize)), 46 SkIntToScalar(kSmallerSize), SkIntToScalar(kS mallerSize)),
47 p); 47 p);
48 48
49 return bm; 49 return bm;
50 } 50 }
51 51
52 // Basic test of the SkSpecialImage public API (e.g., peekTexture, peekPixels & draw) 52 // Basic test of the SkSpecialImage public API (e.g., peekTexture, peekPixels & draw)
53 static void test_image(const sk_sp<SkSpecialImage>& img, skiatest::Reporter* rep orter, 53 static void test_image(const sk_sp<SkSpecialImage>& img, skiatest::Reporter* rep orter,
54 bool peekPixelsSucceeds, bool peekTextureSucceeds, 54 GrContext* context, bool peekTextureSucceeds,
55 int offset, int size) { 55 int offset, int size) {
56 const SkIRect subset = TestingSpecialImageAccess::Subset(img.get()); 56 const SkIRect subset = TestingSpecialImageAccess::Subset(img.get());
57 REPORTER_ASSERT(reporter, offset == subset.left()); 57 REPORTER_ASSERT(reporter, offset == subset.left());
58 REPORTER_ASSERT(reporter, offset == subset.top()); 58 REPORTER_ASSERT(reporter, offset == subset.top());
59 REPORTER_ASSERT(reporter, kSmallerSize == subset.width()); 59 REPORTER_ASSERT(reporter, kSmallerSize == subset.width());
60 REPORTER_ASSERT(reporter, kSmallerSize == subset.height()); 60 REPORTER_ASSERT(reporter, kSmallerSize == subset.height());
61 61
62 //-------------- 62 //--------------
63 // Test that peekTexture reports the correct backing type 63 // Test that peekTexture reports the correct backing type
64 REPORTER_ASSERT(reporter, peekTextureSucceeds == 64 REPORTER_ASSERT(reporter, peekTextureSucceeds == img->isTextureBacked());
65 !!TestingSpecialImageAccess::PeekTexture (img.get())); 65
66 #if SK_SUPPORT_GPU
67 //--------------
68 // Test getTextureAsRef - as long as there is a context this should succeed
69 if (context) {
70 sk_sp<GrTexture> texture(img->asTextureRef(context));
71 REPORTER_ASSERT(reporter, texture);
72 }
73 #endif
66 74
67 //-------------- 75 //--------------
68 // Test that peekPixels reports the correct backing type 76 // Test getROPixels - this should always succeed regardless of backing store
69 SkPixmap pixmap; 77 SkBitmap bitmap;
70 REPORTER_ASSERT(reporter, peekPixelsSucceeds == 78 REPORTER_ASSERT(reporter, img->getROPixels(&bitmap));
71 !!TestingSpecialImageAccess::PeekPixels(img.get(), &pixmap)); 79 if (context) {
72 if (peekPixelsSucceeds) { 80 REPORTER_ASSERT(reporter, kSmallerSize == bitmap.width());
73 REPORTER_ASSERT(reporter, size == pixmap.width()); 81 REPORTER_ASSERT(reporter, kSmallerSize == bitmap.height());
74 REPORTER_ASSERT(reporter, size == pixmap.height()); 82 } else {
83 REPORTER_ASSERT(reporter, size == bitmap.width());
84 REPORTER_ASSERT(reporter, size == bitmap.height());
75 } 85 }
76 86
77 //-------------- 87 //--------------
78 // Test that draw restricts itself to the subset 88 // Test that draw restricts itself to the subset
79 SkImageInfo info = SkImageInfo::MakeN32(kFullSize, kFullSize, kOpaque_SkAlph aType); 89 SkImageInfo info = SkImageInfo::MakeN32(kFullSize, kFullSize, kOpaque_SkAlph aType);
80 90
81 sk_sp<SkSpecialSurface> surf(img->makeSurface(info)); 91 sk_sp<SkSpecialSurface> surf(img->makeSurface(info));
82 92
83 SkCanvas* canvas = surf->getCanvas(); 93 SkCanvas* canvas = surf->getCanvas();
84 94
(...skipping 18 matching lines...) Expand all
103 // Test that makeTightSubset & makeTightSurface return appropriately sized o bjects 113 // Test that makeTightSubset & makeTightSurface return appropriately sized o bjects
104 // of the correct backing type 114 // of the correct backing type
105 SkIRect newSubset = SkIRect::MakeWH(subset.width(), subset.height()); 115 SkIRect newSubset = SkIRect::MakeWH(subset.width(), subset.height());
106 { 116 {
107 sk_sp<SkImage> tightImg(img->makeTightSubset(newSubset)); 117 sk_sp<SkImage> tightImg(img->makeTightSubset(newSubset));
108 118
109 REPORTER_ASSERT(reporter, tightImg->width() == subset.width()); 119 REPORTER_ASSERT(reporter, tightImg->width() == subset.width());
110 REPORTER_ASSERT(reporter, tightImg->height() == subset.height()); 120 REPORTER_ASSERT(reporter, tightImg->height() == subset.height());
111 REPORTER_ASSERT(reporter, peekTextureSucceeds == !!tightImg->getTexture( )); 121 REPORTER_ASSERT(reporter, peekTextureSucceeds == !!tightImg->getTexture( ));
112 SkPixmap tmpPixmap; 122 SkPixmap tmpPixmap;
113 REPORTER_ASSERT(reporter, peekPixelsSucceeds == !!tightImg->peekPixels(& tmpPixmap)); 123 REPORTER_ASSERT(reporter, peekTextureSucceeds != !!tightImg->peekPixels( &tmpPixmap));
114 } 124 }
115 { 125 {
116 SkImageInfo info = SkImageInfo::MakeN32(subset.width(), subset.height(), 126 SkImageInfo info = SkImageInfo::MakeN32(subset.width(), subset.height(),
117 kPremul_SkAlphaType); 127 kPremul_SkAlphaType);
118 sk_sp<SkSurface> tightSurf(img->makeTightSurface(info)); 128 sk_sp<SkSurface> tightSurf(img->makeTightSurface(info));
119 129
120 REPORTER_ASSERT(reporter, tightSurf->width() == subset.width()); 130 REPORTER_ASSERT(reporter, tightSurf->width() == subset.width());
121 REPORTER_ASSERT(reporter, tightSurf->height() == subset.height()); 131 REPORTER_ASSERT(reporter, tightSurf->height() == subset.height());
122 REPORTER_ASSERT(reporter, peekTextureSucceeds == 132 REPORTER_ASSERT(reporter, peekTextureSucceeds ==
123 !!tightSurf->getTextureHandle(SkSurface::kDiscardWrite_Back endHandleAccess)); 133 !!tightSurf->getTextureHandle(SkSurface::kDiscardWrite_Back endHandleAccess));
124 SkPixmap tmpPixmap; 134 SkPixmap tmpPixmap;
125 REPORTER_ASSERT(reporter, peekPixelsSucceeds == !!tightSurf->peekPixels( &tmpPixmap)); 135 REPORTER_ASSERT(reporter, peekTextureSucceeds != !!tightSurf->peekPixels (&tmpPixmap));
126 } 136 }
127 } 137 }
128 138
129 DEF_TEST(SpecialImage_Raster, reporter) { 139 DEF_TEST(SpecialImage_Raster, reporter) {
130 SkBitmap bm = create_bm(); 140 SkBitmap bm = create_bm();
131 141
132 sk_sp<SkSpecialImage> fullSImage(SkSpecialImage::MakeFromRaster( 142 sk_sp<SkSpecialImage> fullSImage(SkSpecialImage::MakeFromRaster(
133 nullptr, 143 nullptr,
134 SkIRect::MakeWH(kFul lSize, kFullSize), 144 SkIRect::MakeWH(kFul lSize, kFullSize),
135 bm)); 145 bm));
136 146
137 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller Size); 147 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller Size);
138 148
139 { 149 {
140 sk_sp<SkSpecialImage> subSImg1(SkSpecialImage::MakeFromRaster(nullptr, s ubset, bm)); 150 sk_sp<SkSpecialImage> subSImg1(SkSpecialImage::MakeFromRaster(nullptr, s ubset, bm));
141 test_image(subSImg1, reporter, true, false, kPad, kFullSize); 151 test_image(subSImg1, reporter, nullptr, false, kPad, kFullSize);
142 } 152 }
143 153
144 { 154 {
145 sk_sp<SkSpecialImage> subSImg2(fullSImage->makeSubset(subset)); 155 sk_sp<SkSpecialImage> subSImg2(fullSImage->makeSubset(subset));
146 test_image(subSImg2, reporter, true, false, 0, kSmallerSize); 156 test_image(subSImg2, reporter, nullptr, false, 0, kSmallerSize);
147 } 157 }
148 } 158 }
149 159
150 DEF_TEST(SpecialImage_Image, reporter) { 160 DEF_TEST(SpecialImage_Image, reporter) {
151 SkBitmap bm = create_bm(); 161 SkBitmap bm = create_bm();
152 162
153 sk_sp<SkImage> fullImage(SkImage::MakeFromBitmap(bm)); 163 sk_sp<SkImage> fullImage(SkImage::MakeFromBitmap(bm));
154 164
155 sk_sp<SkSpecialImage> fullSImage(SkSpecialImage::MakeFromImage( 165 sk_sp<SkSpecialImage> fullSImage(SkSpecialImage::MakeFromImage(
156 nullptr, 166 nullptr,
157 SkIRect::MakeWH(kFul lSize, kFullSize), 167 SkIRect::MakeWH(kFul lSize, kFullSize),
158 fullImage)); 168 fullImage));
159 169
160 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller Size); 170 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller Size);
161 171
162 { 172 {
163 sk_sp<SkSpecialImage> subSImg1(SkSpecialImage::MakeFromImage(nullptr, su bset, 173 sk_sp<SkSpecialImage> subSImg1(SkSpecialImage::MakeFromImage(nullptr, su bset,
164 fullImage)) ; 174 fullImage)) ;
165 test_image(subSImg1, reporter, true, false, kPad, kFullSize); 175 test_image(subSImg1, reporter, nullptr, false, kPad, kFullSize);
166 } 176 }
167 177
168 { 178 {
169 sk_sp<SkSpecialImage> subSImg2(fullSImage->makeSubset(subset)); 179 sk_sp<SkSpecialImage> subSImg2(fullSImage->makeSubset(subset));
170 test_image(subSImg2, reporter, true, false, 0, kSmallerSize); 180 test_image(subSImg2, reporter, nullptr, false, 0, kSmallerSize);
171 } 181 }
172 } 182 }
173 183
174 DEF_TEST(SpecialImage_Pixmap, reporter) { 184 DEF_TEST(SpecialImage_Pixmap, reporter) {
175 SkAutoPixmapStorage pixmap; 185 SkAutoPixmapStorage pixmap;
176 186
177 const SkImageInfo info = SkImageInfo::MakeN32(kFullSize, kFullSize, kOpaque_ SkAlphaType); 187 const SkImageInfo info = SkImageInfo::MakeN32(kFullSize, kFullSize, kOpaque_ SkAlphaType);
178 pixmap.alloc(info); 188 pixmap.alloc(info);
179 pixmap.erase(SK_ColorGREEN); 189 pixmap.erase(SK_ColorGREEN);
180 190
181 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller Size); 191 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller Size);
182 192
183 pixmap.erase(SK_ColorRED, subset); 193 pixmap.erase(SK_ColorRED, subset);
184 194
185 { 195 {
186 sk_sp<SkSpecialImage> img(SkSpecialImage::MakeFromPixmap(nullptr, subset , pixmap, 196 sk_sp<SkSpecialImage> img(SkSpecialImage::MakeFromPixmap(nullptr, subset , pixmap,
187 nullptr, nullpt r)); 197 nullptr, nullpt r));
188 test_image(img, reporter, true, false, kPad, kFullSize); 198 test_image(img, reporter, nullptr, false, kPad, kFullSize);
189 } 199 }
190 } 200 }
191 201
192 202
193 #if SK_SUPPORT_GPU 203 #if SK_SUPPORT_GPU
194 204
195 static void test_texture_backed(skiatest::Reporter* reporter, 205 static void test_texture_backed(skiatest::Reporter* reporter,
196 const sk_sp<SkSpecialImage>& orig, 206 const sk_sp<SkSpecialImage>& orig,
197 const sk_sp<SkSpecialImage>& gpuBacked) { 207 const sk_sp<SkSpecialImage>& gpuBacked) {
198 REPORTER_ASSERT(reporter, gpuBacked); 208 REPORTER_ASSERT(reporter, gpuBacked);
199 REPORTER_ASSERT(reporter, gpuBacked->peekTexture()); 209 REPORTER_ASSERT(reporter, gpuBacked->isTextureBacked());
200 REPORTER_ASSERT(reporter, gpuBacked->uniqueID() == orig->uniqueID()); 210 REPORTER_ASSERT(reporter, gpuBacked->uniqueID() == orig->uniqueID());
201 REPORTER_ASSERT(reporter, gpuBacked->subset().width() == orig->subset().widt h() && 211 REPORTER_ASSERT(reporter, gpuBacked->subset().width() == orig->subset().widt h() &&
202 gpuBacked->subset().height() == orig->subset().hei ght()); 212 gpuBacked->subset().height() == orig->subset().hei ght());
203 } 213 }
204 214
205 // Test out the SkSpecialImage::makeTextureImage entry point 215 // Test out the SkSpecialImage::makeTextureImage entry point
206 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SpecialImage_MakeTexture, reporter, ctxInf o) { 216 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SpecialImage_MakeTexture, reporter, ctxInf o) {
207 GrContext* context = ctxInfo.fGrContext; 217 GrContext* context = ctxInfo.fGrContext;
208 SkBitmap bm = create_bm(); 218 SkBitmap bm = create_bm();
209 219
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 kNeedNewImageUniqueI D_SpecialImage, 300 kNeedNewImageUniqueI D_SpecialImage,
291 texture)); 301 texture));
292 302
293 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller Size); 303 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller Size);
294 304
295 { 305 {
296 sk_sp<SkSpecialImage> subSImg1(SkSpecialImage::MakeFromGpu( 306 sk_sp<SkSpecialImage> subSImg1(SkSpecialImage::MakeFromGpu(
297 nullptr, subset, 307 nullptr, subset,
298 kNeedNewImageUniq ueID_SpecialImage, 308 kNeedNewImageUniq ueID_SpecialImage,
299 texture)); 309 texture));
300 test_image(subSImg1, reporter, false, true, kPad, kFullSize); 310 test_image(subSImg1, reporter, context, true, kPad, kFullSize);
301 } 311 }
302 312
303 { 313 {
304 sk_sp<SkSpecialImage> subSImg2(fullSImg->makeSubset(subset)); 314 sk_sp<SkSpecialImage> subSImg2(fullSImg->makeSubset(subset));
305 test_image(subSImg2, reporter, false, true, kPad, kFullSize); 315 test_image(subSImg2, reporter, context, true, kPad, kFullSize);
306 } 316 }
307 } 317 }
308 318
309 #endif 319 #endif
OLDNEW
« no previous file with comments | « tests/ImageFilterTest.cpp ('k') | tests/TestingSpecialImageAccess.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698