Chromium Code Reviews| Index: bench/BitmapFractionalBench.cpp |
| diff --git a/bench/BitmapScaleBench.cpp b/bench/BitmapFractionalBench.cpp |
| similarity index 50% |
| copy from bench/BitmapScaleBench.cpp |
| copy to bench/BitmapFractionalBench.cpp |
| index fad741aebc72d3cf6bda55088e8227a903b066ab..7b47514d2e6d33ab944c9397d9e17de4e101e580 100644 |
| --- a/bench/BitmapScaleBench.cpp |
| +++ b/bench/BitmapFractionalBench.cpp |
| @@ -13,18 +13,14 @@ |
| #include "SkShader.h" |
| #include "SkString.h" |
| -class BitmapScaleBench: public Benchmark { |
| - int fLoopCount; |
| +class BitmapFractionalBench: public Benchmark { |
| int fInputSize; |
| int fOutputSize; |
| - SkString fName; |
| public: |
| - BitmapScaleBench( int is, int os) { |
| + BitmapFractionalBench( int is ) { |
| fInputSize = is; |
| - fOutputSize = os; |
| - |
| - fLoopCount = 20; |
| + fOutputSize = 2*is; |
| } |
| protected: |
| @@ -33,7 +29,7 @@ protected: |
| SkMatrix fMatrix; |
| virtual const char* onGetName() { |
| - return fName.c_str(); |
| + return "bitmap_fractional_bench"; |
| } |
| int inputSize() const { |
| @@ -44,25 +40,15 @@ protected: |
| return fOutputSize; |
| } |
| - float scale() const { |
| - return float(outputSize())/inputSize(); |
| - } |
| - |
| SkIPoint onGetSize() SK_OVERRIDE { |
| return SkIPoint::Make( fOutputSize, fOutputSize ); |
| } |
| - void setName(const char * name) { |
| - fName.printf( "bitmap_scale_%s_%d_%d", name, fInputSize, fOutputSize ); |
| - } |
| - |
| virtual void onPreDraw() { |
| fInputBitmap.allocN32Pixels(fInputSize, fInputSize, true); |
| fInputBitmap.eraseColor(SK_ColorWHITE); |
| fOutputBitmap.allocN32Pixels(fOutputSize, fOutputSize, true); |
| - |
| - fMatrix.setScale( scale(), scale() ); |
| } |
| virtual void onDraw(const int loops, SkCanvas*) { |
| @@ -71,41 +57,36 @@ protected: |
| preBenchSetup(); |
| + SkCanvas canvas( fOutputBitmap ); |
| + paint.setFilterLevel(SkPaint::kHigh_FilterLevel); |
| + fInputBitmap.notifyPixelsChanged(); |
| + |
| for (int i = 0; i < loops; i++) { |
| - doScaleImage(); |
| + // re-scale the image by a variety of close, fractional scales |
| + for (int j = 0 ; j < 10 ; j++) { |
| + fMatrix = SkMatrix::I(); |
| + fMatrix.setScale( 1 + j/3.f, 1 + j/3.f ); |
| + canvas.drawBitmapMatrix( fInputBitmap, fMatrix, &paint ); |
| + } |
| + // Now try some fractional translates |
| + for (int j = 0 ; j < 10 ; j++) { |
| + fMatrix = SkMatrix::I(); |
| + fMatrix.setTranslate( j/3.f, j/3.f ); |
| + canvas.drawBitmapMatrix( fInputBitmap, fMatrix, &paint ); |
| + } |
| + // Finally, some fractional translates with non-identity scale. |
| + for (int j = 0 ; j < 10 ; j++) { |
| + fMatrix = SkMatrix::I(); |
| + fMatrix.setTranslate( j/3.f, j/3.f ); |
| + fMatrix.preScale( 1.5, 1.5 ); |
|
reed1
2014/08/25 17:10:15
may get some warnings of double->float here.
|
| + canvas.drawBitmapMatrix( fInputBitmap, fMatrix, &paint ); |
| + } |
| } |
| } |
| - virtual void doScaleImage() = 0; |
| virtual void preBenchSetup() {} |
| private: |
| typedef Benchmark INHERITED; |
| }; |
| -class BitmapFilterScaleBench: public BitmapScaleBench { |
| - public: |
| - BitmapFilterScaleBench( int is, int os) : INHERITED(is, os) { |
| - setName( "filter" ); |
| - } |
| -protected: |
| - virtual void doScaleImage() SK_OVERRIDE { |
| - SkCanvas canvas( fOutputBitmap ); |
| - SkPaint paint; |
| - |
| - paint.setFilterLevel(SkPaint::kHigh_FilterLevel); |
| - fInputBitmap.notifyPixelsChanged(); |
| - canvas.drawBitmapMatrix( fInputBitmap, fMatrix, &paint ); |
| - } |
| -private: |
| - typedef BitmapScaleBench INHERITED; |
| -}; |
| - |
| -DEF_BENCH(return new BitmapFilterScaleBench(10, 90);) |
| -DEF_BENCH(return new BitmapFilterScaleBench(30, 90);) |
| -DEF_BENCH(return new BitmapFilterScaleBench(80, 90);) |
| -DEF_BENCH(return new BitmapFilterScaleBench(90, 90);) |
| -DEF_BENCH(return new BitmapFilterScaleBench(90, 80);) |
| -DEF_BENCH(return new BitmapFilterScaleBench(90, 30);) |
| -DEF_BENCH(return new BitmapFilterScaleBench(90, 10);) |
| -DEF_BENCH(return new BitmapFilterScaleBench(256, 64);) |
| -DEF_BENCH(return new BitmapFilterScaleBench(64, 256);) |
| +DEF_BENCH(return new BitmapFractionalBench(256);) |