aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench/TableBench.cpp
diff options
context:
space:
mode:
authorGravatar robertphillips@google.com <robertphillips@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-10-03 13:25:13 +0000
committerGravatar robertphillips@google.com <robertphillips@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-10-03 13:25:13 +0000
commit924352685d894e5985eab250a51e507e75e00007 (patch)
tree43bc50f4ee81a29f8ab2e820e7698cbd1bc84f37 /bench/TableBench.cpp
parent4f45258d456d27dc0ac6af29913e54400f953ae5 (diff)
Added bench to replicate Google spreadsheet-style table drawing
Diffstat (limited to 'bench/TableBench.cpp')
-rw-r--r--bench/TableBench.cpp81
1 files changed, 81 insertions, 0 deletions
diff --git a/bench/TableBench.cpp b/bench/TableBench.cpp
new file mode 100644
index 0000000000..3c092aa4dc
--- /dev/null
+++ b/bench/TableBench.cpp
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2012 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 "SkRect.h"
+
+static const SkScalar kCellWidth = SkIntToScalar(20);
+static const SkScalar kCellHeight = SkIntToScalar(10);
+
+// This bench draws a table in the manner of Google spreadsheet and sahadan.com.
+// ____________ ___
+// | 1 | 2 |
+// |____________|___|
+// | 3 | 4 |
+// |____________|___|
+//
+// Areas 1-4 are first all draw white. Areas 3&4 are then drawn grey. Areas
+// 2&4 are then drawn grey. Areas 2&3 are thus double drawn while area 4 is
+// triple drawn.
+// This trio of drawRects is then repeat for the next cell.
+class TableBench : public SkBenchmark {
+public:
+
+ static const int kNumIterations = SkBENCHLOOP(10);
+ static const int kNumRows = 48;
+ static const int kNumCols = 32;
+
+ TableBench(void* param)
+ : INHERITED(param) {
+ }
+
+protected:
+ virtual const char* onGetName() {
+ return "tablebench";
+ }
+
+ virtual void onDraw(SkCanvas* canvas) {
+
+ SkPaint cellPaint;
+ cellPaint.setColor(0xFFFFFFF);
+
+ SkPaint borderPaint;
+ borderPaint.setColor(0xFFCCCCCC);
+
+ for (int i = 0; i < kNumIterations; ++i) {
+ for (int row = 0; row < kNumRows; ++row) {
+ for (int col = 0; col < kNumCols; ++col) {
+ SkRect cell = SkRect::MakeLTRB(col * kCellWidth,
+ row * kCellHeight,
+ (col+1) * kCellWidth,
+ (row+1) * kCellHeight);
+ canvas->drawRect(cell, cellPaint);
+
+ SkRect bottom = SkRect::MakeLTRB(col * kCellWidth,
+ row * kCellHeight + (kCellHeight-SK_Scalar1),
+ (col+1) * kCellWidth,
+ (row+1) * kCellHeight);
+ canvas->drawRect(bottom, borderPaint);
+
+ SkRect right = SkRect::MakeLTRB(col * kCellWidth + (kCellWidth-SK_Scalar1),
+ row * kCellHeight,
+ (col+1) * kCellWidth,
+ (row+1) * kCellHeight);
+ canvas->drawRect(right, borderPaint);
+ }
+ }
+ }
+ }
+
+private:
+ typedef SkBenchmark INHERITED;
+};
+
+static SkBenchmark* gFactory(void* p) { return new TableBench(p); }
+
+static BenchRegistry gRegistry(gFactory);