diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index 78ec56f..99ceb3e 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -39,7 +39,7 @@
 
 static void postInvalDelay(SkEventSinkID sinkID) {
     SkEvent* evt = new SkEvent(view_inval_msg);
-    evt->post(sinkID, 10);
+    evt->post(sinkID, 1);
 }
 
 static bool isInvalEvent(const SkEvent& evt) {
@@ -849,16 +849,20 @@
         canvas->setDrawFilter(new FlagsDrawFilter(fLCDState, fAAState))->unref();
     }
 
-    SampleView::SetRepeatDraw(child, fMeasureFPS ? FPS_REPEAT_COUNT : 1);
     if (fMeasureFPS) {
-        fMeasureFPS_Time = SkTime::GetMSecs();
+        fMeasureFPS_Time = 0;   // 0 means the child is not aware of repeat-draw
+        if (SampleView::SetRepeatDraw(child, FPS_REPEAT_COUNT)) {
+            fMeasureFPS_Time = SkTime::GetMSecs();
+        }
+    } else {
+        (void)SampleView::SetRepeatDraw(child, 1);
     }
 }
 
 void SampleWindow::afterChild(SkView* child, SkCanvas* canvas) {
     canvas->setDrawFilter(NULL);
 
-    if (fMeasureFPS) {
+    if (fMeasureFPS && fMeasureFPS_Time) {
         fMeasureFPS_Time = SkTime::GetMSecs() - fMeasureFPS_Time;
         this->updateTitle();
         postInvalDelay(this->getSinkID());
@@ -1314,10 +1318,10 @@
 
 static const char repeat_count_tag[] = "sample-set-repeat-count";
 
-void SampleView::SetRepeatDraw(SkView* view, int count) {
+bool SampleView::SetRepeatDraw(SkView* view, int count) {
     SkEvent evt(repeat_count_tag);
     evt.setFast32(count);
-    (void)view->doEvent(evt);
+    return view->doEvent(evt);
 }
 
 bool SampleView::onEvent(const SkEvent& evt) {
@@ -1341,7 +1345,7 @@
 }
 
 void SampleView::onDrawBackground(SkCanvas* canvas) {
-    canvas->drawColor(SK_ColorWHITE);
+    canvas->drawColor(fBGColor);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/samplecode/SampleBitmapRect.cpp b/samplecode/SampleBitmapRect.cpp
index 0c1cd7a..2d56db9 100644
--- a/samplecode/SampleBitmapRect.cpp
+++ b/samplecode/SampleBitmapRect.cpp
@@ -33,12 +33,13 @@
     return bm;
 }
 
-class BitmapRectView : public SkView {
+class BitmapRectView : public SampleView {
 public:
     SkBitmap fBitmap;
 
 	BitmapRectView() {
         fBitmap = make_bitmap();
+        this->setBGColor(SK_ColorGRAY);
     }
     
 protected:
@@ -51,13 +52,7 @@
         return this->INHERITED::onQuery(evt);
     }
     
-    void drawBG(SkCanvas* canvas) {
-        canvas->drawColor(SK_ColorGRAY);
-    }
-    
-    virtual void onDraw(SkCanvas* canvas) {
-        this->drawBG(canvas);
-        
+    virtual void onDrawContent(SkCanvas* canvas) {
         const SkIRect src[] = {
             { 0, 0, 32, 32 },
             { 0, 0, 80, 80 },
diff --git a/samplecode/SampleCode.h b/samplecode/SampleCode.h
index 2eb8bef..0c706ee 100644
--- a/samplecode/SampleCode.h
+++ b/samplecode/SampleCode.h
@@ -1,6 +1,7 @@
 #ifndef SampleCode_DEFINED
 #define SampleCode_DEFINED
 
+#include "SkColor.h"
 #include "SkEvent.h"
 #include "SkKey.h"
 #include "SkView.h"
@@ -48,9 +49,11 @@
 
 class SampleView : public SkView {
 public:
-    SampleView() : fRepeatCount(1) {}
+    SampleView() : fRepeatCount(1), fBGColor(SK_ColorWHITE) {}
 
-    static void SetRepeatDraw(SkView*, int count);
+    void setBGColor(SkColor color) { fBGColor = color; }
+
+    static bool SetRepeatDraw(SkView*, int count);
 
 protected:
     virtual void onDrawBackground(SkCanvas*);
@@ -63,6 +66,7 @@
 
 private:
     int fRepeatCount;
+    SkColor fBGColor;
 
     typedef SkView INHERITED;
 };
diff --git a/samplecode/SampleGradients.cpp b/samplecode/SampleGradients.cpp
index 385062d..902b0bd 100644
--- a/samplecode/SampleGradients.cpp
+++ b/samplecode/SampleGradients.cpp
@@ -113,9 +113,11 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-class GradientsView : public SkView {
+class GradientsView : public SampleView {
 public:
-	GradientsView() {}
+	GradientsView() {
+        this->setBGColor(0xFFDDDDDD);
+    }
     
 protected:
     // overrides from SkEventSink
@@ -127,13 +129,7 @@
         return this->INHERITED::onQuery(evt);
     }
 
-    void drawBG(SkCanvas* canvas) {
-        canvas->drawColor(0xFFDDDDDD);
-    }
-    
-    virtual void onDraw(SkCanvas* canvas) {
-        this->drawBG(canvas);
-        
+    virtual void onDrawContent(SkCanvas* canvas) {
         SkPoint pts[2] = {
             { 0, 0 },
             { SkIntToScalar(100), SkIntToScalar(100) }
@@ -170,7 +166,7 @@
     }
     
 private:
-    typedef SkView INHERITED;
+    typedef SampleView INHERITED;
 };
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/samplecode/SamplePoints.cpp b/samplecode/SamplePoints.cpp
index 416dc8d..a2804b4 100644
--- a/samplecode/SamplePoints.cpp
+++ b/samplecode/SamplePoints.cpp
@@ -20,7 +20,7 @@
 #include "SkStream.h"
 #include "SkXMLParser.h"
 
-class PointsView : public SkView {
+class PointsView : public SampleView {
 public:
 	PointsView() {}
 
@@ -34,18 +34,12 @@
         return this->INHERITED::onQuery(evt);
     }
 
-    void drawBG(SkCanvas* canvas) {
-        canvas->drawColor(SK_ColorWHITE);
-    }
-
     static void fill_pts(SkPoint pts[], size_t n, SkRandom* rand) {
         for (size_t i = 0; i < n; i++)
             pts[i].set(rand->nextUScalar1() * 640, rand->nextUScalar1() * 480);
     }
 
-    virtual void onDraw(SkCanvas* canvas) {
-        this->drawBG(canvas);
-
+    virtual void onDrawContent(SkCanvas* canvas) {
         canvas->translate(SK_Scalar1, SK_Scalar1);
 
         SkRandom rand;
@@ -74,7 +68,7 @@
 
 private:
 
-    typedef SkView INHERITED;
+    typedef SampleView INHERITED;
 };
 
 //////////////////////////////////////////////////////////////////////////////
diff --git a/samplecode/SampleShaderText.cpp b/samplecode/SampleShaderText.cpp
index a3cb680..47ee7ee 100644
--- a/samplecode/SampleShaderText.cpp
+++ b/samplecode/SampleShaderText.cpp
@@ -99,9 +99,11 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-class ShaderTextView : public SkView {
+class ShaderTextView : public SampleView {
 public:
-	ShaderTextView() {}
+	ShaderTextView() {
+        this->setBGColor(0xFFDDDDDD);
+    }
 
 protected:
     // overrides from SkEventSink
@@ -113,13 +115,7 @@
         return this->INHERITED::onQuery(evt);
     }
 
-    void drawBG(SkCanvas* canvas) {
-        canvas->drawColor(0xFFDDDDDD);
-    }
-
-    virtual void onDraw(SkCanvas* canvas) {
-        this->drawBG(canvas);
-
+    virtual void onDrawContent(SkCanvas* canvas) {
         const char text[] = "Shaded Text";
         const int textLen = SK_ARRAY_COUNT(text) - 1;
         static int pointSize = 48;
@@ -189,7 +185,7 @@
     }
 
 private:
-    typedef SkView INHERITED;
+    typedef SampleView INHERITED;
 };
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/samplecode/SampleShapes.cpp b/samplecode/SampleShapes.cpp
index a175af6..dc10f1a 100644
--- a/samplecode/SampleShapes.cpp
+++ b/samplecode/SampleShapes.cpp
@@ -46,7 +46,7 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-class ShapesView : public SkView {
+class ShapesView : public SampleView {
     SkGroupShape fGroup;
     SkMatrixRef*    fMatrixRefs[4];
 public:
@@ -65,6 +65,8 @@
         for (size_t i = 0; i < SK_ARRAY_COUNT(fMatrixRefs); i++) {
             SkSafeRef(fMatrixRefs[i] = fGroup.getShapeMatrixRef(i));
         }
+
+        this->setBGColor(0xFFDDDDDD);
     }
     
     virtual ~ShapesView() {
@@ -83,10 +85,6 @@
         return this->INHERITED::onQuery(evt);
     }
     
-    void drawBG(SkCanvas* canvas) {
-        canvas->drawColor(0xFFDDDDDD);
-    }
-    
     void drawpicture(SkCanvas* canvas, SkPicture& pict) {
 #if 0
         SkDynamicMemoryWStream ostream;
@@ -101,9 +99,7 @@
 #endif
     }
     
-    virtual void onDraw(SkCanvas* canvas) {
-        this->drawBG(canvas);
-        
+    virtual void onDrawContent(SkCanvas* canvas) {
         SkScalar angle = SampleCode::GetAnimScalar(SkIntToScalar(180),
                                                    SkIntToScalar(360));
 
@@ -154,7 +150,7 @@
 }
     
 private:
-    typedef SkView INHERITED;
+    typedef SampleView INHERITED;
 };
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/samplecode/SampleTextEffects.cpp b/samplecode/SampleTextEffects.cpp
index bd134d0..733dd31 100644
--- a/samplecode/SampleTextEffects.cpp
+++ b/samplecode/SampleTextEffects.cpp
@@ -11,8 +11,7 @@
 #include "SkTypeface.h"
 #include "SkAvoidXfermode.h"
 
-static inline SkPMColor rgb2gray(SkPMColor c)
-{
+static inline SkPMColor rgb2gray(SkPMColor c) {
     unsigned r = SkGetPackedR32(c);
     unsigned g = SkGetPackedG32(c);
     unsigned b = SkGetPackedB32(c);
@@ -24,25 +23,26 @@
 
 class SkGrayScaleColorFilter : public SkColorFilter {
 public:
-    virtual void filterSpan(const SkPMColor src[], int count, SkPMColor result[])
-    {
-        for (int i = 0; i < count; i++)
+    virtual void filterSpan(const SkPMColor src[], int count,
+                            SkPMColor result[]) {
+        for (int i = 0; i < count; i++) {
             result[i] = rgb2gray(src[i]);
+        }
     }
 };
 
 class SkChannelMaskColorFilter : public SkColorFilter {
 public:
-    SkChannelMaskColorFilter(U8CPU redMask, U8CPU greenMask, U8CPU blueMask)
-    {
+    SkChannelMaskColorFilter(U8CPU redMask, U8CPU greenMask, U8CPU blueMask) {
         fMask = SkPackARGB32(0xFF, redMask, greenMask, blueMask);
     }
 
-    virtual void filterSpan(const SkPMColor src[], int count, SkPMColor result[])
-    {
+    virtual void filterSpan(const SkPMColor src[], int count,
+                            SkPMColor result[]) {
         SkPMColor mask = fMask;
-        for (int i = 0; i < count; i++)
+        for (int i = 0; i < count; i++) {
             result[i] = src[i] & mask;
+        }
     }
 
 private:
@@ -55,8 +55,7 @@
 #include "SkLayerRasterizer.h"
 #include "SkBlurMaskFilter.h"
 
-static void r0(SkLayerRasterizer* rast, SkPaint& p)
-{
+static void r0(SkLayerRasterizer* rast, SkPaint& p) {
     p.setMaskFilter(SkBlurMaskFilter::Create(SkIntToScalar(3),
                                              SkBlurMaskFilter::kNormal_BlurStyle))->unref();
     rast->addLayer(p, SkIntToScalar(3), SkIntToScalar(3));
@@ -72,8 +71,7 @@
     rast->addLayer(p);
 }
 
-static void r1(SkLayerRasterizer* rast, SkPaint& p)
-{
+static void r1(SkLayerRasterizer* rast, SkPaint& p) {
     rast->addLayer(p);
 
     p.setAlpha(0x40);
@@ -83,8 +81,7 @@
     rast->addLayer(p);
 }
 
-static void r2(SkLayerRasterizer* rast, SkPaint& p)
-{
+static void r2(SkLayerRasterizer* rast, SkPaint& p) {
     p.setStyle(SkPaint::kStrokeAndFill_Style);
     p.setStrokeWidth(SK_Scalar1*4);
     rast->addLayer(p);
@@ -95,8 +92,7 @@
     rast->addLayer(p);
 }
 
-static void r3(SkLayerRasterizer* rast, SkPaint& p)
-{
+static void r3(SkLayerRasterizer* rast, SkPaint& p) {
     p.setStyle(SkPaint::kStroke_Style);
     p.setStrokeWidth(SK_Scalar1*3);
     rast->addLayer(p);
@@ -107,8 +103,7 @@
     rast->addLayer(p);
 }
 
-static void r4(SkLayerRasterizer* rast, SkPaint& p)
-{
+static void r4(SkLayerRasterizer* rast, SkPaint& p) {
     p.setAlpha(0x60);
     rast->addLayer(p, SkIntToScalar(3), SkIntToScalar(3));
 
@@ -122,8 +117,7 @@
 
 #include "SkDiscretePathEffect.h"
 
-static void r5(SkLayerRasterizer* rast, SkPaint& p)
-{
+static void r5(SkLayerRasterizer* rast, SkPaint& p) {
     rast->addLayer(p);
 
     p.setPathEffect(new SkDiscretePathEffect(SK_Scalar1*4, SK_Scalar1*3))->unref();
@@ -131,8 +125,7 @@
     rast->addLayer(p);
 }
 
-static void r6(SkLayerRasterizer* rast, SkPaint& p)
-{
+static void r6(SkLayerRasterizer* rast, SkPaint& p) {
     rast->addLayer(p);
 
     p.setAntiAlias(false);
@@ -150,8 +143,7 @@
     Dot2DPathEffect(SkScalar radius, const SkMatrix& matrix)
         : Sk2DPathEffect(matrix), fRadius(radius) {}
 
-    virtual void flatten(SkFlattenableWriteBuffer& buffer)
-    {
+    virtual void flatten(SkFlattenableWriteBuffer& buffer) {
         this->INHERITED::flatten(buffer);
 
         buffer.writeScalar(fRadius);
@@ -159,28 +151,24 @@
     virtual Factory getFactory() { return CreateProc; }
 
 protected:
-	virtual void next(const SkPoint& loc, int u, int v, SkPath* dst)
-    {
+	virtual void next(const SkPoint& loc, int u, int v, SkPath* dst) {
         dst->addCircle(loc.fX, loc.fY, fRadius);
     }
 
-    Dot2DPathEffect(SkFlattenableReadBuffer& buffer) : Sk2DPathEffect(buffer)
-    {
+    Dot2DPathEffect(SkFlattenableReadBuffer& buffer) : Sk2DPathEffect(buffer) {
         fRadius = buffer.readScalar();
     }
 private:
     SkScalar fRadius;
 
-    static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer)
-    {
+    static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
         return new Dot2DPathEffect(buffer);
     }
 
     typedef Sk2DPathEffect INHERITED;
 };
 
-static void r7(SkLayerRasterizer* rast, SkPaint& p)
-{
+static void r7(SkLayerRasterizer* rast, SkPaint& p) {
     SkMatrix    lattice;
     lattice.setScale(SK_Scalar1*6, SK_Scalar1*6, 0, 0);
     lattice.postSkew(SK_Scalar1/3, 0, 0, 0);
@@ -188,8 +176,7 @@
     rast->addLayer(p);
 }
 
-static void r8(SkLayerRasterizer* rast, SkPaint& p)
-{
+static void r8(SkLayerRasterizer* rast, SkPaint& p) {
     rast->addLayer(p);
 
     SkMatrix    lattice;
@@ -211,10 +198,8 @@
     Line2DPathEffect(SkScalar width, const SkMatrix& matrix)
         : Sk2DPathEffect(matrix), fWidth(width) {}
 
-	virtual bool filterPath(SkPath* dst, const SkPath& src, SkScalar* width)
-    {
-        if (this->INHERITED::filterPath(dst, src, width))
-        {
+	virtual bool filterPath(SkPath* dst, const SkPath& src, SkScalar* width) {
+        if (this->INHERITED::filterPath(dst, src, width)) {
             *width = fWidth;
             return true;
         }
@@ -222,16 +207,14 @@
     }
 
     virtual Factory getFactory() { return CreateProc; }
-    virtual void flatten(SkFlattenableWriteBuffer& buffer)
-    {
+    virtual void flatten(SkFlattenableWriteBuffer& buffer) {
         this->INHERITED::flatten(buffer);
         buffer.writeScalar(fWidth);
     }
+
 protected:
-	virtual void nextSpan(int u, int v, int ucount, SkPath* dst)
-    {
-        if (ucount > 1)
-        {
+	virtual void nextSpan(int u, int v, int ucount, SkPath* dst) {
+        if (ucount > 1) {
             SkPoint	src[2], dstP[2];
 
             src[0].set(SkIntToScalar(u) + SK_ScalarHalf,
@@ -245,24 +228,21 @@
         }
     }
 
-    Line2DPathEffect(SkFlattenableReadBuffer& buffer) : Sk2DPathEffect(buffer)
-    {
+    Line2DPathEffect(SkFlattenableReadBuffer& buffer) : Sk2DPathEffect(buffer) {
         fWidth = buffer.readScalar();
     }
 
 private:
     SkScalar fWidth;
 
-    static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer)
-    {
+    static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
         return new Line2DPathEffect(buffer);
     }
 
     typedef Sk2DPathEffect INHERITED;
 };
 
-static void r9(SkLayerRasterizer* rast, SkPaint& p)
-{
+static void r9(SkLayerRasterizer* rast, SkPaint& p) {
     rast->addLayer(p);
 
     SkMatrix    lattice;
@@ -297,8 +277,7 @@
 
 #include "SkXfermode.h"
 
-static unsigned color_dist16(uint16_t a, uint16_t b)
-{
+static unsigned color_dist16(uint16_t a, uint16_t b) {
     unsigned dr = SkAbs32(SkPacked16ToR32(a) - SkPacked16ToR32(b));
     unsigned dg = SkAbs32(SkPacked16ToG32(a) - SkPacked16ToG32(b));
     unsigned db = SkAbs32(SkPacked16ToB32(a) - SkPacked16ToB32(b));
@@ -306,8 +285,7 @@
     return SkMax32(dr, SkMax32(dg, db));
 }
 
-static unsigned scale_dist(unsigned dist, unsigned scale)
-{
+static unsigned scale_dist(unsigned dist, unsigned scale) {
     dist >>= 6;
     dist = (dist << 2) | dist;
     dist = (dist << 4) | dist;
@@ -316,8 +294,7 @@
 //    return SkAlphaMul(dist, scale);
 }
 
-static void apply_shader(SkPaint* paint, int index)
-{
+static void apply_shader(SkPaint* paint, int index) {
     raster_proc proc = gRastProcs[index];
     if (proc)
     {
@@ -338,41 +315,28 @@
 
 static int gRastIndex;
 
-class TextEffectView : public SkView {
+class TextEffectView : public SampleView {
     SkTypeface* fFace;
 public:
-	TextEffectView()
-    {
+	TextEffectView() {
         fFace = SkTypeface::CreateFromFile("/Users/reed/Downloads/p052024l.pfb");
     }
 
-    virtual ~TextEffectView()
-    {
+    virtual ~TextEffectView() {
         SkSafeUnref(fFace);
     }
 
 protected:
     // overrides from SkEventSink
-    virtual bool onQuery(SkEvent* evt)
-    {
-        if (SampleCode::TitleQ(*evt))
-        {
+    virtual bool onQuery(SkEvent* evt) {
+        if (SampleCode::TitleQ(*evt)) {
             SampleCode::TitleR(evt, "Text Effects");
             return true;
         }
         return this->INHERITED::onQuery(evt);
     }
 
-    void drawBG(SkCanvas* canvas)
-    {
-//        canvas->drawColor(0xFFDDDDDD);
-        canvas->drawColor(SK_ColorWHITE);
-    }
-
-    virtual void onDraw(SkCanvas* canvas)
-    {
-        this->drawBG(canvas);
-
+    virtual void onDrawContent(SkCanvas* canvas) {
         canvas->save();
 //        canvas->scale(SK_Scalar1*2, SK_Scalar1*2, 0, 0);
 
@@ -390,14 +354,13 @@
 
         paint.setTypeface(fFace);
 
-        for (int i = 0; i < SK_ARRAY_COUNT(gRastProcs); i++)
-        {
+        for (int i = 0; i < SK_ARRAY_COUNT(gRastProcs); i++) {
             apply_shader(&paint, i);
 
           //  paint.setMaskFilter(NULL);
           //  paint.setColor(SK_ColorBLACK);
 
-#if 0
+#if 1
             int index = i % SK_ARRAY_COUNT(gLightingColors);
             paint.setColorFilter(SkColorFilter::CreateLightingFilter(
                                     gLightingColors[index].fMul,
@@ -406,58 +369,25 @@
 
             canvas->drawText(str.c_str(), str.size(), x, y, paint);
 
-            if (0)
-            {
-                SkPath path;
-                paint.getTextPath(str.c_str(), str.size(), x + SkIntToScalar(260), y, &path);
-                canvas->drawPath(path, paint);
-            }
-
             y += paint.getFontSpacing();
         }
 
         canvas->restore();
-
-        if (0)
-        {
-            SkPoint pts[] = { 0, 0, 0, SkIntToScalar(150) };
-            SkColor colors[] = { 0xFFE6E6E6, 0xFFFFFFFF };
-            SkShader* s = SkGradientShader::CreateLinear(pts, colors, NULL, 2, SkShader::kClamp_TileMode);
-
-            paint.reset();
-            paint.setShader(s);
-            canvas->drawRectCoords(0, 0, SkIntToScalar(120), SkIntToScalar(150), paint);
-        }
-
-        if (0)
-        {
-            SkAvoidXfermode   mode(SK_ColorWHITE, 0xFF,
-                                    SkAvoidXfermode::kTargetColor_Mode);
-            SkPaint paint;
-            x += SkIntToScalar(20);
-            SkRect  r = { x, 0, x + SkIntToScalar(360), SkIntToScalar(700) };
-            paint.setXfermode(&mode);
-            paint.setColor(SK_ColorGREEN);
-            paint.setAntiAlias(true);
-            canvas->drawOval(r, paint);
-        }
     }
 
-    virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y)
-    {
+    virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) {
         gRastIndex = (gRastIndex + 1) % SK_ARRAY_COUNT(gRastProcs);
         this->inval(NULL);
 
         return this->INHERITED::onFindClickHandler(x, y);
     }
 
-    virtual bool onClick(Click* click)
-    {
+    virtual bool onClick(Click* click) {
         return this->INHERITED::onClick(click);
     }
 
 private:
-    typedef SkView INHERITED;
+    typedef SampleView INHERITED;
 };
 
 //////////////////////////////////////////////////////////////////////////////
diff --git a/samplecode/SampleTextOnPath.cpp b/samplecode/SampleTextOnPath.cpp
index 6657d5e..96e8c9a 100644
--- a/samplecode/SampleTextOnPath.cpp
+++ b/samplecode/SampleTextOnPath.cpp
@@ -201,7 +201,7 @@
     canvas->drawTextOnPath(text, len, path, &matrix, paint);
 }
 
-class TextOnPathView : public SkView {
+class TextOnPathView : public SampleView {
 public:
     SkPath      fPath;
     SkScalar    fHOffset;
@@ -226,36 +226,7 @@
         return this->INHERITED::onQuery(evt);
     }
     
-    void drawBG(SkCanvas* canvas) {
-        canvas->drawColor(SK_ColorWHITE);
-#if 0        
-        SkRect r;
-        SkPaint p;
-        SkRandom rand;
-        p.setAntiAlias(true);
-        
-        for (int i = 0; i < 100; i++) {
-            SkScalar x = rand.nextUScalar1() * 300 + SkIntToScalar(50);
-            SkScalar y = rand.nextUScalar1() * 200 + SkIntToScalar(50);
-            SkScalar w = rand.nextUScalar1() * 10;
-            SkScalar h = rand.nextUScalar1() * 10;
-            r.set(x, y, x + w, y + h);
-            canvas->drawRect(r, p);
-        }
-        
-        test_textBounds(canvas);
-//        return;
-
-        SkBitmap    bm;
-        if (SkImageDecoder::DecodeFile("/loading_tile.png",
-                                       &bm, SkBitmap::kRGB_565_Config, true))
-            canvas->drawBitmap(bm, 0, 0);
-#endif
-    }
-    
-    virtual void onDraw(SkCanvas* canvas) {
-        this->drawBG(canvas);
-
+    virtual void onDrawContent(SkCanvas* canvas) {
         SkPaint paint;
         
         paint.setAntiAlias(true);
@@ -300,7 +271,7 @@
     
 private:
     int fHints;
-    typedef SkView INHERITED;
+    typedef SampleView INHERITED;
 };
 
 //////////////////////////////////////////////////////////////////////////////
diff --git a/samplecode/SampleTiling.cpp b/samplecode/SampleTiling.cpp
index 87aeae4..025049e 100644
--- a/samplecode/SampleTiling.cpp
+++ b/samplecode/SampleTiling.cpp
@@ -55,7 +55,7 @@
 static const int gWidth = 32;
 static const int gHeight = 32;
 
-class TilingView : public SkView {
+class TilingView : public SampleView {
     SkPicture           fTextPicture;
     SkBlurDrawLooper    fLooper;
 public:
@@ -79,13 +79,7 @@
         return this->INHERITED::onQuery(evt);
     }
     
-    void drawBG(SkCanvas* canvas) {
-        canvas->drawColor(SK_ColorWHITE);
-    }
-    
-    virtual void onDraw(SkCanvas* canvas) {
-        this->drawBG(canvas);
-        
+    virtual void onDrawContent(SkCanvas* canvas) {
         SkRect r = { 0, 0, SkIntToScalar(gWidth*2), SkIntToScalar(gHeight*2) };
 
         static const char* gConfigNames[] = { "8888", "565", "4444" };
@@ -167,7 +161,7 @@
     }
     
 private:
-    typedef SkView INHERITED;
+    typedef SampleView INHERITED;
 };
 
 //////////////////////////////////////////////////////////////////////////////
diff --git a/samplecode/SampleTypeface.cpp b/samplecode/SampleTypeface.cpp
index b9426b0..5442e5f 100644
--- a/samplecode/SampleTypeface.cpp
+++ b/samplecode/SampleTypeface.cpp
@@ -64,7 +64,7 @@
 
 static const int gFaceCount = SK_ARRAY_COUNT(gFaces);
 
-class TypefaceView : public SkView {
+class TypefaceView : public SampleView {
     SkTypeface* fFaces[gFaceCount];
 
 public:
@@ -74,6 +74,8 @@
             fFaces[i] = SkTypeface::CreateFromName(gFaces[i].fName,
                                                    gFaces[i].fStyle);
         }
+
+        this->setBGColor(0xFFDDDDDD);
     }
 
     virtual ~TypefaceView() {
@@ -92,13 +94,7 @@
         return this->INHERITED::onQuery(evt);
     }
 
-    void drawBG(SkCanvas* canvas) {
-        canvas->drawColor(0xFFDDDDDD);
-    }
-
-    virtual void onDraw(SkCanvas* canvas) {
-        this->drawBG(canvas);
-
+    virtual void onDrawContent(SkCanvas* canvas) {
         SkPaint paint;
         paint.setAntiAlias(true);
         paint.setTextSize(SkIntToScalar(30));
@@ -162,7 +158,7 @@
     }
 
 private:
-    typedef SkView INHERITED;
+    typedef SampleView INHERITED;
 };
 
 //////////////////////////////////////////////////////////////////////////////
diff --git a/samplecode/SampleVertices.cpp b/samplecode/SampleVertices.cpp
index 7f5aa96..f260e1a 100644
--- a/samplecode/SampleVertices.cpp
+++ b/samplecode/SampleVertices.cpp
@@ -35,7 +35,7 @@
                     SK_ARRAY_COUNT(colors), SkShader::kMirror_TileMode, NULL);
 }
 
-class VerticesView : public SkView {
+class VerticesView : public SampleView {
     SkShader*   fShader0;
     SkShader*   fShader1;
 
@@ -51,6 +51,8 @@
         make_tris(&fRecs[2]);
 
         fScale = SK_Scalar1;
+
+        this->setBGColor(SK_ColorGRAY);
     }
 
     virtual ~VerticesView() {
@@ -70,15 +72,9 @@
         return this->INHERITED::onQuery(evt);
     }
 
-    void drawBG(SkCanvas* canvas) {
-        canvas->drawColor(SK_ColorGRAY);
-    }
-
     SkScalar fScale;
 
-    virtual void onDraw(SkCanvas* canvas) {
-        this->drawBG(canvas);
-
+    virtual void onDrawContent(SkCanvas* canvas) {
         SkPaint paint;
         paint.setDither(true);
         paint.setFilterBitmap(true);
@@ -214,7 +210,7 @@
 
     Rec fRecs[3];
 
-    typedef SkView INHERITED;
+    typedef SampleView INHERITED;
 };
 
 //////////////////////////////////////////////////////////////////////////////
