From: reed@android.com Date: Mon, 22 Feb 2010 19:50:13 +0000 (+0000) Subject: add FPSBench X-Git-Tag: submit/tizen/20180928.044319~19252 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0c9da393d9974877f53e8785082f40e1d1c4c833;p=platform%2Fupstream%2FlibSkiaSharp.git add FPSBench git-svn-id: http://skia.googlecode.com/svn/trunk@505 2bbb7eff-a529-9590-31e7-b0007b416f81 --- diff --git a/bench/FPSBench.cpp b/bench/FPSBench.cpp new file mode 100644 index 0000000000..f103dc1b4d --- /dev/null +++ b/bench/FPSBench.cpp @@ -0,0 +1,93 @@ +#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 doScale) : INHERITED(p) { + fBitmap.setConfig(config, this->width(), this->height()); + fBitmap.allocPixels(); + fBitmap.eraseColor(0xFFFF0000); + + fName.printf("fps_bitmap_%d_%s", fBitmap.bytesPerPixel(), + 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) { + canvas->drawBitmapMatrix(fBitmap, fMatrix); + } + +private: + SkBitmap fBitmap; + SkMatrix fMatrix; + 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)); } +static SkBenchmark* BMFactory1(void* p) { return SkNEW_ARGS(Bitmap_FPSBench, (p, SkBitmap::kARGB_8888_Config, true)); } +static SkBenchmark* BMFactory2(void* p) { return SkNEW_ARGS(Bitmap_FPSBench, (p, SkBitmap::kRGB_565_Config, false)); } +static SkBenchmark* BMFactory3(void* p) { return SkNEW_ARGS(Bitmap_FPSBench, (p, SkBitmap::kRGB_565_Config, 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); + diff --git a/bench/Makefile.am b/bench/Makefile.am index be0ebdbd24..2b67862e09 100644 --- a/bench/Makefile.am +++ b/bench/Makefile.am @@ -3,6 +3,7 @@ AM_LDFLAGS = -lpng -lpthread bin_PROGRAMS = Bench Bench_SOURCES = RectBench.cpp \ + FPSBench.cpp \ SkBenchmark.cpp \ BenchTool/main.cpp \ $(top_builddir)/src/images/SkImageDecoder.cpp \ diff --git a/bench/SkBenchmark.cpp b/bench/SkBenchmark.cpp index 36280ac716..e8bea6e255 100644 --- a/bench/SkBenchmark.cpp +++ b/bench/SkBenchmark.cpp @@ -1,5 +1,6 @@ #include "SkBenchmark.h" #include "SkPaint.h" +#include "SkParse.h" template BenchRegistry* BenchRegistry::gHead; @@ -42,8 +43,26 @@ const char* SkBenchmark::findDefine(const char* key) const { return NULL; } +bool SkBenchmark::findDefine32(const char* key, int32_t* value) const { + const char* valueStr = this->findDefine(key); + if (valueStr) { + SkParse::FindS32(valueStr, value); + return true; + } + return false; +} + +bool SkBenchmark::findDefineScalar(const char* key, SkScalar* value) const { + const char* valueStr = this->findDefine(key); + if (valueStr) { + SkParse::FindScalar(valueStr, value); + return true; + } + return false; +} + /////////////////////////////////////////////////////////////////////////////// SkIPoint SkBenchmark::onGetSize() { - return SkMakeIPoint(640, 480); + return SkIPoint::Make(640, 480); } diff --git a/bench/SkBenchmark.h b/bench/SkBenchmark.h index a9c4085eb8..bc9794a34d 100644 --- a/bench/SkBenchmark.h +++ b/bench/SkBenchmark.h @@ -43,6 +43,8 @@ public: } const char* findDefine(const char* key) const; + bool findDefine32(const char* key, int32_t* value) const; + bool findDefineScalar(const char* key, SkScalar* value) const; protected: void setupPaint(SkPaint* paint); @@ -60,12 +62,6 @@ private: SkTriState::State fDither; }; -static inline SkIPoint SkMakeIPoint(int x, int y) { - SkIPoint p; - p.set(x, y); - return p; -} - typedef SkTRegistry BenchRegistry; #endif diff --git a/bench/benchmain.cpp b/bench/benchmain.cpp index 23a0c8598a..598eb8452d 100644 --- a/bench/benchmain.cpp +++ b/bench/benchmain.cpp @@ -284,9 +284,9 @@ int main (int argc, char * const argv[]) { log_error("missing arg for -config\n"); return -1; } - } else if (strncmp(*argv, "-D", 2) == 0) { + } else if (strlen(*argv) > 2 && strncmp(*argv, "-D", 2) == 0) { argv++; - if (strlen(*argv) > 2 && argv < stop) { + if (argv < stop) { defineDict.set(argv[-1] + 2, *argv); } else { log_error("incomplete '-Dfoo bar' definition\n"); @@ -320,7 +320,8 @@ int main (int argc, char * const argv[]) { { SkString str; - str.printf("running bench %16s", bench->getName()); + str.printf("running bench [%d %d] %16s", dim.fX, dim.fY, + bench->getName()); log_progress(str); }