• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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