1 /*
2  * Copyright 2012 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #include "Benchmark.h"
9 #include "SkCanvas.h"
10 #include "SkRect.h"
11 
12 static const SkScalar kCellWidth = SkIntToScalar(20);
13 static const SkScalar kCellHeight = SkIntToScalar(10);
14 
15 // This bench draws a table in the manner of Google spreadsheet and sahadan.com.
16 //           ____________ ___
17 //          |     1      | 2 |
18 //          |____________|___|
19 //          |     3      | 4 |
20 //          |____________|___|
21 //
22 // Areas 1-4 are first all draw white. Areas 3&4 are then drawn grey. Areas
23 // 2&4 are then drawn grey. Areas 2&3 are thus double drawn while area 4 is
24 // triple drawn.
25 // This trio of drawRects is then repeat for the next cell.
26 class TableBench : public Benchmark {
27 public:
28     static const int kNumRows = 48;
29     static const int kNumCols = 32;
30 
31 protected:
onGetName()32     virtual const char* onGetName() {
33         return "tablebench";
34     }
35 
onDraw(const int loops,SkCanvas * canvas)36     virtual void onDraw(const int loops, SkCanvas* canvas) {
37         SkPaint cellPaint;
38         cellPaint.setColor(0xFFFFFFF);
39 
40         SkPaint borderPaint;
41         borderPaint.setColor(0xFFCCCCCC);
42 
43         for (int i = 0; i < loops; ++i) {
44             for (int row = 0; row < kNumRows; ++row) {
45                 for (int col = 0; col < kNumCols; ++col) {
46                     SkRect cell = SkRect::MakeLTRB(col * kCellWidth,
47                                                    row * kCellHeight,
48                                                    (col+1) * kCellWidth,
49                                                    (row+1) * kCellHeight);
50                     canvas->drawRect(cell, cellPaint);
51 
52                     SkRect bottom = SkRect::MakeLTRB(col * kCellWidth,
53                                                      row * kCellHeight + (kCellHeight-SK_Scalar1),
54                                                      (col+1) * kCellWidth,
55                                                      (row+1) * kCellHeight);
56                     canvas->drawRect(bottom, borderPaint);
57 
58                     SkRect right = SkRect::MakeLTRB(col * kCellWidth + (kCellWidth-SK_Scalar1),
59                                                     row * kCellHeight,
60                                                     (col+1) * kCellWidth,
61                                                     (row+1) * kCellHeight);
62                     canvas->drawRect(right, borderPaint);
63                 }
64             }
65         }
66     }
67 
68 private:
69     typedef Benchmark INHERITED;
70 };
71 
72 DEF_BENCH( return new TableBench(); )
73