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: 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 18 int width() const { return fWidth; } 19 int height() const { return fHeight; } 20 21 protected: 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: 32 Color_FPSBench(void* p, SkColor c, const char name[]) : INHERITED(p) { 33 fColor = c; 34 fName = name; 35 } 36 37 protected: 38 virtual const char* onGetName() { return fName; } 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: 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: 78 virtual const char* onGetName() { return fName.c_str(); } 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 91 static SkBenchmark* FillFactory(void* p) { return SkNEW_ARGS(Color_FPSBench, (p, 0xFFFF0000, "fps_fill")); } 92 static SkBenchmark* BlendFactory(void* p) { return SkNEW_ARGS(Color_FPSBench, (p, 0x80FF0000, "fps_blend")); } 93 static SkBenchmark* BMFactory0(void* p) { return SkNEW_ARGS(Bitmap_FPSBench, (p, SkBitmap::kARGB_8888_Config, false, false)); } 94 static SkBenchmark* BMFactory1(void* p) { return SkNEW_ARGS(Bitmap_FPSBench, (p, SkBitmap::kARGB_8888_Config, false, true)); } 95 static SkBenchmark* BMFactory2(void* p) { return SkNEW_ARGS(Bitmap_FPSBench, (p, SkBitmap::kARGB_8888_Config, true, false)); } 96 static SkBenchmark* BMFactory3(void* p) { return SkNEW_ARGS(Bitmap_FPSBench, (p, SkBitmap::kARGB_8888_Config, true, true)); } 97 static SkBenchmark* BMFactory4(void* p) { return SkNEW_ARGS(Bitmap_FPSBench, (p, SkBitmap::kRGB_565_Config, false, false)); } 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