| /* | 
 |  * Copyright 2011 Google Inc. | 
 |  * | 
 |  * Use of this source code is governed by a BSD-style license that can be | 
 |  * found in the LICENSE file. | 
 |  */ | 
 | #include "SkBenchmark.h" | 
 | #include "SkCanvas.h" | 
 | #include "SkPaint.h" | 
 | #include "SkString.h" | 
 |  | 
 | /** | 
 |    Benchmarks that try to emulate a particular Skia call pattern observed in Chrome. | 
 | */ | 
 |  | 
 | /// blitRect() calls emitted by Chrome while scrolling through gmail: count, width, height. | 
 | int gmailScrollingRectSpec [431*3] = { | 
 |       1, 1254, 1160, | 
 |       1, 64, 112, | 
 |       1, 1034, 261, | 
 |       1, 1166, 1, | 
 |       1, 1166, 20, | 
 |       1, 1254, 40, | 
 |       1, 140, 20, | 
 |       1, 22, 30, | 
 |       1, 22, 39, | 
 |       1, 294, 29, | 
 |       1, 336, 25, | 
 |       1, 336, 5, | 
 |       1, 37, 3, | 
 |       1, 37, 4, | 
 |       1, 37, 5, | 
 |       1, 41, 29, | 
 |       1, 57, 15, | 
 |       1, 72, 5, | 
 |       1, 72, 8, | 
 |       1, 76, 29, | 
 |       1, 981, 88, | 
 |       1, 990, 2, | 
 |       1, 990, 6, | 
 |       2, 220, 88, | 
 |       2, 294, 1, | 
 |       2, 37, 6, | 
 |       2, 391, 55, | 
 |       2, 57, 11, | 
 |       2, 57, 14, | 
 |       2, 57, 7, | 
 |       2, 981, 30, | 
 |       2, 990, 15, | 
 |       2, 990, 19, | 
 |       3, 114, 16, | 
 |       3, 1166, 39, | 
 |       3, 1254, 154, | 
 |       3, 12, 12, | 
 |       3, 162, 7, | 
 |       3, 164, 479, | 
 |       3, 167, 449, | 
 |       3, 16, 24, | 
 |       3, 204, 497, | 
 |       3, 205, 434, | 
 |       3, 220, 1127, | 
 |       3, 220, 1132, | 
 |       3, 220, 931, | 
 |       3, 220, 933, | 
 |       3, 220, 934, | 
 |       3, 297, 8, | 
 |       3, 72, 25, | 
 |       3, 87, 30, | 
 |       3, 981, 1, | 
 |       3, 981, 126, | 
 |       3, 990, 27, | 
 |       3, 990, 36, | 
 |       3, 991, 29, | 
 |       4, 1254, 306, | 
 |       4, 1254, 36, | 
 |       4, 1, 1, | 
 |       4, 1, 14, | 
 |       4, 1, 19, | 
 |       4, 1, 7, | 
 |       4, 21, 21, | 
 |       4, 220, 30, | 
 |       4, 46, 949, | 
 |       4, 509, 30, | 
 |       4, 57, 2, | 
 |       4, 57, 6, | 
 |       4, 990, 11, | 
 |       5, 13, 8, | 
 |       5, 198, 24, | 
 |       5, 24, 24, | 
 |       5, 25, 24, | 
 |       5, 2, 24, | 
 |       5, 37, 33, | 
 |       5, 57, 4, | 
 |       5, 599, 24, | 
 |       5, 90, 24, | 
 |       5, 981, 19, | 
 |       5, 990, 23, | 
 |       5, 990, 8, | 
 |       6, 101, 29, | 
 |       6, 117, 29, | 
 |       6, 1254, 88, | 
 |       6, 139, 29, | 
 |       6, 13, 12, | 
 |       6, 15, 15, | 
 |       6, 164, 25, | 
 |       6, 16, 16, | 
 |       6, 198, 7, | 
 |       6, 1, 12, | 
 |       6, 1, 15, | 
 |       6, 1, 27, | 
 |       6, 220, 936, | 
 |       6, 24, 7, | 
 |       6, 25, 7, | 
 |       6, 2, 7, | 
 |       6, 326, 29, | 
 |       6, 336, 29, | 
 |       6, 599, 7, | 
 |       6, 86, 29, | 
 |       6, 90, 7, | 
 |       6, 96, 29, | 
 |       6, 991, 31, | 
 |       7, 198, 12, | 
 |       7, 198, 20, | 
 |       7, 198, 33, | 
 |       7, 198, 35, | 
 |       7, 24, 12, | 
 |       7, 24, 20, | 
 |       7, 24, 33, | 
 |       7, 24, 35, | 
 |       7, 25, 12, | 
 |       7, 25, 20, | 
 |       7, 25, 33, | 
 |       7, 25, 35, | 
 |       7, 2, 12, | 
 |       7, 2, 20, | 
 |       7, 2, 33, | 
 |       7, 2, 35, | 
 |       7, 304, 1, | 
 |       7, 38, 29, | 
 |       7, 51, 29, | 
 |       7, 599, 12, | 
 |       7, 599, 20, | 
 |       7, 599, 33, | 
 |       7, 599, 35, | 
 |       7, 90, 12, | 
 |       7, 90, 20, | 
 |       7, 90, 33, | 
 |       7, 90, 35, | 
 |       8, 13, 5, | 
 |       8, 198, 13, | 
 |       8, 198, 23, | 
 |       8, 220, 1, | 
 |       8, 24, 13, | 
 |       8, 24, 23, | 
 |       8, 25, 13, | 
 |       8, 25, 23, | 
 |       8, 2, 13, | 
 |       8, 2, 23, | 
 |       8, 329, 28, | 
 |       8, 57, 10, | 
 |       8, 599, 13, | 
 |       8, 599, 23, | 
 |       8, 90, 13, | 
 |       8, 90, 23, | 
 |       9, 198, 17, | 
 |       9, 198, 19, | 
 |       9, 198, 37, | 
 |       9, 198, 5, | 
 |       9, 198, 8, | 
 |       9, 24, 17, | 
 |       9, 24, 19, | 
 |       9, 24, 37, | 
 |       9, 24, 5, | 
 |       9, 24, 8, | 
 |       9, 25, 17, | 
 |       9, 25, 19, | 
 |       9, 25, 37, | 
 |       9, 25, 5, | 
 |       9, 25, 8, | 
 |       9, 2, 17, | 
 |       9, 2, 19, | 
 |       9, 2, 37, | 
 |       9, 2, 5, | 
 |       9, 2, 8, | 
 |       9, 599, 17, | 
 |       9, 599, 19, | 
 |       9, 599, 37, | 
 |       9, 599, 5, | 
 |       9, 599, 8, | 
 |       9, 72, 29, | 
 |       9, 90, 17, | 
 |       9, 90, 19, | 
 |       9, 90, 37, | 
 |       9, 90, 5, | 
 |       9, 90, 8, | 
 |      10, 13, 11, | 
 |      10, 13, 9, | 
 |      10, 198, 26, | 
 |      10, 198, 28, | 
 |      10, 1, 23, | 
 |      10, 1, 4, | 
 |      10, 1, 6, | 
 |      10, 24, 26, | 
 |      10, 24, 28, | 
 |      10, 25, 26, | 
 |      10, 25, 28, | 
 |      10, 26, 24, | 
 |      10, 2, 26, | 
 |      10, 2, 28, | 
 |      10, 599, 26, | 
 |      10, 599, 28, | 
 |      10, 90, 26, | 
 |      10, 90, 28, | 
 |      11, 198, 27, | 
 |      11, 24, 27, | 
 |      11, 25, 27, | 
 |      11, 2, 27, | 
 |      11, 599, 27, | 
 |      11, 90, 27, | 
 |      12, 198, 14, | 
 |      12, 198, 21, | 
 |      12, 198, 3, | 
 |      12, 1, 11, | 
 |      12, 1, 2, | 
 |      12, 1, 8, | 
 |      12, 24, 14, | 
 |      12, 24, 21, | 
 |      12, 24, 3, | 
 |      12, 25, 14, | 
 |      12, 25, 21, | 
 |      12, 25, 3, | 
 |      12, 26, 7, | 
 |      12, 2, 14, | 
 |      12, 2, 21, | 
 |      12, 2, 3, | 
 |      12, 329, 14, | 
 |      12, 38, 2, | 
 |      12, 599, 14, | 
 |      12, 599, 21, | 
 |      12, 599, 3, | 
 |      12, 90, 14, | 
 |      12, 90, 21, | 
 |      12, 90, 3, | 
 |      13, 198, 11, | 
 |      13, 198, 15, | 
 |      13, 198, 31, | 
 |      13, 24, 11, | 
 |      13, 24, 15, | 
 |      13, 24, 31, | 
 |      13, 25, 11, | 
 |      13, 25, 15, | 
 |      13, 25, 31, | 
 |      13, 2, 11, | 
 |      13, 2, 15, | 
 |      13, 2, 31, | 
 |      13, 57, 13, | 
 |      13, 599, 11, | 
 |      13, 599, 15, | 
 |      13, 599, 31, | 
 |      13, 71, 29, | 
 |      13, 90, 11, | 
 |      13, 90, 15, | 
 |      13, 90, 31, | 
 |      14, 13, 2, | 
 |      14, 198, 10, | 
 |      14, 24, 10, | 
 |      14, 25, 10, | 
 |      14, 26, 12, | 
 |      14, 26, 20, | 
 |      14, 26, 33, | 
 |      14, 26, 35, | 
 |      14, 2, 10, | 
 |      14, 336, 1, | 
 |      14, 45, 29, | 
 |      14, 599, 10, | 
 |      14, 63, 29, | 
 |      14, 90, 10, | 
 |      15, 13, 3, | 
 |      15, 198, 2, | 
 |      15, 198, 29, | 
 |      15, 198, 34, | 
 |      15, 24, 2, | 
 |      15, 24, 29, | 
 |      15, 24, 34, | 
 |      15, 25, 2, | 
 |      15, 25, 29, | 
 |      15, 25, 34, | 
 |      15, 2, 2, | 
 |      15, 2, 29, | 
 |      15, 2, 34, | 
 |      15, 599, 2, | 
 |      15, 599, 29, | 
 |      15, 599, 34, | 
 |      15, 90, 2, | 
 |      15, 90, 29, | 
 |      15, 90, 34, | 
 |      16, 13, 4, | 
 |      16, 13, 6, | 
 |      16, 198, 16, | 
 |      16, 198, 9, | 
 |      16, 1, 10, | 
 |      16, 24, 16, | 
 |      16, 24, 9, | 
 |      16, 25, 16, | 
 |      16, 25, 9, | 
 |      16, 26, 13, | 
 |      16, 26, 23, | 
 |      16, 2, 16, | 
 |      16, 2, 9, | 
 |      16, 599, 16, | 
 |      16, 599, 9, | 
 |      16, 90, 16, | 
 |      16, 90, 9, | 
 |      17, 13, 7, | 
 |      17, 198, 18, | 
 |      17, 24, 18, | 
 |      17, 25, 18, | 
 |      17, 2, 18, | 
 |      17, 599, 18, | 
 |      17, 90, 18, | 
 |      18, 198, 22, | 
 |      18, 198, 32, | 
 |      18, 198, 36, | 
 |      18, 198, 4, | 
 |      18, 24, 22, | 
 |      18, 24, 32, | 
 |      18, 24, 36, | 
 |      18, 24, 4, | 
 |      18, 25, 22, | 
 |      18, 25, 32, | 
 |      18, 25, 36, | 
 |      18, 25, 4, | 
 |      18, 26, 17, | 
 |      18, 26, 19, | 
 |      18, 26, 37, | 
 |      18, 26, 5, | 
 |      18, 26, 8, | 
 |      18, 2, 22, | 
 |      18, 2, 32, | 
 |      18, 2, 36, | 
 |      18, 2, 4, | 
 |      18, 599, 22, | 
 |      18, 599, 32, | 
 |      18, 599, 36, | 
 |      18, 599, 4, | 
 |      18, 90, 22, | 
 |      18, 90, 32, | 
 |      18, 90, 36, | 
 |      18, 90, 4, | 
 |      19, 13, 10, | 
 |      20, 1254, 30, | 
 |      20, 16, 1007, | 
 |      20, 26, 26, | 
 |      20, 26, 28, | 
 |      21, 198, 6, | 
 |      21, 24, 6, | 
 |      21, 25, 6, | 
 |      21, 2, 6, | 
 |      21, 599, 6, | 
 |      21, 90, 6, | 
 |      22, 198, 38, | 
 |      22, 22, 40, | 
 |      22, 24, 38, | 
 |      22, 25, 38, | 
 |      22, 26, 27, | 
 |      22, 2, 38, | 
 |      22, 599, 38, | 
 |      22, 90, 38, | 
 |      23, 1254, 1160, | 
 |      24, 220, 930, | 
 |      24, 26, 14, | 
 |      24, 26, 21, | 
 |      24, 26, 3, | 
 |      26, 11, 11, | 
 |      26, 1, 13, | 
 |      26, 26, 11, | 
 |      26, 26, 15, | 
 |      26, 26, 31, | 
 |      28, 26, 10, | 
 |      30, 176, 60, | 
 |      30, 26, 2, | 
 |      30, 26, 29, | 
 |      30, 26, 34, | 
 |      32, 26, 16, | 
 |      32, 26, 9, | 
 |      34, 26, 18, | 
 |      36, 26, 22, | 
 |      36, 26, 32, | 
 |      36, 26, 36, | 
 |      36, 26, 4, | 
 |      36, 37, 26, | 
 |      42, 26, 6, | 
 |      43, 115, 29, | 
 |      44, 198, 25, | 
 |      44, 24, 25, | 
 |      44, 25, 25, | 
 |      44, 26, 38, | 
 |      44, 2, 25, | 
 |      44, 599, 25, | 
 |      44, 90, 25, | 
 |      46, 22, 1, | 
 |      47, 198, 30, | 
 |      47, 25, 30, | 
 |      47, 2, 30, | 
 |      47, 599, 30, | 
 |      47, 90, 30, | 
 |      48, 24, 30, | 
 |      52, 176, 30, | 
 |      58, 140, 24, | 
 |      58, 4, 30, | 
 |      63, 990, 29, | 
 |      64, 1254, 1, | 
 |      88, 26, 25, | 
 |      92, 198, 39, | 
 |      92, 25, 39, | 
 |      92, 2, 39, | 
 |      92, 599, 39, | 
 |      92, 90, 39, | 
 |      93, 24, 39, | 
 |      94, 26, 30, | 
 |     108, 1254, 1051, | 
 |     117, 140, 1, | 
 |     119, 160, 1, | 
 |     126, 1, 29, | 
 |     132, 135, 16, | 
 |     147, 72, 16, | 
 |     184, 26, 39, | 
 |     238, 990, 1, | 
 |     376, 11, 1007, | 
 |     380, 11, 487, | 
 |    1389, 1034, 1007, | 
 |    1870, 57, 16, | 
 |    4034, 1, 16, | 
 |    8521, 198, 40, | 
 |    8521, 25, 40, | 
 |    8521, 2, 40, | 
 |    8521, 599, 40, | 
 |    8521, 90, 40, | 
 |    8543, 24, 40, | 
 |    8883, 13, 13, | 
 |   17042, 26, 40, | 
 |   17664, 198, 1, | 
 |   17664, 25, 1, | 
 |   17664, 2, 1, | 
 |   17664, 599, 1, | 
 |   17664, 90, 1, | 
 |   17710, 24, 1, | 
 |   35328, 26, 1, | 
 | }; | 
 |  | 
 | /// Emulates the mix of rects blitted by gmail during scrolling | 
 | class ScrollGmailBench : public SkBenchmark { | 
 |     enum { | 
 |         W = 1254, | 
 |         H = 1160, | 
 |         N = 431 | 
 |     }; | 
 | public: | 
 |     ScrollGmailBench()  { } | 
 |  | 
 | protected: | 
 |  | 
 |     virtual const char* onGetName() { return "chrome_scrollGmail"; } | 
 |     virtual void onDraw(const int loops, SkCanvas* canvas) { | 
 |         SkDEBUGCODE(this->validateBounds(canvas)); | 
 |         SkPaint paint; | 
 |         this->setupPaint(&paint); | 
 |         for (int i = 0; i < N; i++) { | 
 |             SkRect current; | 
 |             setRectangle(current, i); | 
 |             for (int j = 0; j < loops * gmailScrollingRectSpec[i*3]; j++) { | 
 |                 canvas->drawRect(current, paint); | 
 |             } | 
 |         } | 
 |     } | 
 |     virtual SkIPoint onGetSize() { return SkIPoint::Make(W, H); } | 
 |  | 
 |     void setRectangle(SkRect& current, int i) { | 
 |         current.set(0, 0, | 
 |                     SkIntToScalar(gmailScrollingRectSpec[i*3+1]), SkIntToScalar(gmailScrollingRectSpec[i*3+2])); | 
 |     } | 
 |     void validateBounds(SkCanvas* canvas) { | 
 |         SkIRect bounds; | 
 |         canvas->getClipDeviceBounds(&bounds); | 
 |         SkASSERT(bounds.right()-bounds.left() >= W); | 
 |         SkASSERT(bounds.bottom()-bounds.top() >= H); | 
 |     } | 
 |  | 
 |  | 
 | private: | 
 |     typedef SkBenchmark INHERITED; | 
 | }; | 
 |  | 
 | // Disabled this benchmark: it takes 15x longer than any other benchmark | 
 | // and is probably not giving us important information. | 
 | // DEF_BENCH(return SkNEW(ScrollGmailBench)); |