/* * 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 "SKPBench.h" #include "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; virtual ~Animation() {} }; SKPAnimationBench(const char* name, const SkPicture*, const SkIRect& devClip, Animation*, bool doLooping); static Animation* CreateZoomAnimation(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; WallTimer fAnimationTimer; SkString fUniqueName; SkIRect fDevBounds; typedef SKPBench INHERITED; }; #endif