diff options
author | djsollen@google.com <djsollen@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-12-07 21:52:34 +0000 |
---|---|---|
committer | djsollen@google.com <djsollen@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-12-07 21:52:34 +0000 |
commit | bcedc220121e36b7c6f52aadb7000de1c5aee609 (patch) | |
tree | bbcdae8175be6d9d05d6ceebd3b8fe8096fa2994 | |
parent | d3d377f1d6f2b4450ca34a3c1b9de880b8a0632c (diff) |
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
-rw-r--r-- | samplecode/SampleApp.cpp | 25 | ||||
-rw-r--r-- | samplecode/SampleApp.h | 1 | ||||
-rw-r--r-- | samplecode/SamplePictFile.cpp | 45 |
3 files changed, 58 insertions, 13 deletions
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp index cc06e04250..716998f960 100644 --- a/samplecode/SampleApp.cpp +++ b/samplecode/SampleApp.cpp @@ -1051,6 +1051,10 @@ void SampleWindow::draw(SkCanvas* canvas) { this->updateMatrix(); } + if (fMeasureFPS) { + fMeasureFPS_Time = 0; + } + if (fNClip) { this->INHERITED::draw(canvas); SkBitmap orig = capture_bitmap(canvas); @@ -1111,6 +1115,11 @@ void SampleWindow::draw(SkCanvas* canvas) { magnify(canvas); } + if (fMeasureFPS && fMeasureFPS_Time) { + this->updateTitle(); + this->postInvalDelay(); + } + // do this last fDevManager->publishCanvas(fDeviceType, canvas, this); } @@ -1396,10 +1405,8 @@ void SampleWindow::afterChildren(SkCanvas* orig) { } // 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 @@ void SampleWindow::beforeChild(SkView* child, SkCanvas* canvas) { 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 @@ bool SampleWindow::onHandleChar(SkUnichar uni) { } 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 85392e0c9a..2308a121ab 100644 --- a/samplecode/SampleApp.h +++ b/samplecode/SampleApp.h @@ -168,6 +168,7 @@ private: 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 22c81d1d94..2321c042f8 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 @@ class PictFileView : public SampleView { 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 @@ protected: 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 bool onEvent(const SkEvent& evt) { + if (evt.isType("PictFileView::toggleBBox")) { + fUseBBox = !fUseBBox; + return true; + } + return this->INHERITED::onEvent(evt); + } + virtual void onDrawContent(SkCanvas* canvas) { - if (!fPicture) { - fPicture = LoadPicture(fFilename.c_str()); + SkPicture** picture = fUseBBox ? &fBBoxPicture : &fPicture; + + if (!*picture) { + *picture = LoadPicture(fFilename.c_str(), fUseBBox); } - if (fPicture) { - canvas->drawPicture(*fPicture); + if (*picture) { + canvas->drawPicture(**picture); } } |