| Index: skia/ext/analysis_canvas_unittest.cc
|
| diff --git a/skia/ext/analysis_canvas_unittest.cc b/skia/ext/analysis_canvas_unittest.cc
|
| deleted file mode 100644
|
| index 8263075be0fd62b2d67006a3ff8ffe1d330a28f3..0000000000000000000000000000000000000000
|
| --- a/skia/ext/analysis_canvas_unittest.cc
|
| +++ /dev/null
|
| @@ -1,394 +0,0 @@
|
| -// Copyright 2013 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "base/compiler_specific.h"
|
| -#include "skia/ext/analysis_canvas.h"
|
| -#include "skia/ext/refptr.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -#include "third_party/skia/include/core/SkPicture.h"
|
| -#include "third_party/skia/include/core/SkPictureRecorder.h"
|
| -#include "third_party/skia/include/core/SkShader.h"
|
| -#include "third_party/skia/include/effects/SkOffsetImageFilter.h"
|
| -
|
| -namespace {
|
| -
|
| -void SolidColorFill(skia::AnalysisCanvas& canvas) {
|
| - canvas.clear(SkColorSetARGB(255, 255, 255, 255));
|
| -}
|
| -
|
| -void TransparentFill(skia::AnalysisCanvas& canvas) {
|
| - canvas.clear(SkColorSetARGB(0, 0, 0, 0));
|
| -}
|
| -
|
| -} // namespace
|
| -namespace skia {
|
| -
|
| -TEST(AnalysisCanvasTest, EmptyCanvas) {
|
| - skia::AnalysisCanvas canvas(255, 255);
|
| -
|
| - SkColor color;
|
| - EXPECT_TRUE(canvas.GetColorIfSolid(&color));
|
| - EXPECT_EQ(color, SkColorSetARGB(0, 0, 0, 0));
|
| -}
|
| -
|
| -TEST(AnalysisCanvasTest, ClearCanvas) {
|
| - skia::AnalysisCanvas canvas(255, 255);
|
| -
|
| - // Transparent color
|
| - SkColor color = SkColorSetARGB(0, 12, 34, 56);
|
| - canvas.clear(color);
|
| -
|
| - SkColor outputColor;
|
| - EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor));
|
| - EXPECT_EQ(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor);
|
| -
|
| - // Solid color
|
| - color = SkColorSetARGB(255, 65, 43, 21);
|
| - canvas.clear(color);
|
| -
|
| - EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor));
|
| - EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor);
|
| - EXPECT_EQ(outputColor, color);
|
| -
|
| - // Translucent color
|
| - color = SkColorSetARGB(128, 11, 22, 33);
|
| - canvas.clear(color);
|
| -
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - // Test helper methods
|
| - SolidColorFill(canvas);
|
| - EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor));
|
| - EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor);
|
| -
|
| - TransparentFill(canvas);
|
| - EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor));
|
| - EXPECT_EQ(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor);
|
| -}
|
| -
|
| -TEST(AnalysisCanvasTest, ComplexActions) {
|
| - skia::AnalysisCanvas canvas(255, 255);
|
| -
|
| - // Draw paint test.
|
| - SkColor color = SkColorSetARGB(255, 11, 22, 33);
|
| - SkPaint paint;
|
| - paint.setColor(color);
|
| -
|
| - canvas.drawPaint(paint);
|
| -
|
| - SkColor outputColor;
|
| - EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - // Draw points test.
|
| - SkPoint points[4] = {
|
| - SkPoint::Make(0, 0),
|
| - SkPoint::Make(255, 0),
|
| - SkPoint::Make(255, 255),
|
| - SkPoint::Make(0, 255)
|
| - };
|
| -
|
| - SolidColorFill(canvas);
|
| - canvas.drawPoints(SkCanvas::kLines_PointMode, 4, points, paint);
|
| -
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - // Draw oval test.
|
| - SolidColorFill(canvas);
|
| - canvas.drawOval(SkRect::MakeWH(255, 255), paint);
|
| -
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - // Draw bitmap test.
|
| - SolidColorFill(canvas);
|
| - SkBitmap secondBitmap;
|
| - secondBitmap.allocN32Pixels(255, 255);
|
| - canvas.drawBitmap(secondBitmap, 0, 0);
|
| -
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -}
|
| -
|
| -TEST(AnalysisCanvasTest, SimpleDrawRect) {
|
| - skia::AnalysisCanvas canvas(255, 255);
|
| -
|
| - SkColor color = SkColorSetARGB(255, 11, 22, 33);
|
| - SkPaint paint;
|
| - paint.setColor(color);
|
| - canvas.clipRect(SkRect::MakeWH(255, 255));
|
| - canvas.drawRect(SkRect::MakeWH(255, 255), paint);
|
| -
|
| - SkColor outputColor;
|
| - EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor));
|
| - EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor);
|
| - EXPECT_EQ(color, outputColor);
|
| -
|
| - color = SkColorSetARGB(255, 22, 33, 44);
|
| - paint.setColor(color);
|
| - canvas.translate(-128, -128);
|
| - canvas.drawRect(SkRect::MakeWH(382, 382), paint);
|
| -
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - color = SkColorSetARGB(255, 33, 44, 55);
|
| - paint.setColor(color);
|
| - canvas.drawRect(SkRect::MakeWH(383, 383), paint);
|
| -
|
| - EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor));
|
| - EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor);
|
| - EXPECT_EQ(color, outputColor);
|
| -
|
| - color = SkColorSetARGB(0, 0, 0, 0);
|
| - paint.setColor(color);
|
| - canvas.drawRect(SkRect::MakeWH(383, 383), paint);
|
| -
|
| - // This test relies on canvas treating a paint with 0-color as a no-op
|
| - // thus not changing its "is_solid" status.
|
| - EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor));
|
| - EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor);
|
| - EXPECT_EQ(outputColor, SkColorSetARGB(255, 33, 44, 55));
|
| -
|
| - color = SkColorSetARGB(128, 128, 128, 128);
|
| - paint.setColor(color);
|
| - canvas.drawRect(SkRect::MakeWH(383, 383), paint);
|
| -
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - paint.setXfermodeMode(SkXfermode::kClear_Mode);
|
| - canvas.drawRect(SkRect::MakeWH(382, 382), paint);
|
| -
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - canvas.drawRect(SkRect::MakeWH(383, 383), paint);
|
| -
|
| - EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor));
|
| - EXPECT_EQ(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor);
|
| -
|
| - canvas.translate(128, 128);
|
| - color = SkColorSetARGB(255, 11, 22, 33);
|
| - paint.setColor(color);
|
| - paint.setXfermodeMode(SkXfermode::kSrcOver_Mode);
|
| - canvas.drawRect(SkRect::MakeWH(255, 255), paint);
|
| -
|
| - EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor));
|
| - EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor);
|
| - EXPECT_EQ(color, outputColor);
|
| -
|
| - canvas.rotate(50);
|
| - canvas.drawRect(SkRect::MakeWH(255, 255), paint);
|
| -
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -}
|
| -
|
| -TEST(AnalysisCanvasTest, FilterPaint) {
|
| - skia::AnalysisCanvas canvas(255, 255);
|
| - SkPaint paint;
|
| -
|
| - skia::RefPtr<SkImageFilter> filter = skia::AdoptRef(SkOffsetImageFilter::Create(10, 10));
|
| - paint.setImageFilter(filter.get());
|
| - canvas.drawRect(SkRect::MakeWH(255, 255), paint);
|
| -
|
| - SkColor outputColor;
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -}
|
| -
|
| -TEST(AnalysisCanvasTest, ClipPath) {
|
| - skia::AnalysisCanvas canvas(255, 255);
|
| -
|
| - // Skia will look for paths that are actually rects and treat
|
| - // them as such. We add a divot to the following path to prevent
|
| - // this optimization and truly test clipPath's behavior.
|
| - SkPath path;
|
| - path.moveTo(0, 0);
|
| - path.lineTo(128, 50);
|
| - path.lineTo(255, 0);
|
| - path.lineTo(255, 255);
|
| - path.lineTo(0, 255);
|
| -
|
| - SkColor outputColor;
|
| - SolidColorFill(canvas);
|
| - canvas.clipPath(path);
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - canvas.save();
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - canvas.clipPath(path);
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - canvas.restore();
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - SolidColorFill(canvas);
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -}
|
| -
|
| -TEST(AnalysisCanvasTest, SaveLayerWithXfermode) {
|
| - skia::AnalysisCanvas canvas(255, 255);
|
| - SkRect bounds = SkRect::MakeWH(255, 255);
|
| - SkColor outputColor;
|
| -
|
| - EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor));
|
| - EXPECT_EQ(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor);
|
| - SkPaint paint;
|
| -
|
| - // Note: nothing is draw to the the save layer, but solid color
|
| - // and transparency are handled conservatively in case the layer's
|
| - // SkPaint draws something. For example, there could be an
|
| - // SkPictureImageFilter. If someday analysis_canvas starts doing
|
| - // a deeper analysis of the SkPaint, this test may need to be
|
| - // redesigned.
|
| - TransparentFill(canvas);
|
| - EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor));
|
| - EXPECT_EQ(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor);
|
| - paint.setXfermodeMode(SkXfermode::kSrc_Mode);
|
| - canvas.saveLayer(&bounds, &paint);
|
| - canvas.restore();
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - TransparentFill(canvas);
|
| - EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor));
|
| - EXPECT_EQ(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor);
|
| - paint.setXfermodeMode(SkXfermode::kSrcOver_Mode);
|
| - canvas.saveLayer(&bounds, &paint);
|
| - canvas.restore();
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - // Layer with dst xfermode is a no-op, so this is the only case
|
| - // where solid color is unaffected by the layer.
|
| - TransparentFill(canvas);
|
| - EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor));
|
| - EXPECT_EQ(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor);
|
| - paint.setXfermodeMode(SkXfermode::kDst_Mode);
|
| - canvas.saveLayer(&bounds, &paint);
|
| - canvas.restore();
|
| - EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor));
|
| - EXPECT_EQ(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor);
|
| -}
|
| -
|
| -TEST(AnalysisCanvasTest, SaveLayerRestore) {
|
| - skia::AnalysisCanvas canvas(255, 255);
|
| -
|
| - SkColor outputColor;
|
| - SolidColorFill(canvas);
|
| - EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - SkRect bounds = SkRect::MakeWH(255, 255);
|
| - SkPaint paint;
|
| - paint.setColor(SkColorSetARGB(255, 255, 255, 255));
|
| - paint.setXfermodeMode(SkXfermode::kSrcOver_Mode);
|
| -
|
| - // This should force non-transparency
|
| - canvas.saveLayer(&bounds, &paint);
|
| - EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor));
|
| - EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor);
|
| -
|
| - TransparentFill(canvas);
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - SolidColorFill(canvas);
|
| - EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor));
|
| - EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor);
|
| -
|
| - paint.setXfermodeMode(SkXfermode::kDst_Mode);
|
| -
|
| - // This should force non-solid color
|
| - canvas.saveLayer(&bounds, &paint);
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - TransparentFill(canvas);
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - SolidColorFill(canvas);
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - canvas.restore();
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - TransparentFill(canvas);
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - SolidColorFill(canvas);
|
| - EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor));
|
| - EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor);
|
| -
|
| - canvas.restore();
|
| - EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor));
|
| - EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor);
|
| -
|
| - TransparentFill(canvas);
|
| - EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor));
|
| - EXPECT_EQ(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor);
|
| -
|
| - SolidColorFill(canvas);
|
| - EXPECT_TRUE(canvas.GetColorIfSolid(&outputColor));
|
| - EXPECT_NE(static_cast<SkColor>(SK_ColorTRANSPARENT), outputColor);
|
| -}
|
| -
|
| -TEST(AnalysisCanvasTest, EarlyOutNotSolid) {
|
| - SkRTreeFactory factory;
|
| - SkPictureRecorder recorder;
|
| -
|
| - // Create a picture with 3 commands, last of which is non-solid.
|
| - skia::RefPtr<SkCanvas> record_canvas =
|
| - skia::SharePtr(recorder.beginRecording(256, 256, &factory));
|
| -
|
| - std::string text = "text";
|
| - SkPoint point = SkPoint::Make(SkIntToScalar(25), SkIntToScalar(25));
|
| -
|
| - SkPaint paint;
|
| - paint.setColor(SkColorSetARGB(255, 255, 255, 255));
|
| - paint.setXfermodeMode(SkXfermode::kSrcOver_Mode);
|
| -
|
| - record_canvas->drawRect(SkRect::MakeWH(256, 256), paint);
|
| - record_canvas->drawRect(SkRect::MakeWH(256, 256), paint);
|
| - record_canvas->drawText(
|
| - text.c_str(), text.length(), point.fX, point.fY, paint);
|
| -
|
| - skia::RefPtr<SkPicture> picture = skia::AdoptRef(recorder.endRecording());
|
| -
|
| - // Draw the picture into the analysis canvas, using the canvas as a callback
|
| - // as well.
|
| - skia::AnalysisCanvas canvas(256, 256);
|
| - picture->playback(&canvas, &canvas);
|
| -
|
| - // Ensure that canvas is not solid.
|
| - SkColor output_color;
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&output_color));
|
| -
|
| - // Verify that we aborted drawing.
|
| - EXPECT_TRUE(canvas.abortDrawing());
|
| -
|
| -}
|
| -
|
| -TEST(AnalysisCanvasTest, ClipComplexRegion) {
|
| - skia::AnalysisCanvas canvas(255, 255);
|
| -
|
| - SkPath path;
|
| - path.moveTo(0, 0);
|
| - path.lineTo(128, 50);
|
| - path.lineTo(255, 0);
|
| - path.lineTo(255, 255);
|
| - path.lineTo(0, 255);
|
| - SkIRect pathBounds = path.getBounds().round();
|
| - SkRegion region;
|
| - region.setPath(path, SkRegion(pathBounds));
|
| -
|
| - SkColor outputColor;
|
| - SolidColorFill(canvas);
|
| - canvas.clipRegion(region);
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - canvas.save();
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - canvas.clipRegion(region);
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - canvas.restore();
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -
|
| - SolidColorFill(canvas);
|
| - EXPECT_FALSE(canvas.GetColorIfSolid(&outputColor));
|
| -}
|
| -
|
| -} // namespace skia
|
|
|