Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Unified Diff: tools/VisualBench/VisualInteractiveModule.cpp

Issue 1382883003: move visual bench interactive module to timing state machine (Closed) Base URL: https://skia.googlesource.com/skia.git@vb
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/VisualBench/VisualInteractiveModule.h ('k') | tools/VisualBench/VisualLightweightBenchModule.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/VisualBench/VisualInteractiveModule.cpp
diff --git a/tools/VisualBench/VisualInteractiveModule.cpp b/tools/VisualBench/VisualInteractiveModule.cpp
index af922a92bf10352cc422da9abbea92e15904847e..f41bcaebab2e03cdad83df75516a0684e81f7ebc 100755
--- a/tools/VisualBench/VisualInteractiveModule.cpp
+++ b/tools/VisualBench/VisualInteractiveModule.cpp
@@ -23,16 +23,10 @@
__SK_FORCE_IMAGE_DECODER_LINKING;
-static const int kGpuFrameLag = 5;
-static const int kFrames = 5;
-static const double kLoopMs = 5;
-
VisualInteractiveModule::VisualInteractiveModule(VisualBench* owner)
: fCurrentMeasurement(0)
- , fCurrentFrame(0)
- , fLoops(1)
- , fState(kPreWarmLoops_State)
, fBenchmark(nullptr)
+ , fAdvance(false)
, fOwner(SkRef(owner)) {
fBenchmarkStream.reset(new VisualBenchmarkStream);
@@ -40,7 +34,7 @@ VisualInteractiveModule::VisualInteractiveModule(VisualBench* owner)
}
inline void VisualInteractiveModule::renderFrame(SkCanvas* canvas) {
- fBenchmark->draw(fLoops, canvas);
+ fBenchmark->draw(fTSM.loops(), canvas);
this->drawStats(canvas);
canvas->flush();
fOwner->present();
@@ -102,7 +96,8 @@ bool VisualInteractiveModule::advanceRecordIfNecessary(SkCanvas* canvas) {
return true;
}
-
+#include "GrGpu.h"
+#include "GrResourceCache.h"
void VisualInteractiveModule::draw(SkCanvas* canvas) {
if (!this->advanceRecordIfNecessary(canvas)) {
SkDebugf("Exiting VisualBench successfully\n");
@@ -110,123 +105,34 @@ void VisualInteractiveModule::draw(SkCanvas* canvas) {
return;
}
this->renderFrame(canvas);
- switch (fState) {
- case kPreWarmLoopsPerCanvasPreDraw_State: {
- this->perCanvasPreDraw(canvas, kPreWarmLoops_State);
- break;
- }
- case kPreWarmLoops_State: {
- this->preWarm(kTuneLoops_State);
- break;
- }
- case kTuneLoops_State: {
- this->tuneLoops(canvas);
+ TimingStateMachine::ParentEvents event = fTSM.nextFrame(canvas, fBenchmark);
+ switch (event) {
+ case TimingStateMachine::kReset_ParentEvents:
+ fOwner->reset();
break;
- }
- case kPreTiming_State: {
- fBenchmark->perCanvasPreDraw(canvas);
- fBenchmark->preDraw(canvas);
- fCurrentFrame = 0;
- fTimer.start();
- fState = kTiming_State;
- // fall to next state
- }
- case kTiming_State: {
- this->timing(canvas);
+ case TimingStateMachine::kTiming_ParentEvents:
break;
- }
- case kAdvance_State: {
- this->postDraw(canvas);
- this->nextState(kPreWarmLoopsPerCanvasPreDraw_State);
+ case TimingStateMachine::kTimingFinished_ParentEvents:
+ // Record measurements
+ fMeasurements[fCurrentMeasurement++] = fTSM.lastMeasurement();
+ fCurrentMeasurement &= (kMeasurementCount-1); // fast mod
+ SkASSERT(fCurrentMeasurement < kMeasurementCount);
+ this->drawStats(canvas);
+ if (fAdvance) {
+ fAdvance = false;
+ fTSM.nextBenchmark(canvas, fBenchmark);
+ fBenchmark.reset(nullptr);
+ fOwner->reset();
+ } else {
+ fTSM.nextSample();
+ }
break;
- }
- }
-}
-
-inline void VisualInteractiveModule::nextState(State nextState) {
- fState = nextState;
-}
-
-void VisualInteractiveModule::perCanvasPreDraw(SkCanvas* canvas, State nextState) {
- fBenchmark->perCanvasPreDraw(canvas);
- fBenchmark->preDraw(canvas);
- fCurrentFrame = 0;
- this->nextState(nextState);
-}
-
-void VisualInteractiveModule::preWarm(State nextState) {
- if (fCurrentFrame >= kGpuFrameLag) {
- // we currently time across all frames to make sure we capture all GPU work
- this->nextState(nextState);
- fCurrentFrame = 0;
- fTimer.start();
- } else {
- fCurrentFrame++;
- }
-}
-
-inline double VisualInteractiveModule::elapsed() {
- fTimer.end();
- return fTimer.fWall;
-}
-
-void VisualInteractiveModule::resetTimingState() {
- fCurrentFrame = 0;
- fTimer = WallTimer();
- fOwner->reset();
-}
-
-void VisualInteractiveModule::scaleLoops(double elapsedMs) {
- // Scale back the number of loops
- fLoops = (int)ceil(fLoops * kLoopMs / elapsedMs);
-}
-
-inline void VisualInteractiveModule::tuneLoops(SkCanvas* canvas) {
- if (1 << 30 == fLoops) {
- // We're about to wrap. Something's wrong with the bench.
- SkDebugf("InnerLoops wrapped\n");
- fLoops = 0;
- } else {
- double elapsedMs = this->elapsed();
- if (elapsedMs > kLoopMs) {
- this->scaleLoops(elapsedMs);
- fBenchmark->perCanvasPostDraw(canvas);
- this->nextState(kPreTiming_State);
- } else {
- fLoops *= 2;
- this->nextState(kPreWarmLoops_State);
- }
- this->resetTimingState();
- }
-}
-
-void VisualInteractiveModule::recordMeasurement() {
- double measurement = this->elapsed() / (kFrames * fLoops);
- fMeasurements[fCurrentMeasurement++] = measurement;
- fCurrentMeasurement &= (kMeasurementCount-1); // fast mod
- SkASSERT(fCurrentMeasurement < kMeasurementCount);
-}
-
-void VisualInteractiveModule::postDraw(SkCanvas* canvas) {
- fBenchmark->postDraw(canvas);
- fBenchmark->perCanvasPostDraw(canvas);
- fBenchmark.reset(nullptr);
- fLoops = 1;
-}
-
-inline void VisualInteractiveModule::timing(SkCanvas* canvas) {
- if (fCurrentFrame >= kFrames) {
- this->recordMeasurement();
- fTimer.start();
- fCurrentFrame = 0;
- } else {
- fCurrentFrame++;
}
}
bool VisualInteractiveModule::onHandleChar(SkUnichar c) {
if (' ' == c) {
- this->nextState(kAdvance_State);
+ fAdvance = true;
}
return true;
« no previous file with comments | « tools/VisualBench/VisualInteractiveModule.h ('k') | tools/VisualBench/VisualLightweightBenchModule.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698