aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/CoverageBench.cpp
diff options
context:
space:
mode:
authorGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-11-04 20:10:33 +0000
committerGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-11-04 20:10:33 +0000
commitac9d306a92e569e85a7611e9db00943b5b551f1e (patch)
tree168e141c406948aad89ec41bb88b0c3260de2a5c /bench/CoverageBench.cpp
parent8d8bcf9f88be927f6d7e5167bb9220d62bf8afe3 (diff)
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.
R=bsalomon@google.com, mtklein@google.com Review URL: https://codereview.chromium.org/56453002 git-svn-id: http://skia.googlecode.com/svn/trunk@12118 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'bench/CoverageBench.cpp')
-rw-r--r--bench/CoverageBench.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/bench/CoverageBench.cpp b/bench/CoverageBench.cpp
new file mode 100644
index 0000000000..ba35c6a5f1
--- /dev/null
+++ b/bench/CoverageBench.cpp
@@ -0,0 +1,70 @@
+/*
+ * 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.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) )