OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/compiler_specific.h" | 5 #include "base/compiler_specific.h" |
6 #include "skia/ext/analysis_canvas.h" | 6 #include "skia/ext/analysis_canvas.h" |
7 #include "skia/ext/refptr.h" | 7 #include "skia/ext/refptr.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 #include "third_party/skia/include/core/SkPicture.h" | 9 #include "third_party/skia/include/core/SkPicture.h" |
10 #include "third_party/skia/include/core/SkPictureRecorder.h" | 10 #include "third_party/skia/include/core/SkPictureRecorder.h" |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 } | 192 } |
193 | 193 |
194 TEST(AnalysisCanvasTest, ClipPath) { | 194 TEST(AnalysisCanvasTest, ClipPath) { |
195 skia::AnalysisCanvas canvas(255, 255); | 195 skia::AnalysisCanvas canvas(255, 255); |
196 | 196 |
197 // Skia will look for paths that are actually rects and treat | 197 // Skia will look for paths that are actually rects and treat |
198 // them as such. We add a divot to the following path to prevent | 198 // them as such. We add a divot to the following path to prevent |
199 // this optimization and truly test clipPath's behavior. | 199 // this optimization and truly test clipPath's behavior. |
200 SkPath path; | 200 SkPath path; |
201 path.moveTo(0, 0); | 201 path.moveTo(0, 0); |
202 path.lineTo(128, 50); | 202 path.lineTo(128, 50); |
203 path.lineTo(255, 0); | 203 path.lineTo(255, 0); |
204 path.lineTo(255, 255); | 204 path.lineTo(255, 255); |
205 path.lineTo(0, 255); | 205 path.lineTo(0, 255); |
206 | 206 |
207 SkColor outputColor; | 207 SkColor outputColor; |
208 SolidColorFill(canvas); | 208 SolidColorFill(canvas); |
209 canvas.clipPath(path); | 209 canvas.clipPath(path); |
210 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); | 210 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); |
211 | 211 |
212 canvas.save(); | 212 canvas.save(); |
213 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); | 213 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); |
214 | 214 |
215 canvas.clipPath(path); | 215 canvas.clipPath(path); |
216 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); | 216 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); |
217 | 217 |
218 canvas.restore(); | 218 canvas.restore(); |
219 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); | 219 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); |
220 | 220 |
221 SolidColorFill(canvas); | 221 SolidColorFill(canvas); |
222 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); | 222 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); |
223 } | 223 } |
224 | 224 |
225 TEST(AnalysisCanvasTest, SaveLayerRestore) { | 225 TEST(AnalysisCanvasTest, SaveLayerRestore) { |
226 skia::AnalysisCanvas canvas(255, 255); | 226 skia::AnalysisCanvas canvas(255, 255); |
227 | 227 |
228 SkColor outputColor; | 228 SkColor outputColor; |
229 SolidColorFill(canvas); | 229 SolidColorFill(canvas); |
230 EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor)); | 230 EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor)); |
231 | 231 |
232 SkRect bounds = SkRect::MakeWH(255, 255); | 232 SkRect bounds = SkRect::MakeWH(255, 255); |
233 SkPaint paint; | 233 SkPaint paint; |
234 paint.setColor(SkColorSetARGB(255, 255, 255, 255)); | 234 paint.setColor(SkColorSetARGB(255, 255, 255, 255)); |
235 paint.setXfermodeMode(SkXfermode::kSrcOver_Mode); | 235 paint.setXfermodeMode(SkXfermode::kSrcOver_Mode); |
236 | 236 |
237 // This should force non-transparency | 237 // This should force non-transparency |
238 canvas.saveLayer(&bounds, &paint); | 238 canvas.saveLayer(&bounds, &paint); |
239 EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor)); | 239 EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor)); |
240 EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor); | 240 EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor); |
241 | 241 |
242 TransparentFill(canvas); | 242 TransparentFill(canvas); |
243 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); | 243 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); |
244 | 244 |
245 SolidColorFill(canvas); | 245 SolidColorFill(canvas); |
246 EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor)); | 246 EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor)); |
247 EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor); | 247 EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor); |
248 | 248 |
249 paint.setXfermodeMode(SkXfermode::kDst_Mode); | 249 paint.setXfermodeMode(SkXfermode::kDst_Mode); |
250 | 250 |
251 // This should force non-solid color | 251 // This should force non-solid color |
252 canvas.saveLayer(&bounds, &paint); | 252 canvas.saveLayer(&bounds, &paint); |
253 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); | 253 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); |
254 | 254 |
255 TransparentFill(canvas); | 255 TransparentFill(canvas); |
256 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); | 256 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); |
257 | 257 |
258 SolidColorFill(canvas); | 258 SolidColorFill(canvas); |
259 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); | 259 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); |
260 | 260 |
261 canvas.restore(); | 261 canvas.restore(); |
262 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); | 262 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); |
263 | 263 |
264 TransparentFill(canvas); | 264 TransparentFill(canvas); |
265 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); | 265 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); |
266 | 266 |
267 SolidColorFill(canvas); | 267 SolidColorFill(canvas); |
268 EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor)); | 268 EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor)); |
269 EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor); | 269 EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor); |
270 | 270 |
271 canvas.restore(); | 271 canvas.restore(); |
272 EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor)); | 272 EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor)); |
273 EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor); | 273 EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor); |
274 | 274 |
275 TransparentFill(canvas); | 275 TransparentFill(canvas); |
276 EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor)); | 276 EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor)); |
277 EXPECT_EQ(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor); | 277 EXPECT_EQ(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor); |
278 | 278 |
279 SolidColorFill(canvas); | 279 SolidColorFill(canvas); |
280 EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor)); | 280 EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor)); |
281 EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor); | 281 EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor); |
282 } | 282 } |
283 | 283 |
284 TEST(AnalysisCanvasTest, EarlyOutNotSolid) { | 284 TEST(AnalysisCanvasTest, EarlyOutNotSolid) { |
285 SkTileGridFactory::TileGridInfo tile_grid_info; | 285 SkRTreeFactory factory; |
286 tile_grid_info.fTileInterval.set(256, 256); | |
287 tile_grid_info.fOffset.setZero(); | |
288 tile_grid_info.fMargin.setEmpty(); | |
289 SkTileGridFactory factory(tile_grid_info); | |
290 SkPictureRecorder recorder; | 286 SkPictureRecorder recorder; |
291 | 287 |
292 // Create a picture with 3 commands, last of which is non-solid. | 288 // Create a picture with 3 commands, last of which is non-solid. |
293 skia::RefPtr<SkCanvas> record_canvas = | 289 skia::RefPtr<SkCanvas> record_canvas = |
294 skia::SharePtr(recorder.beginRecording(256, 256, &factory)); | 290 skia::SharePtr(recorder.beginRecording(256, 256, &factory)); |
295 | 291 |
296 std::string text = "text"; | 292 std::string text = "text"; |
297 SkPoint point = SkPoint::Make(SkIntToScalar(25), SkIntToScalar(25)); | 293 SkPoint point = SkPoint::Make(SkIntToScalar(25), SkIntToScalar(25)); |
298 | 294 |
299 SkPaint paint; | 295 SkPaint paint; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
346 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); | 342 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); |
347 | 343 |
348 canvas.restore(); | 344 canvas.restore(); |
349 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); | 345 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); |
350 | 346 |
351 SolidColorFill(canvas); | 347 SolidColorFill(canvas); |
352 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); | 348 EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor)); |
353 } | 349 } |
354 | 350 |
355 } // namespace skia | 351 } // namespace skia |
OLD | NEW |