• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2011 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 #include "bench/Benchmark.h"
8 #include "include/core/SkCanvas.h"
9 #include "include/core/SkPaint.h"
10 #include "include/core/SkString.h"
11 
12 /**
13    Benchmarks that try to emulate a particular Skia call pattern observed in Chrome.
14 */
15 
16 /// blitRect() calls emitted by Chrome while scrolling through gmail: count, width, height.
17 int gmailScrollingRectSpec [431*3] = {
18       1, 1254, 1160,
19       1, 64, 112,
20       1, 1034, 261,
21       1, 1166, 1,
22       1, 1166, 20,
23       1, 1254, 40,
24       1, 140, 20,
25       1, 22, 30,
26       1, 22, 39,
27       1, 294, 29,
28       1, 336, 25,
29       1, 336, 5,
30       1, 37, 3,
31       1, 37, 4,
32       1, 37, 5,
33       1, 41, 29,
34       1, 57, 15,
35       1, 72, 5,
36       1, 72, 8,
37       1, 76, 29,
38       1, 981, 88,
39       1, 990, 2,
40       1, 990, 6,
41       2, 220, 88,
42       2, 294, 1,
43       2, 37, 6,
44       2, 391, 55,
45       2, 57, 11,
46       2, 57, 14,
47       2, 57, 7,
48       2, 981, 30,
49       2, 990, 15,
50       2, 990, 19,
51       3, 114, 16,
52       3, 1166, 39,
53       3, 1254, 154,
54       3, 12, 12,
55       3, 162, 7,
56       3, 164, 479,
57       3, 167, 449,
58       3, 16, 24,
59       3, 204, 497,
60       3, 205, 434,
61       3, 220, 1127,
62       3, 220, 1132,
63       3, 220, 931,
64       3, 220, 933,
65       3, 220, 934,
66       3, 297, 8,
67       3, 72, 25,
68       3, 87, 30,
69       3, 981, 1,
70       3, 981, 126,
71       3, 990, 27,
72       3, 990, 36,
73       3, 991, 29,
74       4, 1254, 306,
75       4, 1254, 36,
76       4, 1, 1,
77       4, 1, 14,
78       4, 1, 19,
79       4, 1, 7,
80       4, 21, 21,
81       4, 220, 30,
82       4, 46, 949,
83       4, 509, 30,
84       4, 57, 2,
85       4, 57, 6,
86       4, 990, 11,
87       5, 13, 8,
88       5, 198, 24,
89       5, 24, 24,
90       5, 25, 24,
91       5, 2, 24,
92       5, 37, 33,
93       5, 57, 4,
94       5, 599, 24,
95       5, 90, 24,
96       5, 981, 19,
97       5, 990, 23,
98       5, 990, 8,
99       6, 101, 29,
100       6, 117, 29,
101       6, 1254, 88,
102       6, 139, 29,
103       6, 13, 12,
104       6, 15, 15,
105       6, 164, 25,
106       6, 16, 16,
107       6, 198, 7,
108       6, 1, 12,
109       6, 1, 15,
110       6, 1, 27,
111       6, 220, 936,
112       6, 24, 7,
113       6, 25, 7,
114       6, 2, 7,
115       6, 326, 29,
116       6, 336, 29,
117       6, 599, 7,
118       6, 86, 29,
119       6, 90, 7,
120       6, 96, 29,
121       6, 991, 31,
122       7, 198, 12,
123       7, 198, 20,
124       7, 198, 33,
125       7, 198, 35,
126       7, 24, 12,
127       7, 24, 20,
128       7, 24, 33,
129       7, 24, 35,
130       7, 25, 12,
131       7, 25, 20,
132       7, 25, 33,
133       7, 25, 35,
134       7, 2, 12,
135       7, 2, 20,
136       7, 2, 33,
137       7, 2, 35,
138       7, 304, 1,
139       7, 38, 29,
140       7, 51, 29,
141       7, 599, 12,
142       7, 599, 20,
143       7, 599, 33,
144       7, 599, 35,
145       7, 90, 12,
146       7, 90, 20,
147       7, 90, 33,
148       7, 90, 35,
149       8, 13, 5,
150       8, 198, 13,
151       8, 198, 23,
152       8, 220, 1,
153       8, 24, 13,
154       8, 24, 23,
155       8, 25, 13,
156       8, 25, 23,
157       8, 2, 13,
158       8, 2, 23,
159       8, 329, 28,
160       8, 57, 10,
161       8, 599, 13,
162       8, 599, 23,
163       8, 90, 13,
164       8, 90, 23,
165       9, 198, 17,
166       9, 198, 19,
167       9, 198, 37,
168       9, 198, 5,
169       9, 198, 8,
170       9, 24, 17,
171       9, 24, 19,
172       9, 24, 37,
173       9, 24, 5,
174       9, 24, 8,
175       9, 25, 17,
176       9, 25, 19,
177       9, 25, 37,
178       9, 25, 5,
179       9, 25, 8,
180       9, 2, 17,
181       9, 2, 19,
182       9, 2, 37,
183       9, 2, 5,
184       9, 2, 8,
185       9, 599, 17,
186       9, 599, 19,
187       9, 599, 37,
188       9, 599, 5,
189       9, 599, 8,
190       9, 72, 29,
191       9, 90, 17,
192       9, 90, 19,
193       9, 90, 37,
194       9, 90, 5,
195       9, 90, 8,
196      10, 13, 11,
197      10, 13, 9,
198      10, 198, 26,
199      10, 198, 28,
200      10, 1, 23,
201      10, 1, 4,
202      10, 1, 6,
203      10, 24, 26,
204      10, 24, 28,
205      10, 25, 26,
206      10, 25, 28,
207      10, 26, 24,
208      10, 2, 26,
209      10, 2, 28,
210      10, 599, 26,
211      10, 599, 28,
212      10, 90, 26,
213      10, 90, 28,
214      11, 198, 27,
215      11, 24, 27,
216      11, 25, 27,
217      11, 2, 27,
218      11, 599, 27,
219      11, 90, 27,
220      12, 198, 14,
221      12, 198, 21,
222      12, 198, 3,
223      12, 1, 11,
224      12, 1, 2,
225      12, 1, 8,
226      12, 24, 14,
227      12, 24, 21,
228      12, 24, 3,
229      12, 25, 14,
230      12, 25, 21,
231      12, 25, 3,
232      12, 26, 7,
233      12, 2, 14,
234      12, 2, 21,
235      12, 2, 3,
236      12, 329, 14,
237      12, 38, 2,
238      12, 599, 14,
239      12, 599, 21,
240      12, 599, 3,
241      12, 90, 14,
242      12, 90, 21,
243      12, 90, 3,
244      13, 198, 11,
245      13, 198, 15,
246      13, 198, 31,
247      13, 24, 11,
248      13, 24, 15,
249      13, 24, 31,
250      13, 25, 11,
251      13, 25, 15,
252      13, 25, 31,
253      13, 2, 11,
254      13, 2, 15,
255      13, 2, 31,
256      13, 57, 13,
257      13, 599, 11,
258      13, 599, 15,
259      13, 599, 31,
260      13, 71, 29,
261      13, 90, 11,
262      13, 90, 15,
263      13, 90, 31,
264      14, 13, 2,
265      14, 198, 10,
266      14, 24, 10,
267      14, 25, 10,
268      14, 26, 12,
269      14, 26, 20,
270      14, 26, 33,
271      14, 26, 35,
272      14, 2, 10,
273      14, 336, 1,
274      14, 45, 29,
275      14, 599, 10,
276      14, 63, 29,
277      14, 90, 10,
278      15, 13, 3,
279      15, 198, 2,
280      15, 198, 29,
281      15, 198, 34,
282      15, 24, 2,
283      15, 24, 29,
284      15, 24, 34,
285      15, 25, 2,
286      15, 25, 29,
287      15, 25, 34,
288      15, 2, 2,
289      15, 2, 29,
290      15, 2, 34,
291      15, 599, 2,
292      15, 599, 29,
293      15, 599, 34,
294      15, 90, 2,
295      15, 90, 29,
296      15, 90, 34,
297      16, 13, 4,
298      16, 13, 6,
299      16, 198, 16,
300      16, 198, 9,
301      16, 1, 10,
302      16, 24, 16,
303      16, 24, 9,
304      16, 25, 16,
305      16, 25, 9,
306      16, 26, 13,
307      16, 26, 23,
308      16, 2, 16,
309      16, 2, 9,
310      16, 599, 16,
311      16, 599, 9,
312      16, 90, 16,
313      16, 90, 9,
314      17, 13, 7,
315      17, 198, 18,
316      17, 24, 18,
317      17, 25, 18,
318      17, 2, 18,
319      17, 599, 18,
320      17, 90, 18,
321      18, 198, 22,
322      18, 198, 32,
323      18, 198, 36,
324      18, 198, 4,
325      18, 24, 22,
326      18, 24, 32,
327      18, 24, 36,
328      18, 24, 4,
329      18, 25, 22,
330      18, 25, 32,
331      18, 25, 36,
332      18, 25, 4,
333      18, 26, 17,
334      18, 26, 19,
335      18, 26, 37,
336      18, 26, 5,
337      18, 26, 8,
338      18, 2, 22,
339      18, 2, 32,
340      18, 2, 36,
341      18, 2, 4,
342      18, 599, 22,
343      18, 599, 32,
344      18, 599, 36,
345      18, 599, 4,
346      18, 90, 22,
347      18, 90, 32,
348      18, 90, 36,
349      18, 90, 4,
350      19, 13, 10,
351      20, 1254, 30,
352      20, 16, 1007,
353      20, 26, 26,
354      20, 26, 28,
355      21, 198, 6,
356      21, 24, 6,
357      21, 25, 6,
358      21, 2, 6,
359      21, 599, 6,
360      21, 90, 6,
361      22, 198, 38,
362      22, 22, 40,
363      22, 24, 38,
364      22, 25, 38,
365      22, 26, 27,
366      22, 2, 38,
367      22, 599, 38,
368      22, 90, 38,
369      23, 1254, 1160,
370      24, 220, 930,
371      24, 26, 14,
372      24, 26, 21,
373      24, 26, 3,
374      26, 11, 11,
375      26, 1, 13,
376      26, 26, 11,
377      26, 26, 15,
378      26, 26, 31,
379      28, 26, 10,
380      30, 176, 60,
381      30, 26, 2,
382      30, 26, 29,
383      30, 26, 34,
384      32, 26, 16,
385      32, 26, 9,
386      34, 26, 18,
387      36, 26, 22,
388      36, 26, 32,
389      36, 26, 36,
390      36, 26, 4,
391      36, 37, 26,
392      42, 26, 6,
393      43, 115, 29,
394      44, 198, 25,
395      44, 24, 25,
396      44, 25, 25,
397      44, 26, 38,
398      44, 2, 25,
399      44, 599, 25,
400      44, 90, 25,
401      46, 22, 1,
402      47, 198, 30,
403      47, 25, 30,
404      47, 2, 30,
405      47, 599, 30,
406      47, 90, 30,
407      48, 24, 30,
408      52, 176, 30,
409      58, 140, 24,
410      58, 4, 30,
411      63, 990, 29,
412      64, 1254, 1,
413      88, 26, 25,
414      92, 198, 39,
415      92, 25, 39,
416      92, 2, 39,
417      92, 599, 39,
418      92, 90, 39,
419      93, 24, 39,
420      94, 26, 30,
421     108, 1254, 1051,
422     117, 140, 1,
423     119, 160, 1,
424     126, 1, 29,
425     132, 135, 16,
426     147, 72, 16,
427     184, 26, 39,
428     238, 990, 1,
429     376, 11, 1007,
430     380, 11, 487,
431    1389, 1034, 1007,
432    1870, 57, 16,
433    4034, 1, 16,
434    8521, 198, 40,
435    8521, 25, 40,
436    8521, 2, 40,
437    8521, 599, 40,
438    8521, 90, 40,
439    8543, 24, 40,
440    8883, 13, 13,
441   17042, 26, 40,
442   17664, 198, 1,
443   17664, 25, 1,
444   17664, 2, 1,
445   17664, 599, 1,
446   17664, 90, 1,
447   17710, 24, 1,
448   35328, 26, 1,
449 };
450 
451 /// Emulates the mix of rects blitted by gmail during scrolling
452 class ScrollGmailBench : public Benchmark {
453     enum {
454         W = 1254,
455         H = 1160,
456         N = 431
457     };
458 public:
ScrollGmailBench()459     ScrollGmailBench()  { }
460 
461 protected:
462 
onGetName()463     virtual const char* onGetName() { return "chrome_scrollGmail"; }
onDraw(int loops,SkCanvas * canvas)464     virtual void onDraw(int loops, SkCanvas* canvas) {
465         SkDEBUGCODE(this->validateBounds(canvas));
466         SkPaint paint;
467         this->setupPaint(&paint);
468         for (int i = 0; i < N; i++) {
469             SkRect current;
470             setRectangle(current, i);
471             for (int j = 0; j < loops * gmailScrollingRectSpec[i*3]; j++) {
472                 canvas->drawRect(current, paint);
473             }
474         }
475     }
onGetSize()476     virtual SkIPoint onGetSize() { return SkIPoint::Make(W, H); }
477 
setRectangle(SkRect & current,int i)478     void setRectangle(SkRect& current, int i) {
479         current.set(0, 0,
480                     SkIntToScalar(gmailScrollingRectSpec[i*3+1]), SkIntToScalar(gmailScrollingRectSpec[i*3+2]));
481     }
validateBounds(SkCanvas * canvas)482     void validateBounds(SkCanvas* canvas) {
483 #ifdef SK_DEBUG
484         SkIRect bounds = canvas->getDeviceClipBounds();
485         SkASSERT(bounds.right()-bounds.left() >= W);
486         SkASSERT(bounds.bottom()-bounds.top() >= H);
487 #endif
488     }
489 
490 
491 private:
492     typedef Benchmark INHERITED;
493 };
494 
495 // Disabled this benchmark: it takes 15x longer than any other benchmark
496 // and is probably not giving us important information.
497 // DEF_BENCH(return new ScrollGmailBench);
498