aboutsummaryrefslogtreecommitdiffhomepage
path: root/samplecode
diff options
context:
space:
mode:
authorGravatar djsollen@google.com <djsollen@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-12-07 21:52:34 +0000
committerGravatar djsollen@google.com <djsollen@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-12-07 21:52:34 +0000
commitbcedc220121e36b7c6f52aadb7000de1c5aee609 (patch)
treebbcdae8175be6d9d05d6ceebd3b8fe8096fa2994 /samplecode
parentd3d377f1d6f2b4450ca34a3c1b9de880b8a0632c (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
Diffstat (limited to 'samplecode')
-rw-r--r--samplecode/SampleApp.cpp25
-rw-r--r--samplecode/SampleApp.h1
-rw-r--r--samplecode/SamplePictFile.cpp45
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);
}
}