| |
| /* |
| * Copyright 2011 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| #include "SkBenchmark.h" |
| #include "SkCanvas.h" |
| #include "SkPaint.h" |
| #include "SkRandom.h" |
| #include "SkString.h" |
| |
| class FPSBench : public SkBenchmark { |
| int32_t fWidth; |
| int32_t fHeight; |
| public: |
| FPSBench(void* p) : INHERITED(p) { |
| fWidth = 640; |
| (void)this->findDefine32("width", &fWidth); |
| fHeight = 480; |
| (void)this->findDefine32("height", &fHeight); |
| } |
| |
| int width() const { return fWidth; } |
| int height() const { return fHeight; } |
| |
| protected: |
| virtual SkIPoint onGetSize() { return SkIPoint::Make(fWidth, fHeight); } |
| |
| private: |
| typedef SkBenchmark INHERITED; |
| }; |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| class Color_FPSBench : public FPSBench { |
| public: |
| Color_FPSBench(void* p, SkColor c, const char name[]) : INHERITED(p) { |
| fColor = c; |
| fName = name; |
| } |
| |
| protected: |
| virtual const char* onGetName() { return fName; } |
| virtual void onDraw(SkCanvas* canvas) { |
| canvas->drawColor(fColor); |
| } |
| |
| private: |
| const char* fName; |
| SkColor fColor; |
| |
| typedef FPSBench INHERITED; |
| }; |
| |
| class Bitmap_FPSBench : public FPSBench { |
| public: |
| Bitmap_FPSBench(void* p, SkBitmap::Config config, bool doOpaque, bool doScale) : INHERITED(p) { |
| fBitmap.setConfig(config, this->width(), this->height()); |
| fBitmap.allocPixels(); |
| fBitmap.eraseColor(0xFFFF0000); |
| if (doOpaque) { |
| fBitmap.setIsOpaque(true); |
| } |
| |
| const char* configStr = "565"; |
| if (config == SkBitmap::kARGB_8888_Config) { |
| if (doOpaque) { |
| configStr = "X888"; |
| } else { |
| configStr = "8888"; |
| } |
| } |
| fName.printf("fps_bitmap_%s_%s", configStr, |
| doScale ? "scale" : "noscale"); |
| |
| fMatrix.reset(); |
| if (doScale) { |
| fMatrix.setScale(SkIntToScalar(3)/2, SkIntToScalar(3)/2); |
| } |
| |
| } |
| |
| protected: |
| virtual const char* onGetName() { return fName.c_str(); } |
| virtual void onDraw(SkCanvas* canvas) { |
| this->setupPaint(&fPaint); |
| canvas->drawBitmapMatrix(fBitmap, fMatrix, &fPaint); |
| } |
| |
| private: |
| SkBitmap fBitmap; |
| SkMatrix fMatrix; |
| SkPaint fPaint; |
| SkString fName; |
| |
| typedef FPSBench INHERITED; |
| }; |
| |
| static SkBenchmark* FillFactory(void* p) { return SkNEW_ARGS(Color_FPSBench, (p, 0xFFFF0000, "fps_fill")); } |
| static SkBenchmark* BlendFactory(void* p) { return SkNEW_ARGS(Color_FPSBench, (p, 0x80FF0000, "fps_blend")); } |
| static SkBenchmark* BMFactory0(void* p) { return SkNEW_ARGS(Bitmap_FPSBench, (p, SkBitmap::kARGB_8888_Config, false, false)); } |
| static SkBenchmark* BMFactory1(void* p) { return SkNEW_ARGS(Bitmap_FPSBench, (p, SkBitmap::kARGB_8888_Config, false, true)); } |
| static SkBenchmark* BMFactory2(void* p) { return SkNEW_ARGS(Bitmap_FPSBench, (p, SkBitmap::kARGB_8888_Config, true, false)); } |
| static SkBenchmark* BMFactory3(void* p) { return SkNEW_ARGS(Bitmap_FPSBench, (p, SkBitmap::kARGB_8888_Config, true, true)); } |
| static SkBenchmark* BMFactory4(void* p) { return SkNEW_ARGS(Bitmap_FPSBench, (p, SkBitmap::kRGB_565_Config, false, false)); } |
| static SkBenchmark* BMFactory5(void* p) { return SkNEW_ARGS(Bitmap_FPSBench, (p, SkBitmap::kRGB_565_Config, false, true)); } |
| |
| static BenchRegistry gFillReg(FillFactory); |
| static BenchRegistry gBlendReg(BlendFactory); |
| static BenchRegistry gBMReg0(BMFactory0); |
| static BenchRegistry gBMReg1(BMFactory1); |
| static BenchRegistry gBMReg2(BMFactory2); |
| static BenchRegistry gBMReg3(BMFactory3); |
| static BenchRegistry gBMReg4(BMFactory4); |
| static BenchRegistry gBMReg5(BMFactory5); |
| |