Index: bench/DrawBitmapAABench.cpp |
diff --git a/bench/DrawBitmapAABench.cpp b/bench/DrawBitmapAABench.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1738ce71d57d8e41866d790852136ed78c44f544 |
--- /dev/null |
+++ b/bench/DrawBitmapAABench.cpp |
@@ -0,0 +1,78 @@ |
+/* |
+ * Copyright 2015 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+#include "Benchmark.h" |
+#include "SkCanvas.h" |
+#include "SkMatrix.h" |
+#include "SkPaint.h" |
+#include "SkString.h" |
+ |
+/** |
+ * This bench measures the rendering time of SkCanvas::drawBitmap with different anti-aliasing / |
+ * matrix combinations. |
+ */ |
+ |
+class DrawBitmapAABench : public Benchmark { |
+public: |
+ DrawBitmapAABench(bool doAA, const SkMatrix& matrix, const char name[]) |
+ : fMatrix(matrix) |
+ , fName("draw_bitmap_") { |
+ |
+ fPaint.setAntiAlias(doAA); |
+ fName.appendf("%s_%s", doAA ? "aa" : "noaa", name); |
+ } |
+ |
+protected: |
+ const char* onGetName() override { |
+ return fName.c_str(); |
+ } |
+ |
+ void onPreDraw() override { |
+ fBitmap.allocN32Pixels(200, 200); |
+ fBitmap.eraseARGB(255, 0, 255, 0); |
+ } |
+ |
+ void onDraw(const int loops, SkCanvas* canvas) override { |
+ canvas->concat(fMatrix); |
+ for (int i = 0; i < loops; i++) { |
+ canvas->drawBitmap(fBitmap, 0, 0, &fPaint); |
+ } |
+ } |
+ |
+private: |
+ SkPaint fPaint; |
+ SkMatrix fMatrix; |
+ SkString fName; |
+ SkBitmap fBitmap; |
+ |
+ typedef Benchmark INHERITED; |
+}; |
+ |
+DEF_BENCH( return new DrawBitmapAABench(false, SkMatrix::MakeScale(1), "ident"); ) |
+ |
+DEF_BENCH( return new DrawBitmapAABench(false, SkMatrix::MakeScale(1.17f), "scale"); ) |
+ |
+DEF_BENCH( return new DrawBitmapAABench(false, SkMatrix::MakeTrans(17.5f, 17.5f), "translate"); ) |
+ |
+DEF_BENCH( |
+ SkMatrix m; |
+ m.reset(); |
+ m.preRotate(15); |
+ return new DrawBitmapAABench(false, m, "rotate"); |
+) |
+ |
+DEF_BENCH( return new DrawBitmapAABench(true, SkMatrix::MakeScale(1), "ident"); ) |
+ |
+DEF_BENCH( return new DrawBitmapAABench(true, SkMatrix::MakeScale(1.17f), "scale"); ) |
+ |
+DEF_BENCH( return new DrawBitmapAABench(true, SkMatrix::MakeTrans(17.5f, 17.5f), "translate"); ) |
+ |
+DEF_BENCH( |
+ SkMatrix m; |
+ m.reset(); |
+ m.preRotate(15); |
+ return new DrawBitmapAABench(true, m, "rotate"); |
+) |