• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "Benchmark.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 Benchmark {
19 public:
FSRectBench()20     FSRectBench() : fInit(false) { }
21 
22 protected:
onGetName()23     const char* onGetName() override { return "fullscreen_rects"; }
24 
onDelayedSetup()25     void onDelayedSetup() override {
26         if (!fInit) {
27             SkRandom rand;
28             static const SkScalar kMinOffset = 0;
29             static const SkScalar kMaxOffset = 100 * SK_Scalar1;
30             static const SkScalar kOffsetRange = kMaxOffset - kMinOffset;
31             for (int i = 0; i < N; ++i) {
32                 fRects[i].fLeft = -kMinOffset - SkScalarMul(rand.nextUScalar1(), kOffsetRange);
33                 fRects[i].fTop = -kMinOffset - SkScalarMul(rand.nextUScalar1(), kOffsetRange);
34                 fRects[i].fRight = W + kMinOffset + SkScalarMul(rand.nextUScalar1(), kOffsetRange);
35                 fRects[i].fBottom = H + kMinOffset + SkScalarMul(rand.nextUScalar1(), kOffsetRange);
36                 fColors[i] = rand.nextU() | 0xFF000000;
37             }
38             fInit = true;
39         }
40     }
41 
onDraw(int loops,SkCanvas * canvas)42     void onDraw(int loops, SkCanvas* canvas) override {
43         SkPaint paint;
44         for (int i = 0; i < loops; ++i) {
45             paint.setColor(fColors[i % N]);
46             canvas->drawRect(fRects[i % N], paint);
47         }
48     }
49 
50 private:
51     enum {
52         W = 640,
53         H = 480,
54         N = 300,
55     };
56     SkRect  fRects[N];
57     SkColor fColors[N];
58     bool fInit;
59 
60     typedef Benchmark INHERITED;
61 };
62 
63 DEF_BENCH(return new FSRectBench();)
64