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) )