Revert "Revert "speed up A8 by creating a new entry-point in SkDraw that blits the path's coverage directly into an A8 target, regardless of the previous pixel values.""

This reverts commit 3c77887b3eb2d32ab668ab4e5f2f9e79103956e8.

BUG=

Review URL: https://codereview.chromium.org/50673005

git-svn-id: http://skia.googlecode.com/svn/trunk@12167 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/bench/CoverageBench.cpp b/bench/CoverageBench.cpp
new file mode 100644
index 0000000..de09733
--- /dev/null
+++ b/bench/CoverageBench.cpp
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "SkBenchmark.h"
+#include "SkBitmap.h"
+#include "SkCanvas.h"
+#include "SkColorPriv.h"
+#include "SkDraw.h"
+#include "SkMatrix.h"
+#include "SkPath.h"
+#include "SkRasterClip.h"
+
+class DrawPathBench : public SkBenchmark {
+    SkPaint     fPaint;
+    SkString    fName;
+    SkPath      fPath;
+    SkRasterClip fRC;
+    SkBitmap    fBitmap;
+    SkMatrix    fIdentity;
+    SkDraw      fDraw;
+    bool        fDrawCoverage;
+public:
+    DrawPathBench(bool drawCoverage) : fDrawCoverage(drawCoverage) {
+        fPaint.setAntiAlias(true);
+        fName.printf("draw_coverage_%s", drawCoverage ? "true" : "false");
+
+        fPath.moveTo(0, 0);
+        fPath.quadTo(500, 0, 500, 500);
+        fPath.quadTo(250, 0, 0, 500);
+
+        fBitmap.setConfig(SkBitmap::kA8_Config, 500, 500);
+        fBitmap.allocPixels();
+
+        fIdentity.setIdentity();
+        fRC.setRect(fPath.getBounds().round());
+
+        fDraw.fBitmap   = &fBitmap;
+        fDraw.fMatrix   = &fIdentity;
+        fDraw.fClip     = &fRC.bwRgn();
+        fDraw.fRC       = &fRC;
+    }
+    
+protected:
+    virtual const char* onGetName() SK_OVERRIDE {
+        return fName.c_str();
+    }
+    
+    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
+        if (fDrawCoverage) {
+            for (int i = 0; i < this->getLoops(); ++i) {
+                fDraw.drawPathCoverage(fPath, fPaint);
+            }
+        } else {
+            for (int i = 0; i < this->getLoops(); ++i) {
+                fDraw.drawPath(fPath, fPaint);
+            }
+        }
+    }
+    
+private:
+    typedef SkBenchmark INHERITED;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+
+DEF_BENCH( return new DrawPathBench(false) )
+DEF_BENCH( return new DrawPathBench(true) )