1924352685d894e5985eab250a51e507e75e00007robertphillips@google.com/*
2924352685d894e5985eab250a51e507e75e00007robertphillips@google.com * Copyright 2012 Google Inc.
3924352685d894e5985eab250a51e507e75e00007robertphillips@google.com *
4924352685d894e5985eab250a51e507e75e00007robertphillips@google.com * Use of this source code is governed by a BSD-style license that can be
5924352685d894e5985eab250a51e507e75e00007robertphillips@google.com * found in the LICENSE file.
6924352685d894e5985eab250a51e507e75e00007robertphillips@google.com */
7924352685d894e5985eab250a51e507e75e00007robertphillips@google.com
8f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "Benchmark.h"
9924352685d894e5985eab250a51e507e75e00007robertphillips@google.com#include "SkCanvas.h"
10924352685d894e5985eab250a51e507e75e00007robertphillips@google.com#include "SkRect.h"
11924352685d894e5985eab250a51e507e75e00007robertphillips@google.com
12924352685d894e5985eab250a51e507e75e00007robertphillips@google.comstatic const SkScalar kCellWidth = SkIntToScalar(20);
13924352685d894e5985eab250a51e507e75e00007robertphillips@google.comstatic const SkScalar kCellHeight = SkIntToScalar(10);
14924352685d894e5985eab250a51e507e75e00007robertphillips@google.com
15924352685d894e5985eab250a51e507e75e00007robertphillips@google.com// This bench draws a table in the manner of Google spreadsheet and sahadan.com.
16924352685d894e5985eab250a51e507e75e00007robertphillips@google.com//           ____________ ___
17924352685d894e5985eab250a51e507e75e00007robertphillips@google.com//          |     1      | 2 |
18924352685d894e5985eab250a51e507e75e00007robertphillips@google.com//          |____________|___|
19924352685d894e5985eab250a51e507e75e00007robertphillips@google.com//          |     3      | 4 |
20924352685d894e5985eab250a51e507e75e00007robertphillips@google.com//          |____________|___|
21924352685d894e5985eab250a51e507e75e00007robertphillips@google.com//
22924352685d894e5985eab250a51e507e75e00007robertphillips@google.com// Areas 1-4 are first all draw white. Areas 3&4 are then drawn grey. Areas
23924352685d894e5985eab250a51e507e75e00007robertphillips@google.com// 2&4 are then drawn grey. Areas 2&3 are thus double drawn while area 4 is
24924352685d894e5985eab250a51e507e75e00007robertphillips@google.com// triple drawn.
25924352685d894e5985eab250a51e507e75e00007robertphillips@google.com// This trio of drawRects is then repeat for the next cell.
26f168b86d7fafc5c20c87bebc6fd393cb17e120catfarinaclass TableBench : public Benchmark {
27924352685d894e5985eab250a51e507e75e00007robertphillips@google.compublic:
28924352685d894e5985eab250a51e507e75e00007robertphillips@google.com    static const int kNumRows = 48;
29924352685d894e5985eab250a51e507e75e00007robertphillips@google.com    static const int kNumCols = 32;
30924352685d894e5985eab250a51e507e75e00007robertphillips@google.com
31924352685d894e5985eab250a51e507e75e00007robertphillips@google.comprotected:
327cc7f494796afc681355b15e88c57ef2709a9220skia.committer@gmail.com    virtual const char* onGetName() {
337cc7f494796afc681355b15e88c57ef2709a9220skia.committer@gmail.com        return "tablebench";
34924352685d894e5985eab250a51e507e75e00007robertphillips@google.com    }
35924352685d894e5985eab250a51e507e75e00007robertphillips@google.com
363361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org    virtual void onDraw(const int loops, SkCanvas* canvas) {
37924352685d894e5985eab250a51e507e75e00007robertphillips@google.com        SkPaint cellPaint;
38924352685d894e5985eab250a51e507e75e00007robertphillips@google.com        cellPaint.setColor(0xFFFFFFF);
39924352685d894e5985eab250a51e507e75e00007robertphillips@google.com
40924352685d894e5985eab250a51e507e75e00007robertphillips@google.com        SkPaint borderPaint;
41924352685d894e5985eab250a51e507e75e00007robertphillips@google.com        borderPaint.setColor(0xFFCCCCCC);
42924352685d894e5985eab250a51e507e75e00007robertphillips@google.com
433361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org        for (int i = 0; i < loops; ++i) {
44924352685d894e5985eab250a51e507e75e00007robertphillips@google.com            for (int row = 0; row < kNumRows; ++row) {
45924352685d894e5985eab250a51e507e75e00007robertphillips@google.com                for (int col = 0; col < kNumCols; ++col) {
467cc7f494796afc681355b15e88c57ef2709a9220skia.committer@gmail.com                    SkRect cell = SkRect::MakeLTRB(col * kCellWidth,
477cc7f494796afc681355b15e88c57ef2709a9220skia.committer@gmail.com                                                   row * kCellHeight,
487cc7f494796afc681355b15e88c57ef2709a9220skia.committer@gmail.com                                                   (col+1) * kCellWidth,
49924352685d894e5985eab250a51e507e75e00007robertphillips@google.com                                                   (row+1) * kCellHeight);
50924352685d894e5985eab250a51e507e75e00007robertphillips@google.com                    canvas->drawRect(cell, cellPaint);
51924352685d894e5985eab250a51e507e75e00007robertphillips@google.com
527cc7f494796afc681355b15e88c57ef2709a9220skia.committer@gmail.com                    SkRect bottom = SkRect::MakeLTRB(col * kCellWidth,
537cc7f494796afc681355b15e88c57ef2709a9220skia.committer@gmail.com                                                     row * kCellHeight + (kCellHeight-SK_Scalar1),
547cc7f494796afc681355b15e88c57ef2709a9220skia.committer@gmail.com                                                     (col+1) * kCellWidth,
55924352685d894e5985eab250a51e507e75e00007robertphillips@google.com                                                     (row+1) * kCellHeight);
56924352685d894e5985eab250a51e507e75e00007robertphillips@google.com                    canvas->drawRect(bottom, borderPaint);
57924352685d894e5985eab250a51e507e75e00007robertphillips@google.com
587cc7f494796afc681355b15e88c57ef2709a9220skia.committer@gmail.com                    SkRect right = SkRect::MakeLTRB(col * kCellWidth + (kCellWidth-SK_Scalar1),
597cc7f494796afc681355b15e88c57ef2709a9220skia.committer@gmail.com                                                    row * kCellHeight,
607cc7f494796afc681355b15e88c57ef2709a9220skia.committer@gmail.com                                                    (col+1) * kCellWidth,
61924352685d894e5985eab250a51e507e75e00007robertphillips@google.com                                                    (row+1) * kCellHeight);
62924352685d894e5985eab250a51e507e75e00007robertphillips@google.com                    canvas->drawRect(right, borderPaint);
63924352685d894e5985eab250a51e507e75e00007robertphillips@google.com                }
64924352685d894e5985eab250a51e507e75e00007robertphillips@google.com            }
65924352685d894e5985eab250a51e507e75e00007robertphillips@google.com        }
66924352685d894e5985eab250a51e507e75e00007robertphillips@google.com    }
67924352685d894e5985eab250a51e507e75e00007robertphillips@google.com
68924352685d894e5985eab250a51e507e75e00007robertphillips@google.comprivate:
69f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina    typedef Benchmark INHERITED;
70924352685d894e5985eab250a51e507e75e00007robertphillips@google.com};
71924352685d894e5985eab250a51e507e75e00007robertphillips@google.com
72410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comDEF_BENCH( return new TableBench(); )
73