diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index cc06e04..716998f 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -1051,6 +1051,10 @@
         this->updateMatrix();
     }
 
+    if (fMeasureFPS) {
+        fMeasureFPS_Time = 0;
+    }
+
     if (fNClip) {
         this->INHERITED::draw(canvas);
         SkBitmap orig = capture_bitmap(canvas);
@@ -1111,6 +1115,11 @@
         magnify(canvas);
     }
 
+    if (fMeasureFPS && fMeasureFPS_Time) {
+        this->updateTitle();
+        this->postInvalDelay();
+    }
+
     // do this last
     fDevManager->publishCanvas(fDeviceType, canvas, this);
 }
@@ -1396,10 +1405,8 @@
     }
 
     // Do this after presentGL and other finishing, rather than in afterChild
-    if (fMeasureFPS && fMeasureFPS_Time) {
-        fMeasureFPS_Time = SkTime::GetMSecs() - fMeasureFPS_Time;
-        this->updateTitle();
-        this->postInvalDelay();
+    if (fMeasureFPS && fMeasureFPS_StartTime) {
+        fMeasureFPS_Time += SkTime::GetMSecs() - fMeasureFPS_StartTime;
     }
 
     //    if ((fScrollTestX | fScrollTestY) != 0)
@@ -1471,9 +1478,8 @@
     this->installDrawFilter(canvas);
 
     if (fMeasureFPS) {
-        fMeasureFPS_Time = 0;   // 0 means the child is not aware of repeat-draw
         if (SampleView::SetRepeatDraw(child, FPS_REPEAT_COUNT)) {
-            fMeasureFPS_Time = SkTime::GetMSecs();
+            fMeasureFPS_StartTime = SkTime::GetMSecs();
         }
     } else {
         (void)SampleView::SetRepeatDraw(child, 1);
@@ -1778,6 +1784,13 @@
     }
 
     switch (uni) {
+        case 'b':
+            {
+            postEventToSink(SkNEW_ARGS(SkEvent, ("PictFileView::toggleBBox")), curr_view(this));
+            this->updateTitle();
+            this->inval(NULL);
+            break;
+            }
         case 'B':
 //            gIgnoreFastBlurRect = !gIgnoreFastBlurRect;
             this->inval(NULL);
diff --git a/samplecode/SampleApp.h b/samplecode/SampleApp.h
index 85392e0..2308a12 100644
--- a/samplecode/SampleApp.h
+++ b/samplecode/SampleApp.h
@@ -168,6 +168,7 @@
     bool fRequestGrabImage;
     bool fMeasureFPS;
     SkMSec fMeasureFPS_Time;
+    SkMSec fMeasureFPS_StartTime;
     bool fMagnify;
     SkISize fTileCount;
 
diff --git a/samplecode/SamplePictFile.cpp b/samplecode/SamplePictFile.cpp
index 22c81d1..b53ba83 100644
--- a/samplecode/SamplePictFile.cpp
+++ b/samplecode/SamplePictFile.cpp
@@ -13,6 +13,7 @@
 #include "SkGradientShader.h"
 #include "SkGraphics.h"
 #include "SkImageDecoder.h"
+#include "SkOSFile.h"
 #include "SkPath.h"
 #include "SkPicture.h"
 #include "SkRandom.h"
@@ -31,8 +32,10 @@
 class PictFileView : public SampleView {
     SkString    fFilename;
     SkPicture*  fPicture;
+    SkPicture*  fBBoxPicture;
+    bool        fUseBBox;
 
-    static SkPicture* LoadPicture(const char path[]) {
+    static SkPicture* LoadPicture(const char path[], bool useBBox) {
         SkPicture* pic = NULL;
 
         SkBitmap bm;
@@ -60,16 +63,30 @@
                 p2.serialize(&writer);
             }
         }
-        return pic;
+
+        if (useBBox) {
+            SkPicture* bboxPicture = SkNEW(SkPicture);
+            pic->draw(bboxPicture->beginRecording(pic->width(), pic->height(),
+                    SkPicture::kOptimizeForClippedPlayback_RecordingFlag));
+            bboxPicture->endRecording();
+            SkDELETE(pic);
+            return bboxPicture;
+
+        } else {
+            return pic;
+        }
     }
 
 public:
     PictFileView(const char name[] = NULL) : fFilename(name) {
         fPicture = NULL;
+        fBBoxPicture = NULL;
+        fUseBBox = false;
     }
 
     virtual ~PictFileView() {
         SkSafeUnref(fPicture);
+        SkSafeUnref(fBBoxPicture);
     }
 
 protected:
@@ -77,19 +94,33 @@
     virtual bool onQuery(SkEvent* evt) {
         if (SampleCode::TitleQ(*evt)) {
             SkString name("P:");
-            name.append(fFilename);
+            const char* basename = strrchr(fFilename.c_str(), SkPATH_SEPARATOR);
+            name.append(basename ? basename+1: fFilename.c_str());
+            if (fUseBBox) {
+                name.append(" <bbox>");
+            }
             SampleCode::TitleR(evt, name.c_str());
             return true;
         }
         return this->INHERITED::onQuery(evt);
     }
 
-    virtual void onDrawContent(SkCanvas* canvas) {
-        if (!fPicture) {
-            fPicture = LoadPicture(fFilename.c_str());
+    virtual bool onEvent(const SkEvent& evt) {
+        if (evt.isType("PictFileView::toggleBBox")) {
+            fUseBBox = !fUseBBox;
+            return true;
         }
-        if (fPicture) {
-            canvas->drawPicture(*fPicture);
+        return this->INHERITED::onEvent(evt);
+    }
+
+    virtual void onDrawContent(SkCanvas* canvas) {
+        SkPicture** picture = fUseBBox ? &fBBoxPicture : &fPicture;
+
+        if (!*picture) {
+            *picture = LoadPicture(fFilename.c_str(), fUseBBox);
+        }
+        if (*picture) {
+            canvas->drawPicture(**picture);
         }
     }
 
