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

Side by Side Diff: skia/ext/analysis_canvas_unittest.cc

Issue 12316084: cc: Consolidate the analysis_canvas operations (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: win warning fix Created 7 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 | Annotate | Revision Log
« no previous file with comments | « skia/ext/analysis_canvas.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/compiler_specific.h"
6 #include "skia/ext/analysis_canvas.h"
7
8 #include "testing/gtest/include/gtest/gtest.h"
9
10 namespace {
11
12 void solidColorFill(skia::AnalysisCanvas& canvas) {
13 canvas.clear(SkColorSetARGB(255, 255, 255, 255));
14 }
15
16 void transparentFill(skia::AnalysisCanvas& canvas) {
17 canvas.clear(SkColorSetARGB(0, 0, 0, 0));
18 }
19
20 } // namespace
21 namespace skia {
22
23 TEST(AnalysisCanvasTest, EmptyCanvas) {
24 SkBitmap emptyBitmap;
25 emptyBitmap.setConfig(SkBitmap::kNo_Config, 255, 255);
26 skia::AnalysisDevice device(emptyBitmap);
27 skia::AnalysisCanvas canvas(&device);
28
29 SkColor color;
30 EXPECT_FALSE(canvas.getColorIfSolid(&color));
31 EXPECT_FALSE(canvas.isTransparent());
32 EXPECT_TRUE(canvas.isCheap());
33 }
34
35 TEST(AnalysisCanvasTest, ClearCanvas) {
36 SkBitmap emptyBitmap;
37 emptyBitmap.setConfig(SkBitmap::kNo_Config, 255, 255);
38 skia::AnalysisDevice device(emptyBitmap);
39 skia::AnalysisCanvas canvas(&device);
40
41 // Transparent color
42 SkColor color = SkColorSetARGB(0, 12, 34, 56);
43 canvas.clear(color);
44
45 SkColor outputColor;
46 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
47 EXPECT_TRUE(canvas.isTransparent());
48 EXPECT_TRUE(canvas.isCheap());
49
50 // Solid color
51 color = SkColorSetARGB(255, 65, 43, 21);
52 canvas.clear(color);
53
54 EXPECT_TRUE(canvas.getColorIfSolid(&outputColor));
55 EXPECT_FALSE(canvas.isTransparent());
56 EXPECT_TRUE(canvas.isCheap());
57 EXPECT_EQ(outputColor, color);
58
59 // Translucent color
60 color = SkColorSetARGB(128, 11, 22, 33);
61 canvas.clear(color);
62
63 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
64 EXPECT_FALSE(canvas.isTransparent());
65 EXPECT_TRUE(canvas.isCheap());
66
67 // Test helper methods
68 solidColorFill(canvas);
69 EXPECT_TRUE(canvas.getColorIfSolid(&outputColor));
70 EXPECT_FALSE(canvas.isTransparent());
71
72 transparentFill(canvas);
73 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
74 EXPECT_TRUE(canvas.isTransparent());
75 }
76
77 TEST(AnalysisCanvasTest, ComplexActions) {
78 SkBitmap emptyBitmap;
79 emptyBitmap.setConfig(SkBitmap::kNo_Config, 255, 255);
80 skia::AnalysisDevice device(emptyBitmap);
81 skia::AnalysisCanvas canvas(&device);
82
83 // Draw paint test.
84 SkColor color = SkColorSetARGB(255, 11, 22, 33);
85 SkPaint paint;
86 paint.setColor(color);
87
88 canvas.drawPaint(paint);
89
90 SkColor outputColor;
91 //TODO(vmpstr): This should return true. (crbug.com/180597)
92 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
93 EXPECT_FALSE(canvas.isTransparent());
94 EXPECT_TRUE(canvas.isCheap());
95
96 // Draw points test.
97 SkPoint points[4] = {
98 SkPoint::Make(0, 0),
99 SkPoint::Make(255, 0),
100 SkPoint::Make(255, 255),
101 SkPoint::Make(0, 255)
102 };
103
104 solidColorFill(canvas);
105 canvas.drawPoints(SkCanvas::kLines_PointMode, 4, points, paint);
106
107 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
108 EXPECT_FALSE(canvas.isTransparent());
109 EXPECT_TRUE(canvas.isCheap());
110
111 // Draw oval test.
112 solidColorFill(canvas);
113 canvas.drawOval(SkRect::MakeWH(255, 255), paint);
114
115 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
116 EXPECT_FALSE(canvas.isTransparent());
117 EXPECT_TRUE(canvas.isCheap());
118
119 // Draw bitmap test.
120 solidColorFill(canvas);
121 SkBitmap secondBitmap;
122 secondBitmap.setConfig(SkBitmap::kNo_Config, 255, 255);
123 canvas.drawBitmap(secondBitmap, 0, 0);
124
125 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
126 EXPECT_FALSE(canvas.isTransparent());
127 EXPECT_TRUE(canvas.isCheap());
128 }
129
130 TEST(AnalysisCanvasTest, SimpleDrawRect) {
131 SkBitmap emptyBitmap;
132 emptyBitmap.setConfig(SkBitmap::kNo_Config, 255, 255);
133 skia::AnalysisDevice device(emptyBitmap);
134 skia::AnalysisCanvas canvas(&device);
135
136 SkColor color = SkColorSetARGB(255, 11, 22, 33);
137 SkPaint paint;
138 paint.setColor(color);
139 canvas.clipRect(SkRect::MakeWH(255, 255));
140 canvas.drawRect(SkRect::MakeWH(255, 255), paint);
141
142 SkColor outputColor;
143 EXPECT_TRUE(canvas.getColorIfSolid(&outputColor));
144 EXPECT_FALSE(canvas.isTransparent());
145 EXPECT_TRUE(canvas.isCheap());
146 EXPECT_EQ(color, outputColor);
147
148 color = SkColorSetARGB(255, 22, 33, 44);
149 paint.setColor(color);
150 canvas.translate(-128, -128);
151 canvas.drawRect(SkRect::MakeWH(382, 382), paint);
152
153 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
154 EXPECT_FALSE(canvas.isTransparent());
155 EXPECT_TRUE(canvas.isCheap());
156
157 color = SkColorSetARGB(255, 33, 44, 55);
158 paint.setColor(color);
159 canvas.drawRect(SkRect::MakeWH(383, 383), paint);
160
161 EXPECT_TRUE(canvas.getColorIfSolid(&outputColor));
162 EXPECT_FALSE(canvas.isTransparent());
163 EXPECT_TRUE(canvas.isCheap());
164 EXPECT_EQ(color, outputColor);
165
166 color = SkColorSetARGB(0, 0, 0, 0);
167 paint.setColor(color);
168 canvas.drawRect(SkRect::MakeWH(383, 383), paint);
169
170 EXPECT_TRUE(canvas.getColorIfSolid(&outputColor));
171 EXPECT_FALSE(canvas.isTransparent());
172 EXPECT_TRUE(canvas.isCheap());
173 EXPECT_EQ(outputColor, SkColorSetARGB(255, 33, 44, 55));
174
175 color = SkColorSetARGB(128, 128, 128, 128);
176 paint.setColor(color);
177 canvas.drawRect(SkRect::MakeWH(383, 383), paint);
178
179 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
180 EXPECT_FALSE(canvas.isTransparent());
181 EXPECT_TRUE(canvas.isCheap());
182
183 paint.setXfermodeMode(SkXfermode::kClear_Mode);
184 canvas.drawRect(SkRect::MakeWH(382, 382), paint);
185
186 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
187 EXPECT_FALSE(canvas.isTransparent());
188 EXPECT_TRUE(canvas.isCheap());
189
190 canvas.drawRect(SkRect::MakeWH(383, 383), paint);
191
192 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
193 EXPECT_TRUE(canvas.isTransparent());
194 EXPECT_TRUE(canvas.isCheap());
195
196 canvas.translate(128, 128);
197 color = SkColorSetARGB(255, 11, 22, 33);
198 paint.setColor(color);
199 paint.setXfermodeMode(SkXfermode::kSrcOver_Mode);
200 canvas.drawRect(SkRect::MakeWH(255, 255), paint);
201
202 EXPECT_TRUE(canvas.getColorIfSolid(&outputColor));
203 EXPECT_FALSE(canvas.isTransparent());
204 EXPECT_TRUE(canvas.isCheap());
205 EXPECT_EQ(color, outputColor);
206
207 canvas.rotate(50);
208 canvas.drawRect(SkRect::MakeWH(255, 255), paint);
209
210 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
211 EXPECT_FALSE(canvas.isTransparent());
212 EXPECT_TRUE(canvas.isCheap());
213 }
214
215 TEST(AnalysisCanvasTest, ClipPath) {
216 SkBitmap emptyBitmap;
217 emptyBitmap.setConfig(SkBitmap::kNo_Config, 255, 255);
218 skia::AnalysisDevice device(emptyBitmap);
219 skia::AnalysisCanvas canvas(&device);
220
221 SkPath path;
222 path.moveTo(0, 0);
223 path.lineTo(255, 0);
224 path.lineTo(255, 255);
225 path.lineTo(0, 255);
226
227 SkColor outputColor;
228 solidColorFill(canvas);
229 canvas.clipPath(path);
230 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
231
232 canvas.save();
233 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
234
235 canvas.clipPath(path);
236 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
237
238 canvas.restore();
239 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
240
241 solidColorFill(canvas);
242 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
243 }
244
245 TEST(AnalysisCanvasTest, SaveLayerRestore) {
246 SkBitmap emptyBitmap;
247 emptyBitmap.setConfig(SkBitmap::kNo_Config, 255, 255);
248 skia::AnalysisDevice device(emptyBitmap);
249 skia::AnalysisCanvas canvas(&device);
250
251 SkColor outputColor;
252 solidColorFill(canvas);
253 EXPECT_TRUE(canvas.getColorIfSolid(&outputColor));
254
255 SkRect bounds = SkRect::MakeWH(255, 255);
256 SkPaint paint;
257 paint.setColor(SkColorSetARGB(255, 255, 255, 255));
258 paint.setXfermodeMode(SkXfermode::kSrcOver_Mode);
259
260 // This should force non-transparency
261 canvas.saveLayer(&bounds, &paint, SkCanvas::kMatrix_SaveFlag);
262 EXPECT_TRUE(canvas.getColorIfSolid(&outputColor));
263 EXPECT_FALSE(canvas.isTransparent());
264
265 transparentFill(canvas);
266 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
267 EXPECT_FALSE(canvas.isTransparent());
268
269 solidColorFill(canvas);
270 EXPECT_TRUE(canvas.getColorIfSolid(&outputColor));
271 EXPECT_FALSE(canvas.isTransparent());
272
273 paint.setXfermodeMode(SkXfermode::kDst_Mode);
274
275 // This should force non-solid color
276 canvas.saveLayer(&bounds, &paint, SkCanvas::kMatrix_SaveFlag);
277 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
278 EXPECT_FALSE(canvas.isTransparent());
279
280 transparentFill(canvas);
281 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
282 EXPECT_FALSE(canvas.isTransparent());
283
284 solidColorFill(canvas);
285 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
286 EXPECT_FALSE(canvas.isTransparent());
287
288 canvas.restore();
289 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
290 EXPECT_FALSE(canvas.isTransparent());
291
292 transparentFill(canvas);
293 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
294 EXPECT_FALSE(canvas.isTransparent());
295
296 solidColorFill(canvas);
297 EXPECT_TRUE(canvas.getColorIfSolid(&outputColor));
298 EXPECT_FALSE(canvas.isTransparent());
299
300 canvas.restore();
301 EXPECT_TRUE(canvas.getColorIfSolid(&outputColor));
302 EXPECT_FALSE(canvas.isTransparent());
303
304 transparentFill(canvas);
305 EXPECT_FALSE(canvas.getColorIfSolid(&outputColor));
306 EXPECT_TRUE(canvas.isTransparent());
307
308 solidColorFill(canvas);
309 EXPECT_TRUE(canvas.getColorIfSolid(&outputColor));
310 EXPECT_FALSE(canvas.isTransparent());
311 }
312
313 } // namespace skia
OLDNEW
« no previous file with comments | « skia/ext/analysis_canvas.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698