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 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 17 class SkCanvas; 18 19 /* 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 */ 25 class VisualStreamTimingModule : public VisualModule { 26 public: 27 VisualStreamTimingModule(VisualBench* owner); 28 void draw(SkCanvas* canvas) override; 29 30 private: 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 36 inline void handleInitState(SkCanvas*); 37 inline void handleTimingEvent(SkCanvas*, TimingStateMachine::ParentEvents); 38 39 TimingStateMachine fTSM; 40 SkAutoTDelete<VisualBenchmarkStream> fBenchmarkStream; 41 enum InitState { 42 kNone_InitState, 43 kReset_InitState, 44 kNewBenchmark_InitState, 45 }; 46 InitState fInitState; 47 48 // support framework 49 VisualBench* fOwner; 50 51 typedef VisualModule INHERITED; 52 }; 53 54 #endif 55