From 131c1fb96328ee00cb18f629eddfb665b36e9463 Mon Sep 17 00:00:00 2001 From: Yuqian Li Date: Mon, 12 Dec 2016 16:24:47 -0500 Subject: Add GMs and benchs for concave Analytic AA BUG=skia: Change-Id: I2ed6e2c4f81dc9d5c53b07332c0063f42c6b3c79 Reviewed-on: https://skia-review.googlesource.com/5771 Reviewed-by: Cary Clark Commit-Queue: Yuqian Li --- bench/PathBench.cpp | 46 ++++++++++++++++++++++++++++++ gm/aaa.cpp | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 128 insertions(+) diff --git a/bench/PathBench.cpp b/bench/PathBench.cpp index 67e002ba24..4ca4401163 100644 --- a/bench/PathBench.cpp +++ b/bench/PathBench.cpp @@ -173,6 +173,47 @@ private: typedef PathBench INHERITED; }; +// Test max speedup of Analytic AA for concave paths +class AAAConcavePathBench : public PathBench { +public: + AAAConcavePathBench(Flags flags) : INHERITED(flags) {} + + void appendName(SkString* name) override { + name->append("concave_aaa"); + } + + void makePath(SkPath* path) override { + path->moveTo(10, 10); + path->lineTo(15, 10); + path->lineTo(15, 5); + path->lineTo(40, 40); + path->close(); + } + +private: + typedef PathBench INHERITED; +}; + +// Test max speedup of Analytic AA for convex paths +class AAAConvexPathBench : public PathBench { +public: + AAAConvexPathBench(Flags flags) : INHERITED(flags) {} + + void appendName(SkString* name) override { + name->append("convex_aaa"); + } + + void makePath(SkPath* path) override { + path->moveTo(10, 10); + path->lineTo(15, 10); + path->lineTo(40, 50); + path->close(); + } + +private: + typedef PathBench INHERITED; +}; + class SawToothPathBench : public PathBench { public: SawToothPathBench(Flags flags) : INHERITED(flags) {} @@ -1049,6 +1090,11 @@ DEF_BENCH( return new CirclePathBench(FLAGS01); ) DEF_BENCH( return new CirclePathBench(FLAGS10); ) DEF_BENCH( return new CirclePathBench(FLAGS11); ) +DEF_BENCH( return new AAAConcavePathBench(FLAGS00); ) +DEF_BENCH( return new AAAConcavePathBench(FLAGS10); ) +DEF_BENCH( return new AAAConvexPathBench(FLAGS00); ) +DEF_BENCH( return new AAAConvexPathBench(FLAGS10); ) + DEF_BENCH( return new SawToothPathBench(FLAGS00); ) DEF_BENCH( return new SawToothPathBench(FLAGS01); ) diff --git a/gm/aaa.cpp b/gm/aaa.cpp index 72f953a701..889374463a 100644 --- a/gm/aaa.cpp +++ b/gm/aaa.cpp @@ -81,4 +81,86 @@ private: typedef skiagm::GM INHERITED; }; +class AnalyticAntiAliasGeneralGM : public skiagm::GM { +public: + AnalyticAntiAliasGeneralGM() {} + +protected: + + SkString onShortName() override { + return SkString("analytic_antialias_general"); + } + + SkISize onISize() override { + return SkISize::Make(W, H); + } + + void onDraw(SkCanvas* canvas) override { + SkPaint p; + p.setColor(SK_ColorRED); + p.setAntiAlias(true); + + canvas->clear(0xFFFFFFFF); + + canvas->save(); + canvas->rotate(1); + const SkScalar R = 115.2f, C = 128.0f; + SkPath path; + path.moveTo(C + R, C); + for (int i = 1; i < 8; ++i) { + SkScalar a = 2.6927937f * i; + SkScalar cosine; + SkScalar sine = SkScalarSinCos(a, &cosine); + path.lineTo(C + R * cosine, C + R * sine); + } + canvas->drawPath(path, p); + canvas->restore(); + + canvas->save(); + canvas->translate(200, 0); + canvas->rotate(1); + p.setStyle(SkPaint::kStroke_Style); + p.setStrokeWidth(5); + canvas->drawPath(path, p); + canvas->restore(); + } + +private: + typedef skiagm::GM INHERITED; +}; + +class AnalyticAntiAliasInverseGM : public skiagm::GM { +public: + AnalyticAntiAliasInverseGM() {} + +protected: + + SkString onShortName() override { + return SkString("analytic_antialias_inverse"); + } + + SkISize onISize() override { + return SkISize::Make(W, H); + } + + void onDraw(SkCanvas* canvas) override { + SkPaint p; + p.setColor(SK_ColorRED); + p.setAntiAlias(true); + + canvas->save(); + + SkPath path; + path.addCircle(100, 100, 30); + path.setFillType(SkPath::kInverseWinding_FillType); + canvas->drawPath(path, p); + canvas->restore(); + } + +private: + typedef skiagm::GM INHERITED; +}; + DEF_GM( return new AnalyticAntiAliasConvexGM; ) +DEF_GM( return new AnalyticAntiAliasGeneralGM; ) +DEF_GM( return new AnalyticAntiAliasInverseGM; ) -- cgit v1.2.3