blob: 5dbec693fa969d6294e09c267cf36c24cd11fef5 [file] [log] [blame]
joshualittd0f0bce2015-10-14 07:49:28 -07001/*
2 * Copyright 2015 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef VisualStreamTimingModule_DEFINED
9#define VisualStreamTimingModule_DEFINED
10
11#include "VisualModule.h"
12
13#include "TimingStateMachine.h"
14#include "VisualBench.h"
15#include "VisualBenchmarkStream.h"
16
joshualittc603c142015-10-15 07:18:29 -070017class SkCanvas;
18
joshualittd0f0bce2015-10-14 07:49:28 -070019/*
20 * VisualStreamTimingModule is the base class for modules which want to time a stream of Benchmarks.
21 *
22 * Subclasses should implement renderFrame, which is called for each frame, and timingFinished,
23 * which is called when a sample has finished timing.
24 */
25class VisualStreamTimingModule : public VisualModule {
26public:
27 VisualStreamTimingModule(VisualBench* owner, bool preWarmBeforeSample);
28 void draw(SkCanvas* canvas) override;
29
30private:
31 virtual void renderFrame(SkCanvas*, Benchmark*, int loops)=0;
32
33 // subclasses should return true to advance the stream
34 virtual bool timingFinished(Benchmark*, int loops, double measurement)=0;
35
joshualittc603c142015-10-15 07:18:29 -070036 inline void handleInitState(SkCanvas*);
37 inline void handleTimingEvent(SkCanvas*, TimingStateMachine::ParentEvents);
joshualitta3b8c672015-10-14 14:45:07 -070038
joshualittd0f0bce2015-10-14 07:49:28 -070039 TimingStateMachine fTSM;
40 SkAutoTDelete<VisualBenchmarkStream> fBenchmarkStream;
joshualittc603c142015-10-15 07:18:29 -070041 enum InitState {
42 kNone_InitState,
43 kReset_InitState,
44 kNewBenchmark_InitState,
45 };
46 InitState fInitState;
joshualittd0f0bce2015-10-14 07:49:28 -070047 bool fPreWarmBeforeSample;
48
49 // support framework
50 VisualBench* fOwner;
51
52 typedef VisualModule INHERITED;
53};
54
55#endif