remove SkRefCnt safeRef() and safeUnref(), and replace the call-sites with
SkSafeRef() and SkSafeUnref().

This is basically a bug waiting to happen. An optimizing compiler can remove
checks for null on "this" if it chooses. However, SkRefCnt::safeRef() relies on
precisely this check...

void SkRefCnt::safeRef() {
    if (this) {
        this->ref();
    }
}

Since a compiler might skip the if-clause, it breaks the intention of this
method, hence its removal.

static inline void SkSafeRef(SkRefCnt* obj) {
    if (obj) {
        obj->ref();
    }
}

This form is not ignored by an optimizing compile, so we use it instead.




git-svn-id: http://skia.googlecode.com/svn/trunk@762 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/samplecode/SampleDrawLooper.cpp b/samplecode/SampleDrawLooper.cpp
index 7ea7b75..7cf53b2 100644
--- a/samplecode/SampleDrawLooper.cpp
+++ b/samplecode/SampleDrawLooper.cpp
@@ -27,9 +27,9 @@
             { SK_ColorBLUE, SkPaint::kFill_Style, 0, 0, 0 },
             { 0x88000000, SkPaint::kFill_Style, 0, SkIntToScalar(10), 3 }
         };
-        
+
         fLooper = new SkLayerDrawLooper;
-        
+
         for (int i = 0; i < SK_ARRAY_COUNT(gParams); i++) {
             SkPaint* paint = fLooper->addLayer(gParams[i].fOffset,
                                                gParams[i].fOffset);
@@ -45,11 +45,11 @@
             }
         }
     }
-    
+
     virtual ~LooperView() {
-        fLooper->safeUnref();
+        SkSafeUnref(fLooper);
     }
-    
+
 protected:
     // overrides from SkEventSink
     virtual bool onQuery(SkEvent* evt) {
@@ -59,18 +59,18 @@
         }
         return this->INHERITED::onQuery(evt);
     }
-    
+
     void drawBG(SkCanvas* canvas) {
         canvas->drawColor(0xFFDDDDDD);
 //        canvas->drawColor(SK_ColorWHITE);
     }
-    
+
     virtual void onDraw(SkCanvas* canvas) {
         this->drawBG(canvas);
-        
+
         SkPaint  paint;
         paint.setLooper(fLooper);
-        
+
         canvas->drawCircle(SkIntToScalar(50), SkIntToScalar(50),
                            SkIntToScalar(30), paint);
 
@@ -80,16 +80,16 @@
         canvas->drawText("Looper", 6, SkIntToScalar(230), SkIntToScalar(100),
                          paint);
     }
-    
+
     virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) {
         this->inval(NULL);
         return this->INHERITED::onFindClickHandler(x, y);
     }
-    
+
     virtual bool onClick(Click* click) {
         return this->INHERITED::onClick(click);
     }
-    
+
 private:
     typedef SkView INHERITED;
 };
diff --git a/samplecode/SampleFontScalerTest.cpp b/samplecode/SampleFontScalerTest.cpp
index d597a9a..de70292 100644
--- a/samplecode/SampleFontScalerTest.cpp
+++ b/samplecode/SampleFontScalerTest.cpp
@@ -39,10 +39,10 @@
                                                    gFaces[i].fStyle);
         }
     }
-    
+
     virtual ~FontScalerTestView() {
         for (int i = 0; i < gFaceCount; i++) {
-            fFaces[i]->safeUnref();
+            SkSafeUnref(fFaces[i]);
         }
     }
 
@@ -55,14 +55,14 @@
         }
         return this->INHERITED::onQuery(evt);
     }
-    
+
     void drawBG(SkCanvas* canvas) {
         canvas->drawColor(0xFFDDDDDD);
     }
-    
+
     virtual void onDraw(SkCanvas* canvas) {
         this->drawBG(canvas);
-        
+
         SkPaint paint;
 
         // test handling of obscene cubic values (currently broken)
@@ -72,19 +72,19 @@
             pts[1].set(-7.18397061e+15, -1.53091184e+13);
             pts[2].set(-1.30077315e+16, -2.77196141e+13);
             pts[3].set(-1.30077315e+16, -2.77196162e+13);
-            
+
             SkPath path;
             path.moveTo(pts[0]);
             path.cubicTo(pts[1], pts[2], pts[3]);
             canvas->drawPath(path, paint);
         }
-        
+
         canvas->translate(200, 20);
         canvas->rotate(30);
 
         paint.setAntiAlias(true);
-        paint.setTypeface(SkTypeface::CreateFromName("Times Roman", SkTypeface::kNormal))->safeUnref();
-        
+        SkSafeUnref(paint.setTypeface(SkTypeface::CreateFromName("Times Roman", SkTypeface::kNormal)));
+
 //        const char* text = "abcdefghijklmnopqrstuvwxyz";
         const char* text = "HnHnHnHnHnHnHnHnH";
         size_t textLen = strlen(text);
@@ -99,7 +99,7 @@
             r.set(0, 0, x, y*20);
             canvas->drawRect(r, p);
         }
-        
+
         int index = 0;
         for (int ps = 9; ps <= 24; ps++) {
             textLen = strlen(text);
@@ -109,7 +109,7 @@
             index += 1;
         }
     }
-    
+
 private:
     typedef SkView INHERITED;
 };
diff --git a/samplecode/SampleMovie.cpp b/samplecode/SampleMovie.cpp
index ed1a844..af34198 100644
--- a/samplecode/SampleMovie.cpp
+++ b/samplecode/SampleMovie.cpp
@@ -11,9 +11,9 @@
 	AnimGifView() {
         fMovie = SkMovie::DecodeFile("/skimages/dollarblk.gif");
     }
-    
+
     virtual ~AnimGifView() {
-        fMovie->safeUnref();
+        SkSafeUnref(fMovie);
     }
 
 protected:
@@ -25,14 +25,14 @@
         }
         return this->INHERITED::onQuery(evt);
     }
-    
+
     void drawBG(SkCanvas* canvas) {
         canvas->drawColor(0xFFDDDDDD);
     }
-    
+
     virtual void onDraw(SkCanvas* canvas) {
         this->drawBG(canvas);
-        
+
         if (fMovie) {
             if (fMovie->duration()) {
                 fMovie->setTime(SkTime::GetMSecs() % fMovie->duration());
@@ -44,7 +44,7 @@
             this->inval(NULL);
         }
     }
-    
+
 private:
     SkRect      fClip;
     SkIPoint*   fPoints;
diff --git a/samplecode/SamplePatch.cpp b/samplecode/SamplePatch.cpp
index fb70dba..4203391 100644
--- a/samplecode/SamplePatch.cpp
+++ b/samplecode/SamplePatch.cpp
@@ -23,17 +23,17 @@
 static void drawtriangle(SkCanvas* canvas, const SkPaint& paint,
                          const SkPoint pts[3]) {
     SkPath path;
-    
+
     path.moveTo(pts[0]);
     path.lineTo(pts[1]);
     path.lineTo(pts[2]);
-    
+
     canvas->drawPath(path, paint);
 }
 
 static SkShader* make_shader0(SkIPoint* size) {
     SkBitmap    bm;
-    
+
 //    SkImageDecoder::DecodeFile("/skimages/progressivejpg.jpg", &bm);
     SkImageDecoder::DecodeFile("/skimages/logo.png", &bm);
     size->set(bm.width(), bm.height());
@@ -54,7 +54,7 @@
 public:
     Patch() { sk_bzero(fPts, sizeof(fPts)); }
     ~Patch() {}
-    
+
     void setPatch(const SkPoint pts[12]) {
         memcpy(fPts, pts, 12 * sizeof(SkPoint));
         fPts[12] = pts[0];  // the last shall be first
@@ -63,7 +63,7 @@
 
     void draw(SkCanvas*, const SkPaint&, int segsU, int segsV,
               bool doTextures, bool doColors);
-    
+
 private:
     SkPoint fPts[13];
     int     fW, fH;
@@ -89,12 +89,12 @@
 
     SkScalar u = SkIntToScalar(iu) / nu;
     SkScalar v = SkIntToScalar(iv) / nv;
-    
+
     SkScalar uv = SkScalarMul(u, v);
     SkScalar Uv = SkScalarMul(SK_Scalar1 - u, v);
     SkScalar uV = SkScalarMul(u, SK_Scalar1 - v);
     SkScalar UV = SkScalarMul(SK_Scalar1 - u, SK_Scalar1 - v);
-    
+
     SkScalar x0 = SkScalarMul(UV, edge[TL].fX) + SkScalarMul(uV, edge[TR].fX) +
                   SkScalarMul(Uv, edge[BL].fX) + SkScalarMul(uv, edge[BR].fX);
     SkScalar y0 = SkScalarMul(UV, edge[TL].fY) + SkScalarMul(uV, edge[TR].fY) +
@@ -123,7 +123,7 @@
 
 static SkColor make_color(SkScalar s, SkScalar t) {
     int cs = ScalarTo255(s);
-    int ct = ScalarTo255(t);    
+    int ct = ScalarTo255(t);
     return SkColorSetARGB(0xFF, cs, 0, 0) + SkColorSetARGB(0, 0, ct, 0);
 }
 
@@ -139,22 +139,22 @@
     SkPoint* edge1 = edge0 + nu;
     SkPoint* edge2 = edge1 + nv;
     SkPoint* edge3 = edge2 + nu;
-    
+
     // evaluate the edge points
     eval_patch_edge(fPts + 0, edge0, nu);
     eval_patch_edge(fPts + 3, edge1, nv);
     eval_patch_edge(fPts + 6, edge2, nu);
     eval_patch_edge(fPts + 9, edge3, nv);
     edge3[nv] = edge0[0];   // the last shall be first
-    
+
     for (i = 0; i < npts; i++) {
 //        canvas->drawLine(edge0[i].fX, edge0[i].fY, edge0[i+1].fX, edge0[i+1].fY, paint);
     }
-    
+
     int row, vertCount = (nu + 1) * (nv + 1);
     SkAutoTMalloc<SkPoint>  vertStorage(vertCount);
     SkPoint* verts = vertStorage.get();
-    
+
     // first row
     memcpy(verts, edge0, (nu + 1) * sizeof(SkPoint));
     // rows
@@ -172,9 +172,9 @@
     for (i = 0; i <= nu; i++) {
         last[i] = edge2[nu - i];
     }
-    
+
 //    canvas->drawPoints(verts, vertCount, paint);
-    
+
     int stripCount = (nu + 1) * 2;
     SkAutoTMalloc<SkPoint>  stripStorage(stripCount * 2);
     SkAutoTMalloc<SkColor>  colorStorage(stripCount);
@@ -226,8 +226,8 @@
     SkShader*   fShader1;
     SkIPoint    fSize0, fSize1;
     SkPoint     fPts[12];
-    
-public:    
+
+public:
 	PatchView() {
         fShader0 = make_shader0(&fSize0);
         fSize1 = fSize0;
@@ -251,12 +251,12 @@
         fPts[10].set(S*0, T*3);
         fPts[11].set(S*0, T*2);
     }
-    
+
     virtual ~PatchView() {
-        fShader0->safeUnref();
-        fShader1->safeUnref();
+        SkSafeUnref(fShader0);
+        SkSafeUnref(fShader1);
     }
-    
+
 protected:
     // overrides from SkEventSink
     virtual bool onQuery(SkEvent* evt)  {
@@ -268,22 +268,22 @@
         }
         return this->INHERITED::onQuery(evt);
     }
-    
+
     void drawBG(SkCanvas* canvas) {
         canvas->drawColor(SK_ColorGRAY);
     }
-    
+
     virtual void onDraw(SkCanvas* canvas) {
         this->drawBG(canvas);
-        
+
         SkPaint paint;
         paint.setDither(true);
         paint.setFilterBitmap(true);
-        
+
         canvas->translate(SkIntToScalar(20), 0);
 
         Patch   patch;
-        
+
         paint.setShader(fShader0);
         if (fSize0.fX == 0) {
             fSize0.fX = 1;
@@ -292,33 +292,33 @@
             fSize0.fY = 1;
         }
         patch.setBounds(fSize0.fX, fSize0.fY);
-        
-        patch.setPatch(fPts);        
+
+        patch.setPatch(fPts);
         drawpatches(canvas, paint, 10, 10, &patch);
-        
+
         paint.setShader(NULL);
         paint.setAntiAlias(true);
         paint.setStrokeWidth(SkIntToScalar(5));
         canvas->drawPoints(SkCanvas::kPoints_PointMode, SK_ARRAY_COUNT(fPts), fPts, paint);
-        
+
         canvas->translate(0, SkIntToScalar(300));
-        
+
         paint.setAntiAlias(false);
         paint.setShader(fShader1);
         patch.setBounds(fSize1.fX, fSize1.fY);
         drawpatches(canvas, paint, 10, 10, &patch);
     }
-    
+
     class PtClick : public Click {
     public:
         int fIndex;
         PtClick(SkView* view, int index) : Click(view), fIndex(index) {}
     };
-    
+
     static bool hittest(const SkPoint& pt, SkScalar x, SkScalar y) {
         return SkPoint::Length(pt.fX - x, pt.fY - y) < SkIntToScalar(5);
     }
-    
+
     virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) {
         for (int i = 0; i < SK_ARRAY_COUNT(fPts); i++) {
             if (hittest(fPts[i], x, y)) {
@@ -327,13 +327,13 @@
         }
         return this->INHERITED::onFindClickHandler(x, y);
     }
-    
+
     virtual bool onClick(Click* click) {
         fPts[((PtClick*)click)->fIndex].set(click->fCurr.fX, click->fCurr.fY);
         this->inval(NULL);
         return true;
     }
-    
+
 private:
     typedef SkView INHERITED;
 };
diff --git a/samplecode/SampleShaders.cpp b/samplecode/SampleShaders.cpp
index 115f9f5..86c8b17 100644
--- a/samplecode/SampleShaders.cpp
+++ b/samplecode/SampleShaders.cpp
@@ -36,7 +36,7 @@
     shaderA->unref();
     shaderB->unref();
     mode->unref();
-    
+
     return shader;
 }
 
@@ -51,19 +51,19 @@
 
         SkPoint pts[2];
         SkColor colors[2];
-        
+
         pts[0].set(0, 0);
         pts[1].set(SkIntToScalar(100), 0);
         colors[0] = SK_ColorRED;
         colors[1] = SK_ColorBLUE;
         SkShader* shaderA = SkGradientShader::CreateLinear(pts, colors, NULL, 2, SkShader::kClamp_TileMode);
-        
+
         pts[0].set(0, 0);
         pts[1].set(0, SkIntToScalar(100));
         colors[0] = SK_ColorBLACK;
         colors[1] = SkColorSetARGB(0x80, 0, 0, 0);
         SkShader* shaderB = SkGradientShader::CreateLinear(pts, colors, NULL, 2, SkShader::kClamp_TileMode);
-        
+
         SkXfermode* mode = SkXfermode::Create(SkXfermode::kDstIn_Mode);
 
         fShader = new SkComposeShader(shaderA, shaderB, mode);
@@ -73,9 +73,9 @@
     }
     virtual ~ShaderView()
     {
-        fShader->safeUnref();
+        SkSafeUnref(fShader);
     }
-    
+
 protected:
     // overrides from SkEventSink
     virtual bool onQuery(SkEvent* evt) {
@@ -85,21 +85,21 @@
         }
         return this->INHERITED::onQuery(evt);
     }
-    
+
     void drawBG(SkCanvas* canvas)
     {
 //        canvas->drawColor(0xFFDDDDDD);
         canvas->drawColor(SK_ColorWHITE);
     }
-    
+
     virtual void onDraw(SkCanvas* canvas)
     {
         this->drawBG(canvas);
-        
+
         canvas->drawBitmap(fBitmap, 0, 0);
-        
+
         canvas->translate(SkIntToScalar(20), SkIntToScalar(120));
-        
+
         SkPaint paint;
         SkRect  r;
 
@@ -120,22 +120,22 @@
         canvas->drawRect(r, paint);
         paint.setShader(make_bitmapfade(fBitmap))->unref();
         canvas->drawRect(r, paint);
-        
+
         paint.setShader(new SkTransparentShader)->unref();
         canvas->drawRect(r, paint);
     }
-    
-    virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) 
+
+    virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y)
     {
         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;
 };
diff --git a/samplecode/SampleText.cpp b/samplecode/SampleText.cpp
index abd88be..b1bb6cb 100644
--- a/samplecode/SampleText.cpp
+++ b/samplecode/SampleText.cpp
@@ -63,7 +63,7 @@
     {
         int c = srcRows[1][1];
         float f = c / 255.f;
-        
+
         if (c >= 0)
         {
             f = sqrtf(f);
@@ -96,7 +96,7 @@
     SkTypeface* t1 = SkTypeface::CreateFromName(NULL, SkTypeface::kNormal);
     SkTypeface* t2 = SkTypeface::CreateFromName("arial", SkTypeface::kNormal);
     SkTypeface* t3 = SkTypeface::CreateFromName("helvetica", SkTypeface::kItalic);
-    
+
     SkASSERT(t0 == t1);
     SkASSERT(t0 == t2);
     SkASSERT(t0 == t3);
@@ -109,7 +109,7 @@
     const char* text = "sdfkljAKLDFJKEWkldfjlk#$%&sdfs.dsj";
     size_t length = strlen(text);
     SkScalar width = paint.measureText(text, length);
-    
+
     SkScalar mm = 0;
     SkScalar nn = 0;
     for (SkScalar w = 0; w <= width; w += SK_Scalar1)
@@ -117,10 +117,10 @@
         SkScalar m;
         size_t n = paint.breakText(text, length, w, &m,
                                     SkPaint::kBackward_TextBufferDirection);
-        
+
         SkASSERT(n <= length);
         SkASSERT(m <= width);
-    
+
         if (n == 0)
             SkASSERT(m == 0);
         else
@@ -152,7 +152,7 @@
     virtual void xfer16(uint16_t dst[], const SkPMColor src[], int count, const SkAlpha aa[]);
 
     typedef SkFlattenable* (*Factory)(SkFlattenableReadBuffer&);
-    
+
     // overrides for SkFlattenable
     virtual Factory getFactory() { return Create; }
     virtual void flatten(SkFlattenableWriteBuffer& b)
@@ -160,7 +160,7 @@
     //    this->INHERITED::flatten(b);  How can we know if this is legal????
         b.write32(SkScalarToFixed(fExp));
     }
-    
+
 private:
     SkScalar fExp;          // user's value
     uint8_t fTable[256];    // cache
@@ -175,7 +175,7 @@
     {
         return SkNEW_ARGS(SkPowerMode, (b));
     }
-    
+
     typedef SkXfermode INHERITED;
 };
 
@@ -183,7 +183,7 @@
 {
     fExp = e;
     float ee = SkScalarToFloat(e);
-    
+
     printf("------ %g\n", ee);
     for (int i = 0; i < 256; i++)
     {
@@ -231,7 +231,7 @@
 static int count_char_points(const SkPaint& paint, char c)
 {
     SkPath  path;
-    
+
     paint.getTextPath(&c, 1, 0, 0, &path);
     return path.getPoints(NULL, 0);
 }
@@ -264,7 +264,7 @@
 {
     SkRect16    r, bounds;
     int         i;
-    
+
     rgn->setEmpty();
     bounds.setEmpty();
 
@@ -281,7 +281,7 @@
 
     for (i = 0; i < SK_ARRAY_COUNT(badrects); i++)
     {
-        r.set(badrects[i].x, badrects[i].y, badrects[i].x + badrects[i].width, badrects[i].y + badrects[i].height);        
+        r.set(badrects[i].x, badrects[i].y, badrects[i].x + badrects[i].width, badrects[i].y + badrects[i].height);
         SkASSERT(rgn->contains(r));
     }
 }
@@ -291,7 +291,7 @@
 {
     SkRect    r;
     SkRegion::Iterator  iter(rgn);
-    
+
     for (; !iter.done(); iter.next())
     {
         r.set(iter.rect());
@@ -304,11 +304,11 @@
                         SkScalar clickX)
 {
     SkPaint linePaint;
-    
+
     linePaint.setAntiAlias(true);
-    
+
     SkScalar measured;
-    
+
     if (paint.breakText(text, length, clickX - x, &measured, SkPaint::kForward_TextBufferDirection))
     {
         linePaint.setColor(SK_ColorRED);
@@ -331,20 +331,20 @@
         SkIntToScalar(5), SkIntToScalar(3),
         SkIntToScalar(2), SkIntToScalar(3)
     };
-    
+
     static const SkPoint src[] = {
         SkIntToScalar(0), SkIntToScalar(0),
         SkIntToScalar(1), SkIntToScalar(0),
         SkIntToScalar(1), SkIntToScalar(1),
         SkIntToScalar(0), SkIntToScalar(1)
     };
-    
+
     SkMatrix matrix;
-    
+
     if (matrix.setPolyToPoly(src, dst, 4))
     {
         SkPoint pt = { SK_Scalar1/2, SK_Scalar1/2 };
-        matrix.mapPoints(&pt, 1);        
+        matrix.mapPoints(&pt, 1);
         printf("---- x = %g y = %g\n", SkScalarToFloat(pt.fX), SkScalarToFloat(pt.fY));
     }
     else
@@ -424,25 +424,25 @@
 
             printf("--- ave reduction = %g%%\n", 100. * (gOld - gNew) / gOld);
         }
-        
+
         if (true)
         {
             SkPoint pts[] = { SkIntToScalar(20), 0, SkIntToScalar(256+20), 0 };
             SkColor colors[] = { SkColorSetARGB(0, 255, 255, 255), SkColorSetARGB(255, 255, 255, 255) };
             fGradient = SkGradientShader::CreateLinear(pts, colors, NULL, 2, SkShader::kClamp_TileMode);
         }
-        
+
         fClickX = 0;
 
-        test_breakText();        
+        test_breakText();
         test_typefaceCache();
 //        test_poly();
     }
-    
+
     virtual ~TextSpeedView()
     {
         fGradient->unref();
-        fMF->safeUnref();
+        SkSafeUnref(fMF);
     }
 
 protected:
@@ -456,36 +456,36 @@
         }
         return this->INHERITED::onQuery(evt);
     }
-    
+
     void drawBG(SkCanvas* canvas)
     {
 //        canvas->drawColor(0xFFDDDDDD);
         canvas->drawColor(SK_ColorWHITE);
    //     canvas->drawColor(SK_ColorBLACK);
     }
-    
+
     static void make_textstrip(SkBitmap* bm)
     {
         bm->setConfig(SkBitmap::kRGB_565_Config, 200, 18);
         bm->allocPixels();
         bm->eraseColor(SK_ColorWHITE);
-        
+
         SkCanvas    canvas(*bm);
         SkPaint     paint;
         const char* s = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit";
-        
+
         paint.setFlags(paint.getFlags() | SkPaint::kAntiAlias_Flag
                                         | SkPaint::kDevKernText_Flag);
         paint.setTextSize(SkIntToScalar(14));
         canvas.drawText(s, strlen(s), SkIntToScalar(8), SkIntToScalar(14), paint);
     }
-    
+
     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)
     {
         inval(NULL);
@@ -494,22 +494,22 @@
             canvas->translate(SkIntToScalar(480), 0);
             canvas->rotate(SkIntToScalar(90));
         }
-        
+
         this->drawBG(canvas);
-        
+
         if (false)
         {
             SkPaint p;
-            
+
             p.setAntiAlias(true);
             p.setSubpixelText(true);
          //   p.setLinearText(true);
-            
+
             SkScalar size = SkIntToScalar(6);
             SkMSec   dur = 0;
             const int LOOP = 16;
             const int TIMES = 10;
-            
+
             for (int times = 0; times < TIMES; times++)
             {
                 SkMSec now = SkTime::GetMSecs();
@@ -522,12 +522,12 @@
                 dur += SkTime::GetMSecs() - now;
                 SkGraphics::SetFontCacheUsed(0);
             }
-            
+
             printf("----- duration = %g\n", dur * 1.0 / TIMES);
             this->inval(NULL);
             return;
         }
-        
+
         if (false)
         {
             SkPaint p;
@@ -552,7 +552,7 @@
                 }
             }
         }
-        
+
         if (false)
         {
             SkPaint p;
@@ -569,11 +569,11 @@
 #endif
             return;
         }
-        
+
         if (false)
         {
             SkBitmap    bm;
-            
+
             make_textstrip(&bm);
             canvas->translate(0, SkIntToScalar(50));
             for (int i = 0; i < 10; i++)
@@ -582,16 +582,16 @@
                 SkPowerMode mode(SkFloatToScalar(1 / gamma));
                 SkPaint     p;
                 p.setXfermode(&mode);
-                
+
                 canvas->drawBitmap(bm, 0, SkIntToScalar(i) * bm.height(), &p);
             }
             return;
         }
-        
+
         if (false)
         {
             SkPaint paint;
-            
+
             paint.setAntiAlias(true);
             paint.setDevKernText(true);
             SkMSec now = SkTime::GetMSecs();
@@ -609,9 +609,9 @@
             SkRegion    rgn;
             SkPath      path;
             SkPaint     paint;
-            
+
         //    make_badrgn(&rgn, -2);
-            
+
             if (false)
             {
                 paint.setColor(SK_ColorBLUE);
@@ -619,7 +619,7 @@
             }
             paint.setColor(SK_ColorRED);
             draw_rgn(rgn, canvas, paint);
-            
+
             rgn.getBoundaryPath(&path);
             paint.setARGB(0x80, 0, 0, 0xFF);
             canvas->drawPath(path, paint);
@@ -630,13 +630,13 @@
         {
             SkRect r = { SkIntToScalar(50), SkIntToScalar(50), SkIntToScalar(300), SkIntToScalar(300) };
             SkPaint p;
-            
+
             p.setStyle(SkPaint::kStroke_Style);
             p.setAlpha(0x80);
             p.setStrokeWidth(SkIntToScalar(20));
             canvas->drawRect(r, p);
         }
-        
+
         if (false)
         {
             SkPaint p;
@@ -648,7 +648,7 @@
             canvas->drawRect(r, p);
             return;
         }
-        
+
         if (false)
         {
             Sk64    aa, bb;
@@ -661,19 +661,19 @@
             b = a >> 16;
 
 //            SkFixed c = aa.addGetFixed(bb);
-            
+
             printf("%d %d\n", (int)a, a >> 32);
-            
+
             SkBitmap    bm;
             SkPaint     paint;
             SkScalar    scale = SkFloatToScalar(0.5625f);
             SkScalar    x = SkIntToScalar(100);
             SkScalar    y = SkIntToScalar(100);
-            
+
             //paint.setFilterType(SkPaint::kBilinear_FilterType);
-            
+
             SkImageDecoder::DecodeFile("/app_web_browser.png", &bm);
-            
+
            // canvas->drawBitmap(bm, x, y, paint);
             x += SkIntToScalar(100);
             canvas->save();
@@ -691,7 +691,7 @@
             canvas->restore();
             return;
         }
-        
+
         SkAutoCanvasRestore restore(canvas, false);
         {
             SkRect r;
@@ -704,7 +704,7 @@
         int         index = fHints % SK_ARRAY_COUNT(gHints);
         index = 1;
 //        const char* style = gHints[index].fName;
-        
+
 //        canvas->translate(0, SkIntToScalar(50));
 
   //      canvas->drawText(style, strlen(style), SkIntToScalar(20), SkIntToScalar(20), paint);
@@ -712,20 +712,20 @@
         SkSafeUnref(paint.setTypeface(SkTypeface::CreateFromFile("/skimages/samplefont.ttf")));
         paint.setAntiAlias(true);
         paint.setFlags(paint.getFlags() | gHints[index].fFlags);
-        
+
         SkMSec now = 0;
         if (REPEAT_COUNT > 1)
             now = SkTime::GetMSecs();
 
         SkRect clip;
         clip.set(SkIntToScalar(25), SkIntToScalar(34), SkIntToScalar(88), SkIntToScalar(155));
-        
+
         if (0) {
             canvas->clipRect(clip);
         }
 
         if (0) {
-            SkPath clipPath;        
+            SkPath clipPath;
             clipPath.addOval(clip);
             canvas->clipPath(clipPath);
         }
@@ -736,7 +736,7 @@
 #ifdef TEST_CLICKX
         {
             SkPaint p;
-            
+
             p.setColor(SK_ColorGREEN);
             p.setAntiAlias(true);
             canvas->drawLine(fClickX, 0, fClickX, SkIntToScalar(1000), p);
@@ -758,26 +758,26 @@
 //                SkGraphics::SetFontCacheUsed(0);
             }
         }
-        
+
         if (REPEAT_COUNT > 1)
         {
             printf("--------- FPS = %g\n", REPEAT_COUNT * 1000. / (SkTime::GetMSecs() - now));
             this->inval(NULL);
         }
     }
-    
-    virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) 
+
+    virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y)
     {
         fClickX = x;
         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:
     int fHints;
     SkScalar fClickX;
diff --git a/samplecode/SampleTextEffects.cpp b/samplecode/SampleTextEffects.cpp
index b71f5b4..77a3bd7 100644
--- a/samplecode/SampleTextEffects.cpp
+++ b/samplecode/SampleTextEffects.cpp
@@ -16,9 +16,9 @@
     unsigned r = SkGetPackedR32(c);
     unsigned g = SkGetPackedG32(c);
     unsigned b = SkGetPackedB32(c);
-    
+
     unsigned x = r * 5 + g * 7 + b * 4 >> 4;
-    
+
     return SkPackARGB32(0, x, x, x) | (c & (SK_A32_MASK << SK_A32_SHIFT));
 }
 
@@ -44,7 +44,7 @@
         for (int i = 0; i < count; i++)
             result[i] = src[i] & mask;
     }
-    
+
 private:
     SkPMColor   fMask;
 };
@@ -82,7 +82,7 @@
     p.setStrokeWidth(SK_Scalar1*2);
     rast->addLayer(p);
 }
-    
+
 static void r2(SkLayerRasterizer* rast, SkPaint& p)
 {
     p.setStyle(SkPaint::kStrokeAndFill_Style);
@@ -134,7 +134,7 @@
 static void r6(SkLayerRasterizer* rast, SkPaint& p)
 {
     rast->addLayer(p);
-    
+
     p.setAntiAlias(false);
     SkLayerRasterizer* rast2 = new SkLayerRasterizer;
     r5(rast2, p);
@@ -153,7 +153,7 @@
     virtual void flatten(SkFlattenableWriteBuffer& buffer)
     {
         this->INHERITED::flatten(buffer);
-        
+
         buffer.writeScalar(fRadius);
     }
     virtual Factory getFactory() { return CreateProc; }
@@ -163,7 +163,7 @@
     {
         dst->addCircle(loc.fX, loc.fY, fRadius);
     }
-    
+
     Dot2DPathEffect(SkFlattenableReadBuffer& buffer) : Sk2DPathEffect(buffer)
     {
         fRadius = buffer.readScalar();
@@ -191,7 +191,7 @@
 static void r8(SkLayerRasterizer* rast, SkPaint& p)
 {
     rast->addLayer(p);
-    
+
     SkMatrix    lattice;
     lattice.setScale(SK_Scalar1*6, SK_Scalar1*6, 0, 0);
     lattice.postSkew(SK_Scalar1/3, 0, 0, 0);
@@ -220,7 +220,7 @@
         }
         return false;
     }
-    
+
     virtual Factory getFactory() { return CreateProc; }
     virtual void flatten(SkFlattenableWriteBuffer& buffer)
     {
@@ -239,17 +239,17 @@
             src[1].set(SkIntToScalar(u+ucount) + SK_ScalarHalf,
                        SkIntToScalar(v) + SK_ScalarHalf);
             this->getMatrix().mapPoints(dstP, src, 2);
-            
+
             dst->moveTo(dstP[0]);
             dst->lineTo(dstP[1]);
         }
     }
-    
+
     Line2DPathEffect(SkFlattenableReadBuffer& buffer) : Sk2DPathEffect(buffer)
     {
         fWidth = buffer.readScalar();
     }
-    
+
 private:
     SkScalar fWidth;
 
@@ -264,7 +264,7 @@
 static void r9(SkLayerRasterizer* rast, SkPaint& p)
 {
     rast->addLayer(p);
-    
+
     SkMatrix    lattice;
     lattice.setScale(SK_Scalar1, SK_Scalar1*6, 0, 0);
     lattice.postRotate(SkIntToScalar(30), 0, 0);
@@ -302,7 +302,7 @@
     unsigned dr = SkAbs32(SkPacked16ToR32(a) - SkPacked16ToR32(b));
     unsigned dg = SkAbs32(SkPacked16ToG32(a) - SkPacked16ToG32(b));
     unsigned db = SkAbs32(SkPacked16ToB32(a) - SkPacked16ToB32(b));
-    
+
     return SkMax32(dr, SkMax32(dg, db));
 }
 
@@ -317,7 +317,7 @@
 }
 
 static void apply_shader(SkPaint* paint, int index)
-{    
+{
     raster_proc proc = gRastProcs[index];
     if (proc)
     {
@@ -331,7 +331,7 @@
 
 #if 0
     SkScalar dir[] = { SK_Scalar1, SK_Scalar1, SK_Scalar1 };
-    paint->setMaskFilter(SkBlurMaskFilter::CreateEmboss(dir, SK_Scalar1/4, SkIntToScalar(4), SkIntToScalar(3)))->unref();    
+    paint->setMaskFilter(SkBlurMaskFilter::CreateEmboss(dir, SK_Scalar1/4, SkIntToScalar(4), SkIntToScalar(3)))->unref();
 #endif
     paint->setColor(SK_ColorBLUE);
 }
@@ -345,10 +345,10 @@
     {
         fFace = SkTypeface::CreateFromFile("/Users/reed/Downloads/p052024l.pfb");
     }
-    
+
     virtual ~TextEffectView()
     {
-        fFace->safeUnref();
+        SkSafeUnref(fFace);
     }
 
 protected:
@@ -362,22 +362,22 @@
         }
         return this->INHERITED::onQuery(evt);
     }
-    
+
     void drawBG(SkCanvas* canvas)
     {
 //        canvas->drawColor(0xFFDDDDDD);
         canvas->drawColor(SK_ColorWHITE);
     }
-    
+
     virtual void onDraw(SkCanvas* canvas)
     {
         this->drawBG(canvas);
-        
+
         canvas->save();
 //        canvas->scale(SK_Scalar1*2, SK_Scalar1*2, 0, 0);
 
         SkPaint     paint;
-        
+
         paint.setAntiAlias(true);
         paint.setTextSize(SkIntToScalar(56));
         paint.setTypeface(SkTypeface::CreateFromName("sans-serif",
@@ -389,11 +389,11 @@
         SkString str("TextEffects");
 
         paint.setTypeface(fFace);
-        
+
         for (int i = 0; i < SK_ARRAY_COUNT(gRastProcs); i++)
         {
             apply_shader(&paint, i);
-            
+
           //  paint.setMaskFilter(NULL);
           //  paint.setColor(SK_ColorBLACK);
 
@@ -403,7 +403,7 @@
                                     gLightingColors[index].fMul,
                                     gLightingColors[index].fAdd))->unref();
 #endif
-            
+
             canvas->drawText(str.c_str(), str.size(), x, y, paint);
 
             if (0)
@@ -417,7 +417,7 @@
         }
 
         canvas->restore();
-        
+
         if (0)
         {
             SkPoint pts[] = { 0, 0, 0, SkIntToScalar(150) };
@@ -428,7 +428,7 @@
             paint.setShader(s);
             canvas->drawRectCoords(0, 0, SkIntToScalar(120), SkIntToScalar(150), paint);
         }
-        
+
         if (0)
         {
             SkAvoidXfermode   mode(SK_ColorWHITE, 0xFF,
@@ -442,20 +442,20 @@
             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;
 };
diff --git a/samplecode/SampleTypeface.cpp b/samplecode/SampleTypeface.cpp
index fa2f546..96082af 100644
--- a/samplecode/SampleTypeface.cpp
+++ b/samplecode/SampleTypeface.cpp
@@ -70,10 +70,10 @@
                                                    gFaces[i].fStyle);
         }
     }
-    
+
     virtual ~TypefaceView() {
         for (int i = 0; i < gFaceCount; i++) {
-            fFaces[i]->safeUnref();
+            SkSafeUnref(fFaces[i]);
         }
     }
 
@@ -86,11 +86,11 @@
         }
         return this->INHERITED::onQuery(evt);
     }
-    
+
     void drawBG(SkCanvas* canvas) {
         canvas->drawColor(0xFFDDDDDD);
     }
-    
+
     virtual void onDraw(SkCanvas* canvas) {
         this->drawBG(canvas);
 
@@ -105,17 +105,17 @@
 
         const char* text = "Hamburgefons";
         const size_t textLen = strlen(text);
-        
+
         SkScalar x = SkIntToScalar(10);
         SkScalar dy = paint.getFontMetrics(NULL);
         SkScalar y = dy;
-        
+
         for (int i = 0; i < gFaceCount; i++) {
             paint.setTypeface(fFaces[i]);
             canvas->drawText(text, textLen, x, y, paint);
             y += dy;
         }
-        
+
         SkRect r;
         if (false) {
         r.set(10, 10, 100, 100);
@@ -132,7 +132,7 @@
         paint.setStyle(SkPaint::kFill_Style);
         canvas->drawRect(r, paint);
         }
-        
+
         if (false) {
             SkScalar rad = 90;
             SkScalar angle = 210;
@@ -142,12 +142,12 @@
             SkPath path;
             path.arcTo(r, angle, -(angle + 90), true);
             path.close();
-            
+
             paint.setColor(SK_ColorRED);
             canvas->drawRect(path.getBounds(), paint);
             paint.setColor(SK_ColorBLUE);
             canvas->drawPath(path, paint);
-            
+
             paint.setColor(SK_ColorGREEN);
             SkPoint pts[100];
             int count = path.getPoints(pts, 100);
@@ -155,7 +155,7 @@
             canvas->drawPoints(SkCanvas::kPoints_PointMode, count, pts, paint);
         }
     }
-    
+
 private:
     typedef SkView INHERITED;
 };
diff --git a/samplecode/SampleVertices.cpp b/samplecode/SampleVertices.cpp
index 96fa0da..7f5aa96 100644
--- a/samplecode/SampleVertices.cpp
+++ b/samplecode/SampleVertices.cpp
@@ -21,7 +21,7 @@
 
 static SkShader* make_shader0(SkIPoint* size) {
     SkBitmap    bm;
-    
+
     SkImageDecoder::DecodeFile("/skimages/logo.png", &bm);
     size->set(bm.width(), bm.height());
     return SkShader::CreateBitmapShader(bm, SkShader::kClamp_TileMode,
@@ -39,25 +39,25 @@
     SkShader*   fShader0;
     SkShader*   fShader1;
 
-public:    
+public:
 	VerticesView() {
         SkIPoint    size;
-        
+
         fShader0 = make_shader0(&size);
         fShader1 = make_shader1(size);
 
         make_strip(&fRecs[0], size.fX, size.fY);
         make_fan(&fRecs[1], size.fX, size.fY);
         make_tris(&fRecs[2]);
-        
+
         fScale = SK_Scalar1;
     }
-    
+
     virtual ~VerticesView() {
-        fShader0->safeUnref();
-        fShader1->safeUnref();
+        SkSafeUnref(fShader0);
+        SkSafeUnref(fShader1);
     }
-    
+
 protected:
     // overrides from SkEventSink
     virtual bool onQuery(SkEvent* evt)  {
@@ -69,65 +69,65 @@
         }
         return this->INHERITED::onQuery(evt);
     }
-    
+
     void drawBG(SkCanvas* canvas) {
         canvas->drawColor(SK_ColorGRAY);
     }
-    
+
     SkScalar fScale;
-    
+
     virtual void onDraw(SkCanvas* canvas) {
         this->drawBG(canvas);
-        
+
         SkPaint paint;
         paint.setDither(true);
         paint.setFilterBitmap(true);
-        
+
         for (int i = 0; i < SK_ARRAY_COUNT(fRecs); i++) {
             canvas->save();
-            
+
             paint.setShader(NULL);
             canvas->drawVertices(fRecs[i].fMode, fRecs[i].fCount,
                                  fRecs[i].fVerts, fRecs[i].fTexs,
                                  NULL, NULL, NULL, 0, paint);
-            
+
             canvas->translate(SkIntToScalar(250), 0);
-            
+
             paint.setShader(fShader0);
             canvas->drawVertices(fRecs[i].fMode, fRecs[i].fCount,
                                  fRecs[i].fVerts, fRecs[i].fTexs,
                                  NULL, NULL, NULL, 0, paint);
 
             canvas->translate(SkIntToScalar(250), 0);
-            
+
             paint.setShader(fShader1);
             canvas->drawVertices(fRecs[i].fMode, fRecs[i].fCount,
                                  fRecs[i].fVerts, fRecs[i].fTexs,
                                  NULL, NULL, NULL, 0, paint);
             canvas->restore();
-            
+
             canvas->translate(0, SkIntToScalar(250));
         }
     }
-    
+
     virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) {
         return new Click(this);
     }
-    
+
     virtual bool onClick(Click* click) {
     //    fCurrX = click->fICurr.fX;
     //    fCurrY = click->fICurr.fY;
         this->inval(NULL);
         return true;
     }
-    
+
 private:
     struct Rec {
         SkCanvas::VertexMode    fMode;
         int                     fCount;
         SkPoint*                fVerts;
         SkPoint*                fTexs;
-        
+
         Rec() : fCount(0), fVerts(NULL), fTexs(NULL) {}
         ~Rec() { delete[] fVerts; delete[] fTexs; }
     };
@@ -135,11 +135,11 @@
     void make_tris(Rec* rec) {
         int n = 10;
         SkRandom    rand;
-        
+
         rec->fMode = SkCanvas::kTriangles_VertexMode;
         rec->fCount = n * 3;
         rec->fVerts = new SkPoint[rec->fCount];
-        
+
         for (int i = 0; i < n; i++) {
             SkPoint* v = &rec->fVerts[i*3];
             for (int j = 0; j < 3; j++) {
@@ -147,17 +147,17 @@
             }
         }
     }
-    
+
     void make_fan(Rec* rec, int texWidth, int texHeight) {
         const SkScalar tx = SkIntToScalar(texWidth);
         const SkScalar ty = SkIntToScalar(texHeight);
         const int n = 24;
-        
+
         rec->fMode = SkCanvas::kTriangleFan_VertexMode;
         rec->fCount = n + 2;
         rec->fVerts = new SkPoint[rec->fCount];
         rec->fTexs  = new SkPoint[rec->fCount];
-        
+
         SkPoint* v = rec->fVerts;
         SkPoint* t = rec->fTexs;
 
@@ -171,47 +171,47 @@
         }
         v[n+1] = v[1];
         t[n+1].set(tx, ty);
-        
+
         SkMatrix m;
         m.setScale(SkIntToScalar(100), SkIntToScalar(100));
         m.postTranslate(SkIntToScalar(110), SkIntToScalar(110));
         m.mapPoints(v, rec->fCount);
     }
-    
+
     void make_strip(Rec* rec, int texWidth, int texHeight) {
         const SkScalar tx = SkIntToScalar(texWidth);
         const SkScalar ty = SkIntToScalar(texHeight);
         const int n = 24;
-        
+
         rec->fMode = SkCanvas::kTriangleStrip_VertexMode;
         rec->fCount = 2 * (n + 1);
         rec->fVerts = new SkPoint[rec->fCount];
         rec->fTexs  = new SkPoint[rec->fCount];
-        
+
         SkPoint* v = rec->fVerts;
         SkPoint* t = rec->fTexs;
-        
+
         for (int i = 0; i < n; i++) {
             SkScalar cos;
             SkScalar sin = SkScalarSinCos(SK_ScalarPI * 2 * i / n, &cos);
             v[i*2 + 0].set(cos/2, sin/2);
             v[i*2 + 1].set(cos, sin);
-            
+
             t[i*2 + 0].set(tx * i / n, ty);
             t[i*2 + 1].set(tx * i / n, 0);
         }
         v[2*n + 0] = v[0];
         v[2*n + 1] = v[1];
-        
+
         t[2*n + 0].set(tx, ty);
         t[2*n + 1].set(tx, 0);
-        
+
         SkMatrix m;
         m.setScale(SkIntToScalar(100), SkIntToScalar(100));
         m.postTranslate(SkIntToScalar(110), SkIntToScalar(110));
         m.mapPoints(v, rec->fCount);
     }
-    
+
     Rec fRecs[3];
 
     typedef SkView INHERITED;