| 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 |