• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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