commit to xfermode objects being immutable

BUG=
R=djsollen@google.com, mtklein@google.com

Author: reed@google.com

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

git-svn-id: http://skia.googlecode.com/svn/trunk@11614 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/bench/XfermodeBench.cpp b/bench/XfermodeBench.cpp
index e9b3b95..29e8598 100644
--- a/bench/XfermodeBench.cpp
+++ b/bench/XfermodeBench.cpp
@@ -62,6 +62,28 @@
     typedef SkBenchmark INHERITED;
 };
 
+class XferCreateBench : public SkBenchmark {
+public:
+    XferCreateBench() {
+        fIsRendering = false;
+    }
+    
+protected:
+    virtual const char* onGetName() SK_OVERRIDE { return "xfermode_create"; }
+
+    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
+        for (int outer = 0; outer < this->getLoops() * 10; ++outer) {
+            for (int i = 0; i <= SkXfermode::kLastMode; ++i) {
+                SkXfermode* xfer = SkXfermode::Create(SkXfermode::Mode(i));
+                SkSafeUnref(xfer);
+            }
+        }
+    }
+    
+private:
+    typedef SkBenchmark INHERITED;
+};
+
 //////////////////////////////////////////////////////////////////////////////
 
 #define CONCAT_I(x, y) x ## y
@@ -106,3 +128,5 @@
 BENCH(SkLumaMaskXfermode::Create(SkXfermode::kSrcIn_Mode), "SrcInLuma")
 BENCH(SkLumaMaskXfermode::Create(SkXfermode::kDstIn_Mode), "DstInLuma")
 BENCH(SkLumaMaskXfermode::Create(SkXfermode::kSrcOver_Mode), "SrcOverLuma")
+
+DEF_BENCH(return new XferCreateBench;)