Add drawRegion() API to SkCanvas

This will allow us to optimize for the RectGrid macrobench.
Currently, SkiaGL is much slower than OpenGL.
SkiaGL  12 items/s
OpenGL 160 items/s

This contains everything except for the fast implementation on GPU.

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2277053002

Review-Url: https://codereview.chromium.org/2277053002
diff --git a/gm/drawregion.cpp b/gm/drawregion.cpp
new file mode 100644
index 0000000..1e9d6c5
--- /dev/null
+++ b/gm/drawregion.cpp
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2016 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "gm.h"
+#include "SkCanvas.h"
+
+/**
+ *  This is very similar to the RectGrid macrobench in Android.
+ */
+class DrawRegionGM : public skiagm::GM {
+public:
+    DrawRegionGM() {}
+
+protected:
+    SkString onShortName() override {
+        return SkString("drawregion");
+    }
+
+    SkISize onISize() override {
+        return SkISize::Make(500, 500);
+    }
+
+    bool runAsBench() const override {
+        return true;
+    }
+
+    void onOnceBeforeDraw() override {
+        for (int x = 50; x < 250; x+=2) {
+            for (int y = 50; y < 250; y+=2) {
+                fRegion.op(x, y, x + 1, y + 1, SkRegion::kUnion_Op);
+            }
+        }
+    }
+
+    void onDraw(SkCanvas* canvas) override {
+        SkPaint paint;
+        paint.setStyle(SkPaint::kFill_Style);
+        paint.setColor(0xFFFF00FF);
+        canvas->drawRect(SkRect::MakeLTRB(50.0f, 50.0f, 250.0f, 250.0f), paint);
+
+        paint.setColor(0xFF00FFFF);
+        canvas->drawRegion(fRegion, paint);
+    }
+
+    SkRegion fRegion;
+
+private:
+    typedef skiagm::GM INHERITED;
+};
+DEF_GM( return new DrawRegionGM; )