Home | History | Annotate | Download | only in bench
      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;
     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 
     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