aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Yuqian Li <liyuqian@google.com>2016-12-12 16:24:47 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2016-12-12 22:08:38 +0000
commit131c1fb96328ee00cb18f629eddfb665b36e9463 (patch)
treedceab172ffdb2ed7e9328609cb5f3d236c6324f9
parent9d1cc66b6065e7aafc4e999a36c9ec680e4f13b7 (diff)
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 <caryclark@google.com> Commit-Queue: Yuqian Li <liyuqian@google.com>
-rw-r--r--bench/PathBench.cpp46
-rw-r--r--gm/aaa.cpp82
2 files changed, 128 insertions, 0 deletions
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; )