aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/FSRectBench.cpp
diff options
context:
space:
mode:
authorGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-08-02 14:39:25 +0000
committerGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-08-02 14:39:25 +0000
commitaade2e1e19181eee0d950456cf50aa7cf6a239f8 (patch)
tree199b50363fce96c84db8da28a61ba6d6e2e8bd36 /bench/FSRectBench.cpp
parentfde1e7ccb4524aa2e0c42872e529ee25d09e7f34 (diff)
Add fullscreen rect bench
R=robertphillips@google.com Review URL: https://codereview.chromium.org/21592002 git-svn-id: http://skia.googlecode.com/svn/trunk@10510 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'bench/FSRectBench.cpp')
-rw-r--r--bench/FSRectBench.cpp66
1 files changed, 66 insertions, 0 deletions
diff --git a/bench/FSRectBench.cpp b/bench/FSRectBench.cpp
new file mode 100644
index 0000000000..64c1c3d35f
--- /dev/null
+++ b/bench/FSRectBench.cpp
@@ -0,0 +1,66 @@
+
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "SkBenchmark.h"
+#include "SkCanvas.h"
+#include "SkPaint.h"
+#include "SkRandom.h"
+
+/**
+ * Draws full screen opaque rectangles. It is designed to test any optimizations in the GPU backend
+ * to turn such draws into clears.
+ */
+class FSRectBench : public SkBenchmark {
+public:
+ FSRectBench(void* param)
+ : INHERITED(param)
+ , fInit(false) {
+ }
+
+protected:
+ virtual const char* onGetName() SK_OVERRIDE { return "fullscreen_rects"; }
+
+ virtual void onPreDraw() SK_OVERRIDE {
+ if (!fInit) {
+ SkMWCRandom rand;
+ static const SkScalar kMinOffset = 0;
+ static const SkScalar kMaxOffset = 100 * SK_Scalar1;
+ static const SkScalar kOffsetRange = kMaxOffset - kMinOffset;
+ for (int i = 0; i < N; ++i) {
+ fRects[i].fLeft = -kMinOffset - SkScalarMul(rand.nextUScalar1(), kOffsetRange);
+ fRects[i].fTop = -kMinOffset - SkScalarMul(rand.nextUScalar1(), kOffsetRange);
+ fRects[i].fRight = W + kMinOffset + SkScalarMul(rand.nextUScalar1(), kOffsetRange);
+ fRects[i].fBottom = H + kMinOffset + SkScalarMul(rand.nextUScalar1(), kOffsetRange);
+ fColors[i] = rand.nextU() | 0xFF000000;
+ }
+ fInit = true;
+ }
+ }
+
+ virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
+ SkPaint paint;
+ for (int i = 0; i < N; ++i) {
+ paint.setColor(fColors[i]);
+ canvas->drawRect(fRects[i], paint);
+ }
+ }
+
+private:
+ enum {
+ W = 640,
+ H = 480,
+ N = SkBENCHLOOP(300)
+ };
+ SkRect fRects[N];
+ SkColor fColors[N];
+ bool fInit;
+
+ typedef SkBenchmark INHERITED;
+};
+
+DEF_BENCH( return SkNEW_ARGS(FSRectBench, (p)); )