1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2014 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef SKPBench_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define SKPBench_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "bench/Benchmark.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkCanvas.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPicture.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkTDArray.h" 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker class SkSurface; 17*c8dee2aaSAndroid Build Coastguard Worker 18*c8dee2aaSAndroid Build Coastguard Worker /** 19*c8dee2aaSAndroid Build Coastguard Worker * Runs an SkPicture as a benchmark by repeatedly drawing it scaled inside a device clip. 20*c8dee2aaSAndroid Build Coastguard Worker */ 21*c8dee2aaSAndroid Build Coastguard Worker class SKPBench : public Benchmark { 22*c8dee2aaSAndroid Build Coastguard Worker public: 23*c8dee2aaSAndroid Build Coastguard Worker SKPBench(const char* name, const SkPicture*, const SkIRect& devClip, SkScalar scale, 24*c8dee2aaSAndroid Build Coastguard Worker bool doLooping); 25*c8dee2aaSAndroid Build Coastguard Worker ~SKPBench() override; 26*c8dee2aaSAndroid Build Coastguard Worker shouldLoop()27*c8dee2aaSAndroid Build Coastguard Worker bool shouldLoop() const override { 28*c8dee2aaSAndroid Build Coastguard Worker return fDoLooping; 29*c8dee2aaSAndroid Build Coastguard Worker } 30*c8dee2aaSAndroid Build Coastguard Worker 31*c8dee2aaSAndroid Build Coastguard Worker void getGpuStats(SkCanvas*, 32*c8dee2aaSAndroid Build Coastguard Worker skia_private::TArray<SkString>* keys, 33*c8dee2aaSAndroid Build Coastguard Worker skia_private::TArray<double>* values) override; 34*c8dee2aaSAndroid Build Coastguard Worker bool getDMSAAStats(GrRecordingContext*) override; 35*c8dee2aaSAndroid Build Coastguard Worker 36*c8dee2aaSAndroid Build Coastguard Worker protected: 37*c8dee2aaSAndroid Build Coastguard Worker const char* onGetName() override; 38*c8dee2aaSAndroid Build Coastguard Worker const char* onGetUniqueName() override; 39*c8dee2aaSAndroid Build Coastguard Worker void onPerCanvasPreDraw(SkCanvas*) override; 40*c8dee2aaSAndroid Build Coastguard Worker void onPerCanvasPostDraw(SkCanvas*) override; 41*c8dee2aaSAndroid Build Coastguard Worker bool isSuitableFor(Backend backend) override; 42*c8dee2aaSAndroid Build Coastguard Worker void onDraw(int loops, SkCanvas* canvas) override; 43*c8dee2aaSAndroid Build Coastguard Worker SkISize onGetSize() override; 44*c8dee2aaSAndroid Build Coastguard Worker 45*c8dee2aaSAndroid Build Coastguard Worker virtual void drawMPDPicture(); 46*c8dee2aaSAndroid Build Coastguard Worker virtual void drawPicture(); 47*c8dee2aaSAndroid Build Coastguard Worker picture()48*c8dee2aaSAndroid Build Coastguard Worker const SkPicture* picture() const { return fPic.get(); } surfaces()49*c8dee2aaSAndroid Build Coastguard Worker const skia_private::TArray<sk_sp<SkSurface>>& surfaces() const { return fSurfaces; } tileRects()50*c8dee2aaSAndroid Build Coastguard Worker const SkTDArray<SkIRect>& tileRects() const { return fTileRects; } 51*c8dee2aaSAndroid Build Coastguard Worker 52*c8dee2aaSAndroid Build Coastguard Worker private: 53*c8dee2aaSAndroid Build Coastguard Worker sk_sp<const SkPicture> fPic; 54*c8dee2aaSAndroid Build Coastguard Worker const SkIRect fClip; 55*c8dee2aaSAndroid Build Coastguard Worker const SkScalar fScale; 56*c8dee2aaSAndroid Build Coastguard Worker SkString fName; 57*c8dee2aaSAndroid Build Coastguard Worker SkString fUniqueName; 58*c8dee2aaSAndroid Build Coastguard Worker 59*c8dee2aaSAndroid Build Coastguard Worker skia_private::TArray<sk_sp<SkSurface>> fSurfaces; // for MultiPictureDraw 60*c8dee2aaSAndroid Build Coastguard Worker SkTDArray<SkIRect> fTileRects; // for MultiPictureDraw 61*c8dee2aaSAndroid Build Coastguard Worker 62*c8dee2aaSAndroid Build Coastguard Worker const bool fDoLooping; 63*c8dee2aaSAndroid Build Coastguard Worker 64*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = Benchmark; 65*c8dee2aaSAndroid Build Coastguard Worker }; 66*c8dee2aaSAndroid Build Coastguard Worker 67*c8dee2aaSAndroid Build Coastguard Worker #endif 68