Added bench to replicate Google spreadsheet-style table drawing
authorrobertphillips@google.com <robertphillips@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Wed, 3 Oct 2012 13:25:13 +0000 (13:25 +0000)
committerrobertphillips@google.com <robertphillips@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Wed, 3 Oct 2012 13:25:13 +0000 (13:25 +0000)
https://codereview.appspot.com/6593076/

git-svn-id: http://skia.googlecode.com/svn/trunk@5782 2bbb7eff-a529-9590-31e7-b0007b416f81

bench/TableBench.cpp [new file with mode: 0644]
gyp/bench.gypi

diff --git a/bench/TableBench.cpp b/bench/TableBench.cpp
new file mode 100644 (file)
index 0000000..3c092aa
--- /dev/null
@@ -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);
index ecb533a5784b8e6f3cbc9f3eb23e9e140f4f713b..e3e70da91cc5d8e207f6c0cb13bc2900916f75e0 100644 (file)
@@ -36,6 +36,7 @@
     '../bench/RTreeBench.cpp',
     '../bench/ScalarBench.cpp',
     '../bench/ShaderMaskBench.cpp',
+    '../bench/TableBench.cpp',
     '../bench/TextBench.cpp',
     '../bench/VertBench.cpp',
     '../bench/WriterBench.cpp',