add bench for srcmode



git-svn-id: http://skia.googlecode.com/svn/trunk@6443 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/bench/RectBench.cpp b/bench/RectBench.cpp
index f3b9202..2674232 100644
--- a/bench/RectBench.cpp
+++ b/bench/RectBench.cpp
@@ -73,6 +73,37 @@
     typedef SkBenchmark INHERITED;
 };
 
+class SrcModeRectBench : public RectBench {
+public:
+    SrcModeRectBench(void* param) : INHERITED(param, 1, 0) {
+        fMode = SkXfermode::Create(SkXfermode::kSrc_Mode);
+    }
+    
+    virtual ~SrcModeRectBench() {
+        SkSafeUnref(fMode);
+    }
+
+protected:
+    virtual void setupPaint(SkPaint* paint) SK_OVERRIDE {
+        this->INHERITED::setupPaint(paint);
+        // srcmode is most interesting when we're not opaque
+        paint->setAlpha(0x80);
+        paint->setXfermode(fMode);
+    }
+
+    virtual const char* onGetName() SK_OVERRIDE {
+        fName.set(this->INHERITED::onGetName());
+        fName.prepend("srcmode_");
+        return fName.c_str();
+    }
+
+private:
+    SkString fName;
+    SkXfermode* fMode;
+
+    typedef RectBench INHERITED;
+};
+
 class OvalBench : public RectBench {
 public:
     OvalBench(void* param, int shift) : RectBench(param, shift) {}
@@ -219,6 +250,8 @@
 DEF_BENCH( return SkNEW_ARGS(PointsBench, (p, SkCanvas::kLines_PointMode, "lines")); )
 DEF_BENCH( return SkNEW_ARGS(PointsBench, (p, SkCanvas::kPolygon_PointMode, "polygon")); )
 
+DEF_BENCH( return SkNEW_ARGS(SrcModeRectBench, (p)); )
+
 /* init the blitmask bench
  */
 DEF_BENCH( return SkNEW_ARGS(BlitMaskBench,