/*
 * 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 SKPAnimationBench_DEFINED
#define SKPAnimationBench_DEFINED

#include "bench/SKPBench.h"
#include "src/base/SkRandom.h"
#include "tools/timer/Timer.h"

/**
 * Runs an SkPicture as a benchmark by repeatedly drawing it, first centering the picture and
 * for each step it concats the passed in matrix
 */
class SKPAnimationBench : public SKPBench {
public:
    class Animation : public SkRefCnt {
    public:
        virtual const char* getTag() = 0;
        virtual void preConcatFrameMatrix(double animationTimeMs, const SkIRect& devBounds,
                                          SkMatrix* drawMatrix) = 0;
    };

    SKPAnimationBench(const char* name, const SkPicture*, const SkIRect& devClip, sk_sp<Animation>,
                      bool doLooping);

    static sk_sp<Animation> MakeZoomAnimation(SkScalar zoomMax, double zoomPeriodMs);

protected:
    const char* onGetUniqueName() override;
    void onPerCanvasPreDraw(SkCanvas* canvas) override;

    void drawMPDPicture() override {
        SK_ABORT("MPD not supported\n");
    }
    void drawPicture() override;

private:
    sk_sp<Animation> fAnimation;
    SkRandom         fAnimationTime;
    SkString         fUniqueName;
    SkIRect          fDevBounds;

    using INHERITED = SKPBench;
};

#endif
