1/* 2 * Copyright 2014 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 SKPBench_DEFINED 9#define SKPBench_DEFINED 10 11#include "Benchmark.h" 12#include "SkCanvas.h" 13#include "SkPicture.h" 14 15/** 16 * Runs an SkPicture as a benchmark by repeatedly drawing it scaled inside a device clip. 17 */ 18class SKPBench : public Benchmark { 19public: 20 SKPBench(const char* name, const SkPicture*, const SkIRect& devClip, SkScalar scale, 21 bool useMultiPictureDraw); 22 ~SKPBench() override; 23 24protected: 25 const char* onGetName() override; 26 const char* onGetUniqueName() override; 27 void onPerCanvasPreDraw(SkCanvas*) override; 28 void onPerCanvasPostDraw(SkCanvas*) override; 29 bool isSuitableFor(Backend backend) override; 30 void onDraw(const int loops, SkCanvas* canvas) override; 31 SkIPoint onGetSize() override; 32 33 virtual void drawMPDPicture(); 34 virtual void drawPicture(); 35 36 const SkPicture* picture() const { return fPic; } 37 const SkTDArray<SkSurface*>& surfaces() const { return fSurfaces; } 38 const SkTDArray<SkIRect>& tileRects() const { return fTileRects; } 39 40private: 41 SkAutoTUnref<const SkPicture> fPic; 42 const SkIRect fClip; 43 const SkScalar fScale; 44 SkString fName; 45 SkString fUniqueName; 46 47 const bool fUseMultiPictureDraw; 48 SkTDArray<SkSurface*> fSurfaces; // for MultiPictureDraw 49 SkTDArray<SkIRect> fTileRects; // for MultiPictureDraw 50 51 typedef Benchmark INHERITED; 52}; 53 54#endif 55