Home | History | Annotate | Download | only in bench
      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 "SkBenchmark.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 SkBenchmark {
     27 public:
     28     static const int kNumRows = 48;
     29     static const int kNumCols = 32;
     30 
     31 protected:
     32     virtual const char* onGetName() {
     33         return "tablebench";
     34     }
     35 
     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 SkBenchmark INHERITED;
     70 };
     71 
     72 DEF_BENCH( return new TableBench(); )
     73