From f0ebdd7463275f8183df94f1f8a8ec3761652e7c Mon Sep 17 00:00:00 2001 From: fmalita Date: Mon, 6 Jul 2015 05:25:17 -0700 Subject: Add a bench for measuring drawBitmap anti-aliasing overhead R=reed@google.com,mtklein@google.com Review URL: https://codereview.chromium.org/1207403007 --- bench/DrawBitmapAABench.cpp | 78 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 bench/DrawBitmapAABench.cpp (limited to 'bench/DrawBitmapAABench.cpp') diff --git a/bench/DrawBitmapAABench.cpp b/bench/DrawBitmapAABench.cpp new file mode 100644 index 0000000000..1738ce71d5 --- /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"); +) -- cgit v1.2.3