diff options
author | Mike Reed <reed@google.com> | 2010-02-22 14:59:09 -0500 |
---|---|---|
committer | Mike Reed <reed@google.com> | 2010-02-22 14:59:09 -0500 |
commit | 32a0e74681142badb9efd90be3558bd9a943755e (patch) | |
tree | d6835da47d9fe969172ae7d49bcccf6c521552b8 /bench | |
parent | 89bebe0b1f1799ec82036e621ee5d00900d0552f (diff) | |
download | external_skia-32a0e74681142badb9efd90be3558bd9a943755e.zip external_skia-32a0e74681142badb9efd90be3558bd9a943755e.tar.gz external_skia-32a0e74681142badb9efd90be3558bd9a943755e.tar.bz2 |
update benchmark tests
Diffstat (limited to 'bench')
-rw-r--r-- | bench/Android.mk | 4 | ||||
-rw-r--r-- | bench/FPSBench.cpp | 93 | ||||
-rw-r--r-- | bench/Makefile.am | 1 | ||||
-rw-r--r-- | bench/SkBenchmark.cpp | 21 | ||||
-rw-r--r-- | bench/SkBenchmark.h | 8 | ||||
-rw-r--r-- | bench/benchmain.cpp | 7 |
6 files changed, 123 insertions, 11 deletions
diff --git a/bench/Android.mk b/bench/Android.mk index f084eb9..03c3e79 100644 --- a/bench/Android.mk +++ b/bench/Android.mk @@ -5,6 +5,7 @@ include $(CLEAR_VARS) LOCAL_SRC_FILES := \ BitmapBench.cpp \ DecodeBench.cpp \ + FPSBench.cpp \ RectBench.cpp \ RepeatTileBench.cpp \ TextBench.cpp \ @@ -13,7 +14,8 @@ LOCAL_SRC_FILES := \ # additional optional class for this tool LOCAL_SRC_FILES += \ - ../src/utils/SkNWayCanvas.cpp + ../src/utils/SkNWayCanvas.cpp \ + ../src/utils/SkParse.cpp LOCAL_SHARED_LIBRARIES := libcutils libskia LOCAL_C_INCLUDES := \ diff --git a/bench/FPSBench.cpp b/bench/FPSBench.cpp new file mode 100644 index 0000000..f103dc1 --- /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 be0ebdb..2b67862 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 36280ac..e8bea6e 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 a9c4085..bc9794a 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<SkBenchmark*, void*> BenchRegistry; #endif diff --git a/bench/benchmain.cpp b/bench/benchmain.cpp index 23a0c85..598eb84 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); } |