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(int loops,SkCanvas * canvas)36 virtual void onDraw(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