1 #include "SkBenchmark.h"
2 #include "SkCanvas.h"
3 #include "SkPaint.h"
4 #include "SkRandom.h"
5 #include "SkString.h"
6
7 class FPSBench : public SkBenchmark {
8 int32_t fWidth;
9 int32_t fHeight;
10 public:
FPSBench(void * p)11 FPSBench(void* p) : INHERITED(p) {
12 fWidth = 640;
13 (void)this->findDefine32("width", &fWidth);
14 fHeight = 480;
15 (void)this->findDefine32("height", &fHeight);
16 }
17
width() const18 int width() const { return fWidth; }
height() const19 int height() const { return fHeight; }
20
21 protected:
onGetSize()22 virtual SkIPoint onGetSize() { return SkIPoint::Make(fWidth, fHeight); }
23
24 private:
25 typedef SkBenchmark INHERITED;
26 };
27
28 ///////////////////////////////////////////////////////////////////////////////
29
30 class Color_FPSBench : public FPSBench {
31 public:
Color_FPSBench(void * p,SkColor c,const char name[])32 Color_FPSBench(void* p, SkColor c, const char name[]) : INHERITED(p) {
33 fColor = c;
34 fName = name;
35 }
36
37 protected:
onGetName()38 virtual const char* onGetName() { return fName; }
onDraw(SkCanvas * canvas)39 virtual void onDraw(SkCanvas* canvas) {
40 canvas->drawColor(fColor);
41 }
42
43 private:
44 const char* fName;
45 SkColor fColor;
46
47 typedef FPSBench INHERITED;
48 };
49
50 class Bitmap_FPSBench : public FPSBench {
51 public:
Bitmap_FPSBench(void * p,SkBitmap::Config config,bool doOpaque,bool doScale)52 Bitmap_FPSBench(void* p, SkBitmap::Config config, bool doOpaque, bool doScale) : INHERITED(p) {
53 fBitmap.setConfig(config, this->width(), this->height());
54 fBitmap.allocPixels();
55 fBitmap.eraseColor(0xFFFF0000);
56 if (doOpaque) {
57 fBitmap.setIsOpaque(true);
58 }
59
60 const char* configStr = "565";
61 if (config == SkBitmap::kARGB_8888_Config) {
62 if (doOpaque) {
63 configStr = "X888";
64 } else {
65 configStr = "8888";
66 }
67 }
68 fName.printf("fps_bitmap_%s_%s", configStr,
69 doScale ? "scale" : "noscale");
70
71 fMatrix.reset();
72 if (doScale) {
73 fMatrix.setScale(SkIntToScalar(3)/2, SkIntToScalar(3)/2);
74 }
75 }
76
77 protected:
onGetName()78 virtual const char* onGetName() { return fName.c_str(); }
onDraw(SkCanvas * canvas)79 virtual void onDraw(SkCanvas* canvas) {
80 canvas->drawBitmapMatrix(fBitmap, fMatrix);
81 }
82
83 private:
84 SkBitmap fBitmap;
85 SkMatrix fMatrix;
86 SkString fName;
87
88 typedef FPSBench INHERITED;
89 };
90
FillFactory(void * p)91 static SkBenchmark* FillFactory(void* p) { return SkNEW_ARGS(Color_FPSBench, (p, 0xFFFF0000, "fps_fill")); }
BlendFactory(void * p)92 static SkBenchmark* BlendFactory(void* p) { return SkNEW_ARGS(Color_FPSBench, (p, 0x80FF0000, "fps_blend")); }
BMFactory0(void * p)93 static SkBenchmark* BMFactory0(void* p) { return SkNEW_ARGS(Bitmap_FPSBench, (p, SkBitmap::kARGB_8888_Config, false, false)); }
BMFactory1(void * p)94 static SkBenchmark* BMFactory1(void* p) { return SkNEW_ARGS(Bitmap_FPSBench, (p, SkBitmap::kARGB_8888_Config, false, true)); }
BMFactory2(void * p)95 static SkBenchmark* BMFactory2(void* p) { return SkNEW_ARGS(Bitmap_FPSBench, (p, SkBitmap::kARGB_8888_Config, true, false)); }
BMFactory3(void * p)96 static SkBenchmark* BMFactory3(void* p) { return SkNEW_ARGS(Bitmap_FPSBench, (p, SkBitmap::kARGB_8888_Config, true, true)); }
BMFactory4(void * p)97 static SkBenchmark* BMFactory4(void* p) { return SkNEW_ARGS(Bitmap_FPSBench, (p, SkBitmap::kRGB_565_Config, false, false)); }
BMFactory5(void * p)98 static SkBenchmark* BMFactory5(void* p) { return SkNEW_ARGS(Bitmap_FPSBench, (p, SkBitmap::kRGB_565_Config, false, true)); }
99
100 static BenchRegistry gFillReg(FillFactory);
101 static BenchRegistry gBlendReg(BlendFactory);
102 static BenchRegistry gBMReg0(BMFactory0);
103 static BenchRegistry gBMReg1(BMFactory1);
104 static BenchRegistry gBMReg2(BMFactory2);
105 static BenchRegistry gBMReg3(BMFactory3);
106 static BenchRegistry gBMReg4(BMFactory4);
107 static BenchRegistry gBMReg5(BMFactory5);
108
109