ChromeBench.cpp 9.1 KB

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