Added the following 3 features to sample app.

1) Imported SKP files can now be run using the bbox playback ('b' key)
2) Imported SKP files are displayed using their basename
3) FPS counter has been updated to print time to draw all tiles

Review URL: https://codereview.appspot.com/6904057

git-svn-id: http://skia.googlecode.com/svn/trunk@6718 2bbb7eff-a529-9590-31e7-b0007b416f81
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..2321c04 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);
+            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);
         }
     }