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>
diff --git a/gm/aaa.cpp b/gm/aaa.cpp
index 72f953a..8893744 100644
--- a/gm/aaa.cpp
+++ b/gm/aaa.cpp
@@ -81,4 +81,86 @@
     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; )