| 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 == |
| 65 !!TestingSpecialImageAccess::PeekTexture
(img.get())); | 65 !!TestingSpecialImageAccess::PeekTexture
(img.get())); |
| 66 | 66 |
| 67 #if SK_SUPPORT_GPU |
| 67 //-------------- | 68 //-------------- |
| 68 // Test that peekPixels reports the correct backing type | 69 // Test getTextureAsRef - as long as there is a context this should succeed |
| 69 SkPixmap pixmap; | 70 if (context) { |
| 70 REPORTER_ASSERT(reporter, peekPixelsSucceeds == | 71 sk_sp<GrTexture> texture(img->asTextureRef(context)); |
| 71 !!TestingSpecialImageAccess::PeekPixels(img.get(),
&pixmap)); | 72 REPORTER_ASSERT(reporter, texture); |
| 72 if (peekPixelsSucceeds) { | |
| 73 REPORTER_ASSERT(reporter, size == pixmap.width()); | |
| 74 REPORTER_ASSERT(reporter, size == pixmap.height()); | |
| 75 } | 73 } |
| 74 #endif |
| 75 |
| 76 //-------------- |
| 77 // Test getROPixels - this should always succeed regardless of backing store |
| 78 SkBitmap bitmap; |
| 79 REPORTER_ASSERT(reporter, img->getROPixels(&bitmap)); |
| 80 REPORTER_ASSERT(reporter, size == bitmap.width()); |
| 81 REPORTER_ASSERT(reporter, size == bitmap.height()); |
| 76 | 82 |
| 77 //-------------- | 83 //-------------- |
| 78 // Test that draw restricts itself to the subset | 84 // Test that draw restricts itself to the subset |
| 79 SkImageInfo info = SkImageInfo::MakeN32(kFullSize, kFullSize, kOpaque_SkAlph
aType); | 85 SkImageInfo info = SkImageInfo::MakeN32(kFullSize, kFullSize, kOpaque_SkAlph
aType); |
| 80 | 86 |
| 81 sk_sp<SkSpecialSurface> surf(img->makeSurface(info)); | 87 sk_sp<SkSpecialSurface> surf(img->makeSurface(info)); |
| 82 | 88 |
| 83 SkCanvas* canvas = surf->getCanvas(); | 89 SkCanvas* canvas = surf->getCanvas(); |
| 84 | 90 |
| 85 canvas->clear(SK_ColorBLUE); | 91 canvas->clear(SK_ColorBLUE); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 103 // Test that makeTightSubset & makeTightSurface return appropriately sized o
bjects | 109 // Test that makeTightSubset & makeTightSurface return appropriately sized o
bjects |
| 104 // of the correct backing type | 110 // of the correct backing type |
| 105 SkIRect newSubset = SkIRect::MakeWH(subset.width(), subset.height()); | 111 SkIRect newSubset = SkIRect::MakeWH(subset.width(), subset.height()); |
| 106 { | 112 { |
| 107 sk_sp<SkImage> tightImg(img->makeTightSubset(newSubset)); | 113 sk_sp<SkImage> tightImg(img->makeTightSubset(newSubset)); |
| 108 | 114 |
| 109 REPORTER_ASSERT(reporter, tightImg->width() == subset.width()); | 115 REPORTER_ASSERT(reporter, tightImg->width() == subset.width()); |
| 110 REPORTER_ASSERT(reporter, tightImg->height() == subset.height()); | 116 REPORTER_ASSERT(reporter, tightImg->height() == subset.height()); |
| 111 REPORTER_ASSERT(reporter, peekTextureSucceeds == !!tightImg->getTexture(
)); | 117 REPORTER_ASSERT(reporter, peekTextureSucceeds == !!tightImg->getTexture(
)); |
| 112 SkPixmap tmpPixmap; | 118 SkPixmap tmpPixmap; |
| 113 REPORTER_ASSERT(reporter, peekPixelsSucceeds == !!tightImg->peekPixels(&
tmpPixmap)); | 119 REPORTER_ASSERT(reporter, peekTextureSucceeds != !!tightImg->peekPixels(
&tmpPixmap)); |
| 114 } | 120 } |
| 115 { | 121 { |
| 116 SkImageInfo info = SkImageInfo::MakeN32(subset.width(), subset.height(), | 122 SkImageInfo info = SkImageInfo::MakeN32(subset.width(), subset.height(), |
| 117 kPremul_SkAlphaType); | 123 kPremul_SkAlphaType); |
| 118 sk_sp<SkSurface> tightSurf(img->makeTightSurface(info)); | 124 sk_sp<SkSurface> tightSurf(img->makeTightSurface(info)); |
| 119 | 125 |
| 120 REPORTER_ASSERT(reporter, tightSurf->width() == subset.width()); | 126 REPORTER_ASSERT(reporter, tightSurf->width() == subset.width()); |
| 121 REPORTER_ASSERT(reporter, tightSurf->height() == subset.height()); | 127 REPORTER_ASSERT(reporter, tightSurf->height() == subset.height()); |
| 122 REPORTER_ASSERT(reporter, peekTextureSucceeds == | 128 REPORTER_ASSERT(reporter, peekTextureSucceeds == |
| 123 !!tightSurf->getTextureHandle(SkSurface::kDiscardWrite_Back
endHandleAccess)); | 129 !!tightSurf->getTextureHandle(SkSurface::kDiscardWrite_Back
endHandleAccess)); |
| 124 SkPixmap tmpPixmap; | 130 SkPixmap tmpPixmap; |
| 125 REPORTER_ASSERT(reporter, peekPixelsSucceeds == !!tightSurf->peekPixels(
&tmpPixmap)); | 131 REPORTER_ASSERT(reporter, peekTextureSucceeds != !!tightSurf->peekPixels
(&tmpPixmap)); |
| 126 } | 132 } |
| 127 } | 133 } |
| 128 | 134 |
| 129 DEF_TEST(SpecialImage_Raster, reporter) { | 135 DEF_TEST(SpecialImage_Raster, reporter) { |
| 130 SkBitmap bm = create_bm(); | 136 SkBitmap bm = create_bm(); |
| 131 | 137 |
| 132 sk_sp<SkSpecialImage> fullSImage(SkSpecialImage::MakeFromRaster( | 138 sk_sp<SkSpecialImage> fullSImage(SkSpecialImage::MakeFromRaster( |
| 133 nullptr, | 139 nullptr, |
| 134 SkIRect::MakeWH(kFul
lSize, kFullSize), | 140 SkIRect::MakeWH(kFul
lSize, kFullSize), |
| 135 bm)); | 141 bm)); |
| 136 | 142 |
| 137 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller
Size); | 143 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller
Size); |
| 138 | 144 |
| 139 { | 145 { |
| 140 sk_sp<SkSpecialImage> subSImg1(SkSpecialImage::MakeFromRaster(nullptr, s
ubset, bm)); | 146 sk_sp<SkSpecialImage> subSImg1(SkSpecialImage::MakeFromRaster(nullptr, s
ubset, bm)); |
| 141 test_image(subSImg1, reporter, true, false, kPad, kFullSize); | 147 test_image(subSImg1, reporter, nullptr, false, kPad, kFullSize); |
| 142 } | 148 } |
| 143 | 149 |
| 144 { | 150 { |
| 145 sk_sp<SkSpecialImage> subSImg2(fullSImage->makeSubset(subset)); | 151 sk_sp<SkSpecialImage> subSImg2(fullSImage->makeSubset(subset)); |
| 146 test_image(subSImg2, reporter, true, false, 0, kSmallerSize); | 152 test_image(subSImg2, reporter, nullptr, false, 0, kSmallerSize); |
| 147 } | 153 } |
| 148 } | 154 } |
| 149 | 155 |
| 150 DEF_TEST(SpecialImage_Image, reporter) { | 156 DEF_TEST(SpecialImage_Image, reporter) { |
| 151 SkBitmap bm = create_bm(); | 157 SkBitmap bm = create_bm(); |
| 152 | 158 |
| 153 sk_sp<SkImage> fullImage(SkImage::MakeFromBitmap(bm)); | 159 sk_sp<SkImage> fullImage(SkImage::MakeFromBitmap(bm)); |
| 154 | 160 |
| 155 sk_sp<SkSpecialImage> fullSImage(SkSpecialImage::MakeFromImage( | 161 sk_sp<SkSpecialImage> fullSImage(SkSpecialImage::MakeFromImage( |
| 156 nullptr, | 162 nullptr, |
| 157 SkIRect::MakeWH(kFul
lSize, kFullSize), | 163 SkIRect::MakeWH(kFul
lSize, kFullSize), |
| 158 fullImage)); | 164 fullImage)); |
| 159 | 165 |
| 160 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller
Size); | 166 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller
Size); |
| 161 | 167 |
| 162 { | 168 { |
| 163 sk_sp<SkSpecialImage> subSImg1(SkSpecialImage::MakeFromImage(nullptr, su
bset, | 169 sk_sp<SkSpecialImage> subSImg1(SkSpecialImage::MakeFromImage(nullptr, su
bset, |
| 164 fullImage))
; | 170 fullImage))
; |
| 165 test_image(subSImg1, reporter, true, false, kPad, kFullSize); | 171 test_image(subSImg1, reporter, nullptr, false, kPad, kFullSize); |
| 166 } | 172 } |
| 167 | 173 |
| 168 { | 174 { |
| 169 sk_sp<SkSpecialImage> subSImg2(fullSImage->makeSubset(subset)); | 175 sk_sp<SkSpecialImage> subSImg2(fullSImage->makeSubset(subset)); |
| 170 test_image(subSImg2, reporter, true, false, 0, kSmallerSize); | 176 test_image(subSImg2, reporter, nullptr, false, 0, kSmallerSize); |
| 171 } | 177 } |
| 172 } | 178 } |
| 173 | 179 |
| 174 DEF_TEST(SpecialImage_Pixmap, reporter) { | 180 DEF_TEST(SpecialImage_Pixmap, reporter) { |
| 175 SkAutoPixmapStorage pixmap; | 181 SkAutoPixmapStorage pixmap; |
| 176 | 182 |
| 177 const SkImageInfo info = SkImageInfo::MakeN32(kFullSize, kFullSize, kOpaque_
SkAlphaType); | 183 const SkImageInfo info = SkImageInfo::MakeN32(kFullSize, kFullSize, kOpaque_
SkAlphaType); |
| 178 pixmap.alloc(info); | 184 pixmap.alloc(info); |
| 179 pixmap.erase(SK_ColorGREEN); | 185 pixmap.erase(SK_ColorGREEN); |
| 180 | 186 |
| 181 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller
Size); | 187 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller
Size); |
| 182 | 188 |
| 183 pixmap.erase(SK_ColorRED, subset); | 189 pixmap.erase(SK_ColorRED, subset); |
| 184 | 190 |
| 185 { | 191 { |
| 186 sk_sp<SkSpecialImage> img(SkSpecialImage::MakeFromPixmap(nullptr, subset
, pixmap, | 192 sk_sp<SkSpecialImage> img(SkSpecialImage::MakeFromPixmap(nullptr, subset
, pixmap, |
| 187 nullptr, nullpt
r)); | 193 nullptr, nullpt
r)); |
| 188 test_image(img, reporter, true, false, kPad, kFullSize); | 194 test_image(img, reporter, nullptr, false, kPad, kFullSize); |
| 189 } | 195 } |
| 190 } | 196 } |
| 191 | 197 |
| 192 | 198 |
| 193 #if SK_SUPPORT_GPU | 199 #if SK_SUPPORT_GPU |
| 194 | 200 |
| 195 static void test_texture_backed(skiatest::Reporter* reporter, | 201 static void test_texture_backed(skiatest::Reporter* reporter, |
| 196 const sk_sp<SkSpecialImage>& orig, | 202 const sk_sp<SkSpecialImage>& orig, |
| 197 const sk_sp<SkSpecialImage>& gpuBacked) { | 203 const sk_sp<SkSpecialImage>& gpuBacked) { |
| 198 REPORTER_ASSERT(reporter, gpuBacked); | 204 REPORTER_ASSERT(reporter, gpuBacked); |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 290 kNeedNewImageUniqueI
D_SpecialImage, | 296 kNeedNewImageUniqueI
D_SpecialImage, |
| 291 texture)); | 297 texture)); |
| 292 | 298 |
| 293 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller
Size); | 299 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller
Size); |
| 294 | 300 |
| 295 { | 301 { |
| 296 sk_sp<SkSpecialImage> subSImg1(SkSpecialImage::MakeFromGpu( | 302 sk_sp<SkSpecialImage> subSImg1(SkSpecialImage::MakeFromGpu( |
| 297 nullptr, subset, | 303 nullptr, subset, |
| 298 kNeedNewImageUniq
ueID_SpecialImage, | 304 kNeedNewImageUniq
ueID_SpecialImage, |
| 299 texture)); | 305 texture)); |
| 300 test_image(subSImg1, reporter, false, true, kPad, kFullSize); | 306 test_image(subSImg1, reporter, context, true, kPad, kFullSize); |
| 301 } | 307 } |
| 302 | 308 |
| 303 { | 309 { |
| 304 sk_sp<SkSpecialImage> subSImg2(fullSImg->makeSubset(subset)); | 310 sk_sp<SkSpecialImage> subSImg2(fullSImg->makeSubset(subset)); |
| 305 test_image(subSImg2, reporter, false, true, kPad, kFullSize); | 311 test_image(subSImg2, reporter, context, true, kPad, kFullSize); |
| 306 } | 312 } |
| 307 } | 313 } |
| 308 | 314 |
| 309 #endif | 315 #endif |
| OLD | NEW |