blob: 21873469289bcf452e69f4bf8ec84cb6b08067c4 [file] [log] [blame]
humper@google.comb0889472013-07-09 21:37:14 +00001/*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "SkBenchmark.h"
9#include "SkCanvas.h"
10#include "SkPaint.h"
11#include "SkRandom.h"
12#include "SkShader.h"
13#include "SkString.h"
14#include "SkBlurMask.h"
15
16class BitmapScaleBench: public SkBenchmark {
17 int fLoopCount;
18 int fInputSize;
19 int fOutputSize;
20 SkString fName;
21
22public:
23 BitmapScaleBench(void *param, int is, int os) : INHERITED(param) {
24 fInputSize = is;
25 fOutputSize = os;
26
humper@google.com523521c2013-07-11 20:28:30 +000027 fLoopCount = 20;
humper@google.comb0889472013-07-09 21:37:14 +000028 }
29
30protected:
skia.committer@gmail.com9e1ec1a2013-07-10 07:00:58 +000031
humper@google.comb0889472013-07-09 21:37:14 +000032 SkBitmap fInputBitmap, fOutputBitmap;
33 SkMatrix fMatrix;
skia.committer@gmail.com9e1ec1a2013-07-10 07:00:58 +000034
humper@google.comb0889472013-07-09 21:37:14 +000035 virtual const char* onGetName() {
36 return fName.c_str();
37 }
38
39 int inputSize() const {
40 return fInputSize;
41 }
skia.committer@gmail.com9e1ec1a2013-07-10 07:00:58 +000042
humper@google.comb0889472013-07-09 21:37:14 +000043 int outputSize() const {
44 return fOutputSize;
45 }
skia.committer@gmail.com9e1ec1a2013-07-10 07:00:58 +000046
humper@google.comb0889472013-07-09 21:37:14 +000047 float scale() const {
48 return float(outputSize())/inputSize();
49 }
skia.committer@gmail.com9e1ec1a2013-07-10 07:00:58 +000050
humper@google.comb0889472013-07-09 21:37:14 +000051 SkIPoint onGetSize() SK_OVERRIDE {
52 return SkIPoint::Make( fOutputSize, fOutputSize );
53 }
54
55 void setName(const char * name) {
56 fName.printf( "bitmap_scale_%s_%d_%d", name, fInputSize, fOutputSize );
57 }
skia.committer@gmail.com9e1ec1a2013-07-10 07:00:58 +000058
humper@google.comb0889472013-07-09 21:37:14 +000059 virtual void onPreDraw() {
60 fInputBitmap.setConfig(SkBitmap::kARGB_8888_Config, fInputSize, fInputSize);
61 fInputBitmap.allocPixels();
62 fInputBitmap.eraseColor(SK_ColorWHITE);
63 fInputBitmap.setIsOpaque(true);
skia.committer@gmail.com9e1ec1a2013-07-10 07:00:58 +000064
humper@google.comb0889472013-07-09 21:37:14 +000065 fOutputBitmap.setConfig(SkBitmap::kARGB_8888_Config, fOutputSize, fOutputSize);
66 fOutputBitmap.allocPixels();
67 fOutputBitmap.setIsOpaque(true);
skia.committer@gmail.com9e1ec1a2013-07-10 07:00:58 +000068
humper@google.comb0889472013-07-09 21:37:14 +000069 fMatrix.setScale( scale(), scale() );
70 }
71
72 virtual void onDraw(SkCanvas*) {
73 SkPaint paint;
74 this->setupPaint(&paint);
75
76 preBenchSetup();
77
78 for (int i = 0; i < SkBENCHLOOP(fLoopCount); i++) {
79 doScaleImage();
80 }
81 }
82
83 virtual void doScaleImage() = 0;
84 virtual void preBenchSetup() {}
85private:
86 typedef SkBenchmark INHERITED;
87};
88
89class BitmapFilterScaleBench: public BitmapScaleBench {
90 public:
91 BitmapFilterScaleBench(void *param, int is, int os) : INHERITED(param, is, os) {
92 setName( "filter" );
93 }
94protected:
95 virtual void doScaleImage() SK_OVERRIDE {
96 SkCanvas canvas( fOutputBitmap );
97 SkPaint paint;
skia.committer@gmail.com9e1ec1a2013-07-10 07:00:58 +000098
reed@google.com9cfc83c2013-07-22 17:18:18 +000099 paint.setFilterLevel(SkPaint::kHigh_FilterLevel);
humper@google.comb0889472013-07-09 21:37:14 +0000100 canvas.drawBitmapMatrix( fInputBitmap, fMatrix, &paint );
101 }
102private:
103 typedef BitmapScaleBench INHERITED;
104};
105
humper@google.comb0889472013-07-09 21:37:14 +0000106DEF_BENCH(return new BitmapFilterScaleBench(p, 10, 90);)
107DEF_BENCH(return new BitmapFilterScaleBench(p, 30, 90);)
108DEF_BENCH(return new BitmapFilterScaleBench(p, 80, 90);)
humper@google.com523521c2013-07-11 20:28:30 +0000109DEF_BENCH(return new BitmapFilterScaleBench(p, 90, 90);)
110DEF_BENCH(return new BitmapFilterScaleBench(p, 90, 80);)
111DEF_BENCH(return new BitmapFilterScaleBench(p, 90, 30);)
112DEF_BENCH(return new BitmapFilterScaleBench(p, 90, 10);)
113DEF_BENCH(return new BitmapFilterScaleBench(p, 256, 64);)
114DEF_BENCH(return new BitmapFilterScaleBench(p, 64, 256);)