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

Side by Side Diff: tests/SpecialImageTest.cpp

Issue 1787883002: Add SkSpecialImage::extractSubset & NewFromPixmap (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Add comment 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
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 "SkBitmap.h" 8 #include "SkBitmap.h"
9 #include "SkCanvas.h" 9 #include "SkCanvas.h"
10 #include "SkImage.h" 10 #include "SkImage.h"
11 #include "SkPixmap.h"
11 #include "SkSpecialImage.h" 12 #include "SkSpecialImage.h"
12 #include "SkSpecialSurface.h" 13 #include "SkSpecialSurface.h"
13 #include "Test.h" 14 #include "Test.h"
14 #include "TestingSpecialImageAccess.h" 15 #include "TestingSpecialImageAccess.h"
15 16
16 #if SK_SUPPORT_GPU 17 #if SK_SUPPORT_GPU
17 #include "GrContext.h" 18 #include "GrContext.h"
18 #endif 19 #endif
19 20
20 21
(...skipping 20 matching lines...) Expand all
41 42
42 temp.drawRect(SkRect::MakeXYWH(SkIntToScalar(kPad), SkIntToScalar(kPad), 43 temp.drawRect(SkRect::MakeXYWH(SkIntToScalar(kPad), SkIntToScalar(kPad),
43 SkIntToScalar(kSmallerSize), SkIntToScalar(kS mallerSize)), 44 SkIntToScalar(kSmallerSize), SkIntToScalar(kS mallerSize)),
44 p); 45 p);
45 46
46 return bm; 47 return bm;
47 } 48 }
48 49
49 // Basic test of the SkSpecialImage public API (e.g., peekTexture, peekPixels & draw) 50 // Basic test of the SkSpecialImage public API (e.g., peekTexture, peekPixels & draw)
50 static void test_image(SkSpecialImage* img, skiatest::Reporter* reporter, 51 static void test_image(SkSpecialImage* img, skiatest::Reporter* reporter,
51 bool peekPixelsSucceeds, bool peekTextureSucceeds) { 52 bool peekPixelsSucceeds, bool peekTextureSucceeds,
53 int offset, int size) {
52 const SkIRect subset = TestingSpecialImageAccess::Subset(img); 54 const SkIRect subset = TestingSpecialImageAccess::Subset(img);
53 REPORTER_ASSERT(reporter, kPad == subset.left()); 55 REPORTER_ASSERT(reporter, offset == subset.left());
54 REPORTER_ASSERT(reporter, kPad == subset.top()); 56 REPORTER_ASSERT(reporter, offset == subset.top());
55 REPORTER_ASSERT(reporter, kSmallerSize == subset.width()); 57 REPORTER_ASSERT(reporter, kSmallerSize == subset.width());
56 REPORTER_ASSERT(reporter, kSmallerSize == subset.height()); 58 REPORTER_ASSERT(reporter, kSmallerSize == subset.height());
57 59
58 //-------------- 60 //--------------
59 REPORTER_ASSERT(reporter, peekTextureSucceeds == !!TestingSpecialImageAccess ::PeekTexture(img)); 61 REPORTER_ASSERT(reporter, peekTextureSucceeds == !!TestingSpecialImageAccess ::PeekTexture(img));
60 62
61 //-------------- 63 //--------------
62 SkPixmap pixmap; 64 SkPixmap pixmap;
63 REPORTER_ASSERT(reporter, peekPixelsSucceeds == 65 REPORTER_ASSERT(reporter, peekPixelsSucceeds ==
64 !!TestingSpecialImageAccess::PeekPixels(img, &pixm ap)); 66 !!TestingSpecialImageAccess::PeekPixels(img, &pixm ap));
65 if (peekPixelsSucceeds) { 67 if (peekPixelsSucceeds) {
66 REPORTER_ASSERT(reporter, kFullSize == pixmap.width()); 68 REPORTER_ASSERT(reporter, size == pixmap.width());
67 REPORTER_ASSERT(reporter, kFullSize == pixmap.height()); 69 REPORTER_ASSERT(reporter, size == pixmap.height());
68 } 70 }
69 71
70 //-------------- 72 //--------------
71 SkImageInfo info = SkImageInfo::MakeN32(kFullSize, kFullSize, kOpaque_SkAlph aType); 73 SkImageInfo info = SkImageInfo::MakeN32(kFullSize, kFullSize, kOpaque_SkAlph aType);
72 74
73 SkAutoTUnref<SkSpecialSurface> surf(img->newSurface(info)); 75 SkAutoTUnref<SkSpecialSurface> surf(img->newSurface(info));
74 76
75 SkCanvas* canvas = surf->getCanvas(); 77 SkCanvas* canvas = surf->getCanvas();
76 78
77 canvas->clear(SK_ColorBLUE); 79 canvas->clear(SK_ColorBLUE);
(...skipping 10 matching lines...) Expand all
88 REPORTER_ASSERT(reporter, SK_ColorRED == bm.getColor(kPad, kPad)); 90 REPORTER_ASSERT(reporter, SK_ColorRED == bm.getColor(kPad, kPad));
89 REPORTER_ASSERT(reporter, SK_ColorRED == bm.getColor(kSmallerSize+kPad-1, 91 REPORTER_ASSERT(reporter, SK_ColorRED == bm.getColor(kSmallerSize+kPad-1,
90 kSmallerSize+kPad-1)); 92 kSmallerSize+kPad-1));
91 REPORTER_ASSERT(reporter, SK_ColorBLUE == bm.getColor(kSmallerSize+kPad, 93 REPORTER_ASSERT(reporter, SK_ColorBLUE == bm.getColor(kSmallerSize+kPad,
92 kSmallerSize+kPad)); 94 kSmallerSize+kPad));
93 } 95 }
94 96
95 DEF_TEST(SpecialImage_Raster, reporter) { 97 DEF_TEST(SpecialImage_Raster, reporter) {
96 SkBitmap bm = create_bm(); 98 SkBitmap bm = create_bm();
97 99
100 SkAutoTUnref<SkSpecialImage> fullSImage(SkSpecialImage::NewFromRaster(
101 nullptr,
102 SkIRect::MakeWH(kFul lSize, kFullSize),
103 bm));
104
98 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller Size); 105 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller Size);
99 106
100 SkAutoTUnref<SkSpecialImage> img(SkSpecialImage::NewFromRaster(nullptr, subs et, bm)); 107 {
101 test_image(img, reporter, true, false); 108 SkAutoTUnref<SkSpecialImage> subSImg1(SkSpecialImage::NewFromRaster(null ptr, subset, bm));
109 test_image(subSImg1, reporter, true, false, kPad, kFullSize);
110 }
111
112 {
113 SkAutoTUnref<SkSpecialImage> subSImg2(fullSImage->extractSubset(subset)) ;
114 test_image(subSImg2, reporter, true, false, 0, kSmallerSize);
115 }
102 } 116 }
103 117
104 DEF_TEST(SpecialImage_Image, reporter) { 118 DEF_TEST(SpecialImage_Image, reporter) {
105 SkBitmap bm = create_bm(); 119 SkBitmap bm = create_bm();
106 120
107 SkAutoTUnref<SkImage> fullImage(SkImage::NewFromBitmap(bm)); 121 SkAutoTUnref<SkImage> fullImage(SkImage::NewFromBitmap(bm));
108 122
123 SkAutoTUnref<SkSpecialImage> fullSImage(SkSpecialImage::NewFromImage(
124 nullptr,
125 SkIRect::MakeWH(kFul lSize, kFullSize),
126 fullImage));
127
109 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller Size); 128 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller Size);
110 129
111 SkAutoTUnref<SkSpecialImage> img(SkSpecialImage::NewFromImage(nullptr, subse t, fullImage)); 130 {
112 test_image(img, reporter, true, false); 131 SkAutoTUnref<SkSpecialImage> subSImg1(SkSpecialImage::NewFromImage(nullp tr,
132 subse t,
133 fullI mage));
134 test_image(subSImg1, reporter, true, false, kPad, kFullSize);
135 }
136
137 {
138 SkAutoTUnref<SkSpecialImage> subSImg2(fullSImage->extractSubset(subset)) ;
139 test_image(subSImg2, reporter, true, false, 0, kSmallerSize);
140 }
113 } 141 }
114 142
143 DEF_TEST(SpecialImage_Pixmap, reporter) {
144 SkAutoPixmapStorage pixmap;
145
146 const SkImageInfo info = SkImageInfo::MakeN32(kFullSize, kFullSize, kOpaque_ SkAlphaType);
147 pixmap.alloc(info);
148 pixmap.erase(SK_ColorGREEN);
149
150 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller Size);
151
152 pixmap.erase(SK_ColorRED, subset);
153
154 {
155 // The SkAutoPixmapStorage keeps hold of the memory
156 SkAutoTUnref<SkSpecialImage> img(SkSpecialImage::NewFromPixmap(nullptr, subset, pixmap,
157 nullptr, nullptr));
158 test_image(img, reporter, true, false, kPad, kFullSize);
159 }
160
161 {
162 // The image takes ownership of the memory
163 SkAutoTUnref<SkSpecialImage> img(SkSpecialImage::NewFromPixmap(
164 nullptr, subset, pixmap,
165 [] (void* addr, void*) -> void { sk_free(addr); },
166 nullptr));
167 pixmap.release();
168 test_image(img, reporter, true, false, kPad, kFullSize);
169 }
170 }
171
172
115 #if SK_SUPPORT_GPU 173 #if SK_SUPPORT_GPU
116 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SpecialImage_Gpu, reporter, context) { 174 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SpecialImage_Gpu, reporter, context) {
117 SkBitmap bm = create_bm(); 175 SkBitmap bm = create_bm();
118 176
119 GrSurfaceDesc desc; 177 GrSurfaceDesc desc;
120 desc.fConfig = kSkia8888_GrPixelConfig; 178 desc.fConfig = kSkia8888_GrPixelConfig;
121 desc.fFlags = kNone_GrSurfaceFlags; 179 desc.fFlags = kNone_GrSurfaceFlags;
122 desc.fWidth = kFullSize; 180 desc.fWidth = kFullSize;
123 desc.fHeight = kFullSize; 181 desc.fHeight = kFullSize;
124 182
125 SkAutoTUnref<GrTexture> texture(context->textureProvider()->createTexture(de sc, SkBudgeted::kNo, 183 SkAutoTUnref<GrTexture> texture(context->textureProvider()->createTexture(de sc, SkBudgeted::kNo,
126 bm .getPixels(), 0)); 184 bm .getPixels(), 0));
127 if (!texture) { 185 if (!texture) {
128 return; 186 return;
129 } 187 }
130 188
189 SkAutoTUnref<SkSpecialImage> fullSImg(SkSpecialImage::NewFromGpu(
190 nullptr,
191 SkIRect::MakeWH(kFul lSize, kFullSize),
192 kNeedNewImageUniqueI D_SpecialImage,
193 texture));
194
131 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller Size); 195 const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmaller Size);
132 196
133 SkAutoTUnref<SkSpecialImage> img(SkSpecialImage::NewFromGpu(nullptr, subset, 197 {
134 kNeedNewImageUni queID_SpecialImage, 198 SkAutoTUnref<SkSpecialImage> subSImg1(SkSpecialImage::NewFromGpu(
135 texture)); 199 nullptr, subset,
136 test_image(img, reporter, false, true); 200 kNeedNewImageUniq ueID_SpecialImage,
201 texture));
202 test_image(subSImg1, reporter, false, true, kPad, kFullSize);
203 }
204
205 {
206 SkAutoTUnref<SkSpecialImage> subSImg2(fullSImg->extractSubset(subset));
207 test_image(subSImg2, reporter, false, true, kPad, kFullSize);
208 }
137 } 209 }
138 210
139 #endif 211 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698