New bitmap filter checkin; this time with less build breakage

BUG=

Review URL: https://codereview.chromium.org/18942002

git-svn-id: http://skia.googlecode.com/svn/trunk@9944 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/bench/BitmapScaleBench.cpp b/bench/BitmapScaleBench.cpp
new file mode 100644
index 0000000..45ea1b4
--- /dev/null
+++ b/bench/BitmapScaleBench.cpp
@@ -0,0 +1,135 @@
+/*
+ * Copyright 2013 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 "SkShader.h"
+#include "SkString.h"
+#include "SkBlurMask.h"
+
+class BitmapScaleBench: public SkBenchmark {
+    int         fLoopCount;
+    int         fInputSize;
+    int         fOutputSize;
+    SkString    fName;
+
+public:
+    BitmapScaleBench(void *param, int is, int os) : INHERITED(param) {
+        fInputSize = is;
+        fOutputSize = os;
+
+        fLoopCount = 100;
+    }
+
+protected:
+    
+    SkBitmap fInputBitmap, fOutputBitmap;
+    SkMatrix fMatrix;
+    
+    virtual const char* onGetName() {
+        return fName.c_str();
+    }
+
+    int inputSize() const {
+        return fInputSize;
+    }
+    
+    int outputSize() const {
+        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.setConfig(SkBitmap::kARGB_8888_Config, fInputSize, fInputSize);
+        fInputBitmap.allocPixels();
+        fInputBitmap.eraseColor(SK_ColorWHITE);
+        fInputBitmap.setIsOpaque(true);
+        
+        fOutputBitmap.setConfig(SkBitmap::kARGB_8888_Config, fOutputSize, fOutputSize);
+        fOutputBitmap.allocPixels();
+        fOutputBitmap.setIsOpaque(true);
+        
+        fMatrix.setScale( scale(), scale() );
+    }
+
+    virtual void onDraw(SkCanvas*) {
+        SkPaint paint;
+        this->setupPaint(&paint);
+
+        preBenchSetup();
+
+        for (int i = 0; i < SkBENCHLOOP(fLoopCount); i++) {
+            doScaleImage();
+        }
+    }
+
+    virtual void doScaleImage() = 0;
+    virtual void preBenchSetup() {}
+private:
+    typedef SkBenchmark INHERITED;
+};
+
+class BitmapFilterScaleBench: public BitmapScaleBench {
+ public:
+    BitmapFilterScaleBench(void *param, int is, int os) : INHERITED(param, is, os) {
+        setName( "filter" );
+    }
+protected:
+    virtual void doScaleImage() SK_OVERRIDE {
+        SkCanvas canvas( fOutputBitmap );
+        SkPaint paint;
+        
+        paint.setFlags( SkPaint::kHighQualityFilterBitmap_Flag | SkPaint::kFilterBitmap_Flag );
+        
+        canvas.drawBitmapMatrix( fInputBitmap, fMatrix, &paint );
+    }
+private:
+    typedef BitmapScaleBench INHERITED;
+};
+
+class BitmapDirectScaleBench: public BitmapScaleBench {
+ public:
+    BitmapDirectScaleBench(void *param, int is, int os) : INHERITED(param, is, os) {
+        setName( "direct" );
+    }
+protected:
+    virtual void doScaleImage() SK_OVERRIDE {
+        fInputBitmap.scale( &fOutputBitmap );
+    }
+private:
+    typedef BitmapScaleBench INHERITED;
+};
+
+
+DEF_BENCH(return new BitmapFilterScaleBench(p, 10, 90);)
+DEF_BENCH(return new BitmapFilterScaleBench(p, 30, 90);)
+DEF_BENCH(return new BitmapFilterScaleBench(p, 80, 90);)
+// DEF_BENCH(return new BitmapFilterScaleBench(p, 90, 90);)
+// DEF_BENCH(return new BitmapFilterScaleBench(p, 90, 80);)
+// DEF_BENCH(return new BitmapFilterScaleBench(p, 90, 30);)
+// DEF_BENCH(return new BitmapFilterScaleBench(p, 90, 10);)
+
+DEF_BENCH(return new BitmapDirectScaleBench(p, 10, 90);)
+DEF_BENCH(return new BitmapDirectScaleBench(p, 30, 90);)
+DEF_BENCH(return new BitmapDirectScaleBench(p, 80, 90);)
+// DEF_BENCH(return new BitmapDirectScaleBench(p, 90, 90);)
+// DEF_BENCH(return new BitmapDirectScaleBench(p, 90, 80);)
+// DEF_BENCH(return new BitmapDirectScaleBench(p, 90, 30);)
+// DEF_BENCH(return new BitmapDirectScaleBench(p, 90, 10);)