1 2 /* 3 * Copyright 2013 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 #include "SkBenchmark.h" 10 #include "SkCanvas.h" 11 #include "SkPaint.h" 12 #include "SkRandom.h" 13 14 /** 15 * Draws full screen opaque rectangles. It is designed to test any optimizations in the GPU backend 16 * to turn such draws into clears. 17 */ 18 class FSRectBench : public SkBenchmark { 19 public: 20 FSRectBench(void* param) 21 : INHERITED(param) 22 , fInit(false) { 23 } 24 25 protected: 26 virtual const char* onGetName() SK_OVERRIDE { return "fullscreen_rects"; } 27 28 virtual void onPreDraw() SK_OVERRIDE { 29 if (!fInit) { 30 SkMWCRandom rand; 31 static const SkScalar kMinOffset = 0; 32 static const SkScalar kMaxOffset = 100 * SK_Scalar1; 33 static const SkScalar kOffsetRange = kMaxOffset - kMinOffset; 34 for (int i = 0; i < N; ++i) { 35 fRects[i].fLeft = -kMinOffset - SkScalarMul(rand.nextUScalar1(), kOffsetRange); 36 fRects[i].fTop = -kMinOffset - SkScalarMul(rand.nextUScalar1(), kOffsetRange); 37 fRects[i].fRight = W + kMinOffset + SkScalarMul(rand.nextUScalar1(), kOffsetRange); 38 fRects[i].fBottom = H + kMinOffset + SkScalarMul(rand.nextUScalar1(), kOffsetRange); 39 fColors[i] = rand.nextU() | 0xFF000000; 40 } 41 fInit = true; 42 } 43 } 44 45 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 46 SkPaint paint; 47 for (int i = 0; i < N; ++i) { 48 paint.setColor(fColors[i]); 49 canvas->drawRect(fRects[i], paint); 50 } 51 } 52 53 private: 54 enum { 55 W = 640, 56 H = 480, 57 N = SkBENCHLOOP(300) 58 }; 59 SkRect fRects[N]; 60 SkColor fColors[N]; 61 bool fInit; 62 63 typedef SkBenchmark INHERITED; 64 }; 65 66 DEF_BENCH( return SkNEW_ARGS(FSRectBench, (p)); ) 67