| Index: tools/VisualBench/VisualBench.h
|
| diff --git a/tools/VisualBench/VisualBench.h b/tools/VisualBench/VisualBench.h
|
| index b8cd2bdb771a866171f32c25ab40c9920641dcc2..9843693777099b433dd371a3a1c2affaf6fdd727 100644
|
| --- a/tools/VisualBench/VisualBench.h
|
| +++ b/tools/VisualBench/VisualBench.h
|
| @@ -39,6 +39,34 @@ protected:
|
| void onSizeChange() override;
|
|
|
| private:
|
| + /*
|
| + * The heart of visual bench 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.
|
| + * kPreWarmLoops_State: We prewarm the gpu before auto tuning to enter a steady
|
| + * work state
|
| + * kTuneLoops_State: Then we tune the loops of the benchmark to ensure we
|
| + * are doing a measurable amount of work
|
| + * kPreWarmTimingPerCanvasPreDraw_State: Because reset the context after tuning loops to ensure
|
| + * coherent state, we need to give the benchmark
|
| + * another hook
|
| + * kPreWarmTiming_State: We prewarm the gpu again to enter a steady state
|
| + * kTiming_State: Finally we time the benchmark. When finished timing
|
| + * if we have enough samples then we'll start the next
|
| + * benchmark in the kPreWarmLoopsPerCanvasPreDraw_State.
|
| + * otherwise, we enter the
|
| + * kPreWarmTimingPerCanvasPreDraw_State for another sample
|
| + * In either case we reset the context.
|
| + */
|
| + enum State {
|
| + kPreWarmLoopsPerCanvasPreDraw_State,
|
| + kPreWarmLoops_State,
|
| + kTuneLoops_State,
|
| + kPreWarmTimingPerCanvasPreDraw_State,
|
| + kPreWarmTiming_State,
|
| + kTiming_State,
|
| + };
|
| void setTitle();
|
| bool setupBackend();
|
| void resetContext();
|
| @@ -47,19 +75,21 @@ private:
|
| void printStats();
|
| bool advanceRecordIfNecessary(SkCanvas*);
|
| inline void renderFrame(SkCanvas*);
|
| + inline void nextState(State);
|
| + void perCanvasPreDraw(SkCanvas*, State);
|
| + void preWarm(State nextState);
|
| + void scaleLoops(double elapsedMs);
|
| + inline void tuneLoops();
|
| + inline void timing(SkCanvas*);
|
| + inline double elapsed();
|
| + void resetTimingState();
|
| + void postDraw(SkCanvas*);
|
| + void recordMeasurement();
|
|
|
| struct Record {
|
| SkTArray<double> fMeasurements;
|
| };
|
|
|
| - enum State {
|
| - kPreWarmLoops_State,
|
| - kTuneLoops_State,
|
| - kPreWarmTiming_State,
|
| - kTiming_State,
|
| - };
|
| - void preWarm(State nextState);
|
| -
|
| int fCurrentSample;
|
| int fCurrentFrame;
|
| int fFlushes;
|
|
|