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