Make sure SkDrawLooper objects can only be allocated on the heap.

Make constructors of SkLayerDrawLooper and SkBlurDrawLooper non-public.
Remove addLayer* methods from SkLayerDrawLooper. SkLayerDrawLooper::Builder is
used to create new objects.
Provide factory method for creating SkBlurDrawLooper.

BUG=2141
R=scroggo@google.com, reed@google.com, djsollen@google.com

Author: dominikg@chromium.org

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

git-svn-id: http://skia.googlecode.com/svn/trunk@14200 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/bench/BlurRoundRectBench.cpp b/bench/BlurRoundRectBench.cpp
index 29c0080..a3d0ba9 100644
--- a/bench/BlurRoundRectBench.cpp
+++ b/bench/BlurRoundRectBench.cpp
@@ -40,7 +40,7 @@
     }
 
     virtual void onDraw(const int loops, SkCanvas* canvas) SK_OVERRIDE {
-        SkLayerDrawLooper* looper = new SkLayerDrawLooper;
+        SkLayerDrawLooper::Builder looperBuilder;
         {
             SkLayerDrawLooper::LayerInfo info;
             info.fPaintBits = SkLayerDrawLooper::kMaskFilter_Bit
@@ -48,7 +48,7 @@
             info.fColorMode = SkXfermode::kSrc_Mode;
             info.fOffset = SkPoint::Make(SkIntToScalar(-1), SkIntToScalar(0));
             info.fPostTranslate = false;
-            SkPaint* paint = looper->addLayerOnTop(info);
+            SkPaint* paint = looperBuilder.addLayerOnTop(info);
             SkMaskFilter* maskFilter = SkBlurMaskFilter::Create(
                     SkBlurMaskFilter::kNormal_BlurStyle,
                     SkBlurMask::ConvertRadiusToSigma(SK_ScalarHalf),
@@ -61,13 +61,13 @@
         }
         {
             SkLayerDrawLooper::LayerInfo info;
-            looper->addLayerOnTop(info);
+            looperBuilder.addLayerOnTop(info);
         }
         SkPaint dullPaint;
         dullPaint.setAntiAlias(true);
 
         SkPaint loopedPaint;
-        loopedPaint.setLooper(looper)->unref();
+        loopedPaint.setLooper(looperBuilder.detachLooper())->unref();
         loopedPaint.setAntiAlias(true);
         loopedPaint.setColor(SK_ColorCYAN);
 
diff --git a/bench/RectoriBench.cpp b/bench/RectoriBench.cpp
index ee79ca9..87f5fee 100644
--- a/bench/RectoriBench.cpp
+++ b/bench/RectoriBench.cpp
@@ -71,7 +71,7 @@
     };
 
     SkLayerDrawLooper* createLooper(SkScalar xOff, SkScalar sigma) {
-        SkLayerDrawLooper* looper = new SkLayerDrawLooper;
+        SkLayerDrawLooper::Builder looperBuilder;
 
         //-----------------------------------------------
         SkLayerDrawLooper::LayerInfo info;
@@ -83,7 +83,7 @@
         info.fOffset.set(xOff, 0);
         info.fPostTranslate = false;
 
-        SkPaint* paint = looper->addLayer(info);
+        SkPaint* paint = looperBuilder.addLayer(info);
 
         SkMaskFilter* mf = SkBlurMaskFilter::Create(SkBlurMaskFilter::kNormal_BlurStyle,
                                                     sigma,
@@ -94,8 +94,8 @@
         info.fPaintBits = 0;
         info.fOffset.set(0, 0);
 
-        paint = looper->addLayer(info);
-        return looper;
+        paint = looperBuilder.addLayer(info);
+        return looperBuilder.detachLooper();
     }
 
     typedef SkBenchmark INHERITED;