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;
26     };
27 
28     SKPAnimationBench(const char* name, const SkPicture*, const SkIRect& devClip, sk_sp<Animation>,
29                       bool doLooping);
30 
31     static sk_sp<Animation> MakeZoomAnimation(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     SkRandom         fAnimationTime;
45     SkString         fUniqueName;
46     SkIRect          fDevBounds;
47 
48     using INHERITED = SKPBench;
49 };
50 
51 #endif
52