Chromium Code Reviews| Index: tools/VisualBench/TimingStateMachine.h |
| diff --git a/tools/VisualBench/VisualLightweightBenchModule.h b/tools/VisualBench/TimingStateMachine.h |
| similarity index 60% |
| copy from tools/VisualBench/VisualLightweightBenchModule.h |
| copy to tools/VisualBench/TimingStateMachine.h |
| index 1a30875c61b0d52f588eef1e56d138fa39243ed9..b77d32bec14b48a11b2be335609333969a0cb720 100644 |
| --- a/tools/VisualBench/VisualLightweightBenchModule.h |
| +++ b/tools/VisualBench/TimingStateMachine.h |
| @@ -6,35 +6,49 @@ |
| * |
| */ |
| -#ifndef VisualLightweightBenchModule_DEFINED |
| -#define VisualLightweightBenchModule_DEFINED |
| +#ifndef TimingStateMachine_DEFINED |
| +#define TimingStateMachine_DEFINED |
| -#include "VisualModule.h" |
| - |
| -#include "ResultsWriter.h" |
| -#include "SkPicture.h" |
| +#include "Benchmark.h" |
| +#include "SkTArray.h" |
| #include "Timer.h" |
| -#include "VisualBench.h" |
| -#include "VisualBenchmarkStream.h" |
| class SkCanvas; |
| /* |
| - * This module is designed to be a minimal overhead timing module for VisualBench |
| + * Manages a timer via a state machine. Can be used by modules to time benchmarks |
|
robertphillips
2015/10/05 13:05:01
// The normal calling pattern for a client is:
//
|
| */ |
| -class VisualLightweightBenchModule : public VisualModule { |
| +class TimingStateMachine { |
| public: |
| - // TODO get rid of backpointer |
| - VisualLightweightBenchModule(VisualBench* owner); |
| + TimingStateMachine(); |
| + |
| + enum ParentEvents { |
| + kReset_ParentEvents, |
| + kTiming_ParentEvents, |
| + kTimingFinished_ParentEvents,// This implies parent can read lastMeasurement() and must |
| + // reset |
| + }; |
| + |
| + ParentEvents nextFrame(SkCanvas* canvas, Benchmark* benchmark); |
| - void draw(SkCanvas* canvas) override; |
| + /* |
|
robertphillips
2015/10/05 13:05:01
They -> The ?
|
| + * The caller should call this when they are ready to move to the next benchmark. They caller |
| + * must call this with the *last* benchmark so post draw hooks can be invoked |
| + */ |
| + void nextBenchmark(SkCanvas*, Benchmark*); |
| - bool onHandleChar(SkUnichar c) override; |
| + |
| + /* |
|
robertphillips
2015/10/05 13:05:01
kTimingFinished_ParentEvents not kNext... ?
|
| + * When TimingStateMachine returns kNextBenchmark_ParentEvents, then the owner can call |
|
robertphillips
2015/10/05 13:05:01
lastMeasur_e_ment ?
|
| + * lastMeasurment() to get the time |
| + */ |
| + double lastMeasurement() const { return fLastMeasurement; } |
| + |
| + int loops() const { return fLoops; } |
| private: |
| /* |
| - * The heart of visual bench is an event driven timing loop. |
| - * kWarmup_State: We run a dummy bench to let things settle on startup |
| + * The heart of the timing state machine is an event driven timing loop. |
| * kPreWarmLoopsPerCanvasPreDraw_State: Before we begin timing, Benchmarks have a hook to |
| * access the canvas. Then we prewarm before the autotune |
| * loops step. |
| @@ -54,7 +68,6 @@ private: |
| * In either case we reset the context. |
| */ |
| enum State { |
| - kWarmup_State, |
| kPreWarmLoopsPerCanvasPreDraw_State, |
| kPreWarmLoops_State, |
| kTuneLoops_State, |
| @@ -62,41 +75,22 @@ private: |
| kPreWarmTiming_State, |
| kTiming_State, |
| }; |
| - void setTitle(); |
| - bool setupBackend(); |
| - void setupRenderTarget(); |
| - void printStats(); |
| - bool advanceRecordIfNecessary(SkCanvas*); |
| - inline void renderFrame(SkCanvas*); |
| + |
| inline void nextState(State); |
| - void perCanvasPreDraw(SkCanvas*, State); |
| - void preWarm(State nextState); |
| - inline void tuneLoops(); |
| - inline void timing(SkCanvas*); |
| + ParentEvents perCanvasPreDraw(SkCanvas*, Benchmark*, State); |
| + ParentEvents preWarm(State nextState); |
| + inline ParentEvents tuneLoops(); |
| + inline ParentEvents timing(SkCanvas*, Benchmark*); |
| inline double elapsed(); |
| void resetTimingState(); |
| - void postDraw(SkCanvas*); |
| + void postDraw(SkCanvas*, Benchmark*); |
| void recordMeasurement(); |
| - void warmup(SkCanvas* canvas); |
| - struct Record { |
| - SkTArray<double> fMeasurements; |
| - }; |
| - |
| - int fCurrentSample; |
| int fCurrentFrame; |
| int fLoops; |
| - SkTArray<Record> fRecords; |
| + double fLastMeasurement; |
| WallTimer fTimer; |
| State fState; |
| - SkAutoTDelete<VisualBenchmarkStream> fBenchmarkStream; |
| - SkAutoTUnref<Benchmark> fBenchmark; |
| - |
| - // support framework |
| - SkAutoTUnref<VisualBench> fOwner; |
| - SkAutoTDelete<ResultsWriter> fResults; |
| - |
| - typedef VisualModule INHERITED; |
| }; |
| #endif |