text: /*
   * Copyright 2015 Google Inc.
   *
   * Use of this source code is governed by a BSD-style license that can be
   * found in the LICENSE file.
   */
  
  #ifndef SKPAnimationBench_DEFINED
  #define SKPAnimationBench_DEFINED
  
  #include "SKPBench.h"
  #include "Timer.h"
  
  /**
   * Runs an SkPicture as a benchmark by repeatedly drawing it, first centering the picture and
   * for each step it concats the passed in matrix
   */
  class SKPAnimationBench : public SKPBench {
  public:
      class Animation : public SkRefCnt {
      public:
          virtual const char* getTag() = 0;
          virtual void preConcatFrameMatrix(double animationTimeMs, const SkIRect& devBounds,
                                            SkMatrix* drawMatrix) = 0;
          virtual ~Animation() {}
      };
  
      SKPAnimationBench(const char* name, const SkPicture*, const SkIRect& devClip, Animation*,
                        bool doLooping);
  
      static Animation* CreateZoomAnimation(SkScalar zoomMax, double zoomPeriodMs);
  
  protected:
      const char* onGetUniqueName() override;
      void onPerCanvasPreDraw(SkCanvas* canvas) override;
  
      void drawMPDPicture() override {
          SK_ABORT("MPD not supported\n");
      }
      void drawPicture() override;
  
  private:
      sk_sp<Animation> fAnimation;
      WallTimer        fAnimationTimer;
      SkString         fUniqueName;
      SkIRect          fDevBounds;
  
      typedef SKPBench INHERITED;
  };
  
  #endif
  