/* * Copyright 2015 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef VisualStreamTimingModule_DEFINED #define VisualStreamTimingModule_DEFINED #include "VisualModule.h" #include "TimingStateMachine.h" #include "VisualBench.h" #include "VisualBenchmarkStream.h" class SkCanvas; /* * VisualStreamTimingModule is the base class for modules which want to time a stream of Benchmarks. * * Subclasses should implement renderFrame, which is called for each frame, and timingFinished, * which is called when a sample has finished timing. */ class VisualStreamTimingModule : public VisualModule { public: VisualStreamTimingModule(VisualBench* owner); void draw(SkCanvas* canvas) override; private: virtual void renderFrame(SkCanvas*, Benchmark*, int loops)=0; // subclasses should return true to advance the stream virtual bool timingFinished(Benchmark*, int loops, double measurement)=0; inline void handleInitState(SkCanvas*); inline void handleTimingEvent(SkCanvas*, TimingStateMachine::ParentEvents); TimingStateMachine fTSM; SkAutoTDelete<VisualBenchmarkStream> fBenchmarkStream; enum InitState { kNone_InitState, kReset_InitState, kNewBenchmark_InitState, }; InitState fInitState; // support framework VisualBench* fOwner; typedef VisualModule INHERITED; }; #endif