OLD | NEW |
| (Empty) |
1 /* | |
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 TimingStateMachine_DEFINED | |
9 #define TimingStateMachine_DEFINED | |
10 | |
11 #include "Benchmark.h" | |
12 #include "SkTArray.h" | |
13 #include "Timer.h" | |
14 | |
15 class SkCanvas; | |
16 | |
17 /* | |
18 * Manages a timer via a state machine. Can be used by modules to time benchmar
ks | |
19 * | |
20 * Clients call nextFrame, and must handle any requests from the timing state ma
chine, specifically | |
21 * to reset. When kTimingFinished_ParentEvents is returned, then lastMeasuremen
t() will return the | |
22 * timing and loops() will return the number of loops used to time. | |
23 * | |
24 * A client may continue timing the same benchmark indefinitely. To advance to
the next | |
25 * benchmark, the client should call nextBenchmark. | |
26 */ | |
27 class TimingStateMachine { | |
28 public: | |
29 TimingStateMachine(); | |
30 | |
31 enum ParentEvents { | |
32 kReset_ParentEvents, | |
33 kTiming_ParentEvents, | |
34 kTimingFinished_ParentEvents,// This implies parent can read lastMeasure
ment() and must | |
35 // reset | |
36 }; | |
37 | |
38 ParentEvents nextFrame(bool preWarmBetweenSamples); | |
39 | |
40 /* | |
41 * The caller should call this when they are ready to move to the next bench
mark. | |
42 */ | |
43 void nextBenchmark(); | |
44 | |
45 /* | |
46 * When TimingStateMachine returns kTimingFinished_ParentEvents, then the ow
ner can call | |
47 * lastMeasurement() to get the time | |
48 */ | |
49 double lastMeasurement() const { return fLastMeasurement; } | |
50 | |
51 int loops() const { return fLoops; } | |
52 | |
53 private: | |
54 enum State { | |
55 kPreWarm_State, | |
56 kTiming_State, | |
57 }; | |
58 enum InnerState { | |
59 kTuning_InnerState, | |
60 kTiming_InnerState, | |
61 }; | |
62 | |
63 int fCurrentFrame; | |
64 int fLoops; | |
65 double fLastMeasurement; | |
66 double fStartTime; | |
67 State fState; | |
68 InnerState fInnerState; | |
69 }; | |
70 | |
71 #endif | |
OLD | NEW |