1 /* 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 SKPAnimationBench_DEFINED 9 #define SKPAnimationBench_DEFINED 10 11 #include "bench/SKPBench.h" 12 #include "include/utils/SkRandom.h" 13 #include "tools/timer/Timer.h" 14 15 /** 16 * Runs an SkPicture as a benchmark by repeatedly drawing it, first centering the picture and 17 * for each step it concats the passed in matrix 18 */ 19 class SKPAnimationBench : public SKPBench { 20 public: 21 class Animation : public SkRefCnt { 22 public: 23 virtual const char* getTag() = 0; 24 virtual void preConcatFrameMatrix(double animationTimeMs, const SkIRect& devBounds, 25 SkMatrix* drawMatrix) = 0; ~Animation()26 virtual ~Animation() {} 27 }; 28 29 SKPAnimationBench(const char* name, const SkPicture*, const SkIRect& devClip, sk_sp<Animation>, 30 bool doLooping); 31 32 static sk_sp<Animation> MakeZoomAnimation(SkScalar zoomMax, double zoomPeriodMs); 33 34 protected: 35 const char* onGetUniqueName() override; 36 void onPerCanvasPreDraw(SkCanvas* canvas) override; 37 drawMPDPicture()38 void drawMPDPicture() override { 39 SK_ABORT("MPD not supported\n"); 40 } 41 void drawPicture() override; 42 43 private: 44 sk_sp<Animation> fAnimation; 45 SkRandom fAnimationTime; 46 SkString fUniqueName; 47 SkIRect fDevBounds; 48 49 typedef SKPBench INHERITED; 50 }; 51 52 #endif 53