/*
 * 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, bool preWarmBeforeSample);
    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;
    bool fPreWarmBeforeSample;

    // support framework
    VisualBench* fOwner;

    typedef VisualModule INHERITED;
};

#endif
