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 
     29     static const int kNumIterations = SkBENCHLOOP(10);
     30     static const int kNumRows = 48;
     31     static const int kNumCols = 32;
     32 
     33     TableBench(void* param)
     34         : INHERITED(param) {
     35     }
     36 
     37 protected:
     38     virtual const char* onGetName() {
     39         return "tablebench";
     40     }
     41 
     42     virtual void onDraw(SkCanvas* canvas) {
     43 
     44         SkPaint cellPaint;
     45         cellPaint.setColor(0xFFFFFFF);
     46 
     47         SkPaint borderPaint;
     48         borderPaint.setColor(0xFFCCCCCC);
     49 
     50         for (int i = 0; i < kNumIterations; ++i) {
     51             for (int row = 0; row < kNumRows; ++row) {
     52                 for (int col = 0; col < kNumCols; ++col) {
     53                     SkRect cell = SkRect::MakeLTRB(col * kCellWidth,
     54                                                    row * kCellHeight,
     55                                                    (col+1) * kCellWidth,
     56                                                    (row+1) * kCellHeight);
     57                     canvas->drawRect(cell, cellPaint);
     58 
     59                     SkRect bottom = SkRect::MakeLTRB(col * kCellWidth,
     60                                                      row * kCellHeight + (kCellHeight-SK_Scalar1),
     61                                                      (col+1) * kCellWidth,
     62                                                      (row+1) * kCellHeight);
     63                     canvas->drawRect(bottom, borderPaint);
     64 
     65                     SkRect right = SkRect::MakeLTRB(col * kCellWidth + (kCellWidth-SK_Scalar1),
     66                                                     row * kCellHeight,
     67                                                     (col+1) * kCellWidth,
     68                                                     (row+1) * kCellHeight);
     69                     canvas->drawRect(right, borderPaint);
     70                 }
     71             }
     72         }
     73     }
     74 
     75 private:
     76     typedef SkBenchmark INHERITED;
     77 };
     78 
     79 static SkBenchmark* gFactory(void* p) { return new TableBench(p); }
     80 
     81 static BenchRegistry gRegistry(gFactory);
     82