• 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 "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