OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |