experimental

BUG=skia:

Review URL: https://codereview.chromium.org/716793004
diff --git a/samplecode/SampleArc.cpp b/samplecode/SampleArc.cpp
index 8209c3b..c9310d6 100644
--- a/samplecode/SampleArc.cpp
+++ b/samplecode/SampleArc.cpp
@@ -22,6 +22,8 @@
 #include "SkColorFilter.h"
 #include "SkLayerRasterizer.h"
 
+#include "SkCanvasDrawable.h"
+
 #include "SkParsePath.h"
 static void testparse() {
     SkRect r;
@@ -36,11 +38,58 @@
 }
 
 class ArcsView : public SampleView {
+    class MyDrawable : public SkCanvasDrawable {
+        SkRect   fR;
+        SkScalar fSweep;
+    public:
+        MyDrawable(const SkRect& r) : fR(r), fSweep(0) {
+        }
+
+        void setSweep(SkScalar sweep) {
+            if (fSweep != sweep) {
+                fSweep = sweep;
+                this->notifyDrawingChanged();
+            }
+        }
+
+        void onDraw(SkCanvas* canvas) SK_OVERRIDE {
+            SkPaint paint;
+            paint.setAntiAlias(true);
+            paint.setStrokeWidth(SkIntToScalar(2));
+
+            paint.setStyle(SkPaint::kFill_Style);
+            paint.setColor(0x800000FF);
+            canvas->drawArc(fR, 0, fSweep, true, paint);
+
+            paint.setColor(0x800FF000);
+            canvas->drawArc(fR, 0, fSweep, false, paint);
+
+            paint.setStyle(SkPaint::kStroke_Style);
+            paint.setColor(SK_ColorRED);
+            canvas->drawArc(fR, 0, fSweep, true, paint);
+
+            paint.setStrokeWidth(0);
+            paint.setColor(SK_ColorBLUE);
+            canvas->drawArc(fR, 0, fSweep, false, paint);
+        }
+    };
+
 public:
+    SkRect fRect;
+    MyDrawable* fDrawable;
+
     ArcsView() {
         testparse();
         fSweep = SkIntToScalar(100);
         this->setBGColor(0xFFDDDDDD);
+
+        fRect.set(0, 0, SkIntToScalar(200), SkIntToScalar(200));
+        fRect.offset(SkIntToScalar(20), SkIntToScalar(20));
+        fDrawable = SkNEW_ARGS(MyDrawable, (fRect));
+    }
+
+    virtual ~ArcsView() SK_OVERRIDE {
+        fDrawable->unref();
     }
 
 protected:
@@ -121,48 +170,17 @@
     }
 
     virtual void onDrawContent(SkCanvas* canvas) {
-        fSweep = SampleCode::GetAnimScalar(SkIntToScalar(360)/24,
-                                           SkIntToScalar(360));
-//        fSweep = 359.99f;
+        fDrawable->setSweep(SampleCode::GetAnimScalar(SkIntToScalar(360)/24,
+                                                      SkIntToScalar(360)));
 
-        SkRect  r;
         SkPaint paint;
-
         paint.setAntiAlias(true);
         paint.setStrokeWidth(SkIntToScalar(2));
         paint.setStyle(SkPaint::kStroke_Style);
 
-        r.set(0, 0, SkIntToScalar(200), SkIntToScalar(200));
-        r.offset(SkIntToScalar(20), SkIntToScalar(20));
+        drawRectWithLines(canvas, fRect, paint);
 
-        if (false) {
-            const SkScalar d = SkIntToScalar(3);
-            const SkScalar rad[] = { d, d, d, d, d, d, d, d };
-            SkPath path;
-            path.addRoundRect(r, rad);
-            canvas->drawPath(path, paint);
-            return;
-        }
-
-        drawRectWithLines(canvas, r, paint);
-
-   //     printf("----- sweep %g %X\n", SkScalarToFloat(fSweep), SkDegreesToRadians(fSweep));
-
-
-        paint.setStyle(SkPaint::kFill_Style);
-        paint.setColor(0x800000FF);
-        canvas->drawArc(r, 0, fSweep, true, paint);
-
-        paint.setColor(0x800FF000);
-        canvas->drawArc(r, 0, fSweep, false, paint);
-
-        paint.setStyle(SkPaint::kStroke_Style);
-        paint.setColor(SK_ColorRED);
-        canvas->drawArc(r, 0, fSweep, true, paint);
-
-        paint.setStrokeWidth(0);
-        paint.setColor(SK_ColorBLUE);
-        canvas->drawArc(r, 0, fSweep, false, paint);
+        canvas->EXPERIMENTAL_drawDrawable(fDrawable);
 
         drawArcs(canvas);
         this->inval(NULL);