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