blob: 64c1c3d35f95027950773aecc6832b0e2e4c904b [file] [log] [blame]
bsalomon@google.comaade2e12013-08-02 14:39:25 +00001
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 */
18class FSRectBench : public SkBenchmark {
19public:
20 FSRectBench(void* param)
21 : INHERITED(param)
22 , fInit(false) {
23 }
24
25protected:
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
53private:
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
66DEF_BENCH( return SkNEW_ARGS(FSRectBench, (p)); )