blob: ac06ed4307601782cdd257acd378d6a418c42649 [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
17/*
18 * VisualStreamTimingModule is the base class for modules which want to time a stream of Benchmarks.
19 *
20 * Subclasses should implement renderFrame, which is called for each frame, and timingFinished,
21 * which is called when a sample has finished timing.
22 */
23class VisualStreamTimingModule : public VisualModule {
24public:
25 VisualStreamTimingModule(VisualBench* owner, bool preWarmBeforeSample);
26 void draw(SkCanvas* canvas) override;
27
28private:
29 virtual void renderFrame(SkCanvas*, Benchmark*, int loops)=0;
30
31 // subclasses should return true to advance the stream
32 virtual bool timingFinished(Benchmark*, int loops, double measurement)=0;
33
34 bool nextBenchmarkIfNecessary(SkCanvas*);
35
36 TimingStateMachine fTSM;
37 SkAutoTDelete<VisualBenchmarkStream> fBenchmarkStream;
38 SkAutoTUnref<Benchmark> fBenchmark;
39 bool fReinitializeBenchmark;
40 bool fPreWarmBeforeSample;
41
42 // support framework
43 VisualBench* fOwner;
44
45 typedef VisualModule INHERITED;
46};
47
48#endif