perf.fib.svg 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605
  1. <?xml version="1.0" standalone="no"?>
  2. <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
  3. <svg version="1.1" width="1200" height="758" onload="init(evt)" viewBox="0 0 1200 758" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  4. <!-- Flame graph stack visualization. See https://github.com/brendangregg/FlameGraph for latest version, and http://www.brendangregg.com/flamegraphs.html for examples. -->
  5. <!-- NOTES: -->
  6. <defs>
  7. <linearGradient id="background" y1="0" y2="1" x1="0" x2="0" >
  8. <stop stop-color="#eeeeee" offset="5%" />
  9. <stop stop-color="#eeeeb0" offset="95%" />
  10. </linearGradient>
  11. </defs>
  12. <style type="text/css">
  13. text { font-family:Verdana; font-size:12px; fill:rgb(0,0,0); }
  14. #search, #ignorecase { opacity:0.1; cursor:pointer; }
  15. #search:hover, #search.show, #ignorecase:hover, #ignorecase.show { opacity:1; }
  16. #subtitle { text-anchor:middle; font-color:rgb(160,160,160); }
  17. #title { text-anchor:middle; font-size:17px}
  18. #unzoom { cursor:pointer; }
  19. #frames > *:hover { stroke:black; stroke-width:0.5; cursor:pointer; }
  20. .hide { display:none; }
  21. .parent { opacity:0.5; }
  22. </style>
  23. <script type="text/ecmascript">
  24. <![CDATA[
  25. "use strict";
  26. var details, searchbtn, unzoombtn, matchedtxt, svg, searching, currentSearchTerm, ignorecase, ignorecaseBtn;
  27. function init(evt) {
  28. details = document.getElementById("details").firstChild;
  29. searchbtn = document.getElementById("search");
  30. ignorecaseBtn = document.getElementById("ignorecase");
  31. unzoombtn = document.getElementById("unzoom");
  32. matchedtxt = document.getElementById("matched");
  33. svg = document.getElementsByTagName("svg")[0];
  34. searching = 0;
  35. currentSearchTerm = null;
  36. // use GET parameters to restore a flamegraphs state.
  37. var params = get_params();
  38. if (params.x && params.y)
  39. zoom(find_group(document.querySelector('[x="' + params.x + '"][y="' + params.y + '"]')));
  40. if (params.s) search(params.s);
  41. }
  42. // event listeners
  43. window.addEventListener("click", function(e) {
  44. var target = find_group(e.target);
  45. if (target) {
  46. if (target.nodeName == "a") {
  47. if (e.ctrlKey === false) return;
  48. e.preventDefault();
  49. }
  50. if (target.classList.contains("parent")) unzoom(true);
  51. zoom(target);
  52. if (!document.querySelector('.parent')) {
  53. // we have basically done a clearzoom so clear the url
  54. var params = get_params();
  55. if (params.x) delete params.x;
  56. if (params.y) delete params.y;
  57. history.replaceState(null, null, parse_params(params));
  58. unzoombtn.classList.add("hide");
  59. return;
  60. }
  61. // set parameters for zoom state
  62. var el = target.querySelector("rect");
  63. if (el && el.attributes && el.attributes.y && el.attributes._orig_x) {
  64. var params = get_params()
  65. params.x = el.attributes._orig_x.value;
  66. params.y = el.attributes.y.value;
  67. history.replaceState(null, null, parse_params(params));
  68. }
  69. }
  70. else if (e.target.id == "unzoom") clearzoom();
  71. else if (e.target.id == "search") search_prompt();
  72. else if (e.target.id == "ignorecase") toggle_ignorecase();
  73. }, false)
  74. // mouse-over for info
  75. // show
  76. window.addEventListener("mouseover", function(e) {
  77. var target = find_group(e.target);
  78. if (target) details.nodeValue = "Function: " + g_to_text(target);
  79. }, false)
  80. // clear
  81. window.addEventListener("mouseout", function(e) {
  82. var target = find_group(e.target);
  83. if (target) details.nodeValue = ' ';
  84. }, false)
  85. // ctrl-F for search
  86. // ctrl-I to toggle case-sensitive search
  87. window.addEventListener("keydown",function (e) {
  88. if (e.keyCode === 114 || (e.ctrlKey && e.keyCode === 70)) {
  89. e.preventDefault();
  90. search_prompt();
  91. }
  92. else if (e.ctrlKey && e.keyCode === 73) {
  93. e.preventDefault();
  94. toggle_ignorecase();
  95. }
  96. }, false)
  97. // functions
  98. function get_params() {
  99. var params = {};
  100. var paramsarr = window.location.search.substr(1).split('&');
  101. for (var i = 0; i < paramsarr.length; ++i) {
  102. var tmp = paramsarr[i].split("=");
  103. if (!tmp[0] || !tmp[1]) continue;
  104. params[tmp[0]] = decodeURIComponent(tmp[1]);
  105. }
  106. return params;
  107. }
  108. function parse_params(params) {
  109. var uri = "?";
  110. for (var key in params) {
  111. uri += key + '=' + encodeURIComponent(params[key]) + '&';
  112. }
  113. if (uri.slice(-1) == "&")
  114. uri = uri.substring(0, uri.length - 1);
  115. if (uri == '?')
  116. uri = window.location.href.split('?')[0];
  117. return uri;
  118. }
  119. function find_child(node, selector) {
  120. var children = node.querySelectorAll(selector);
  121. if (children.length) return children[0];
  122. }
  123. function find_group(node) {
  124. var parent = node.parentElement;
  125. if (!parent) return;
  126. if (parent.id == "frames") return node;
  127. return find_group(parent);
  128. }
  129. function orig_save(e, attr, val) {
  130. if (e.attributes["_orig_" + attr] != undefined) return;
  131. if (e.attributes[attr] == undefined) return;
  132. if (val == undefined) val = e.attributes[attr].value;
  133. e.setAttribute("_orig_" + attr, val);
  134. }
  135. function orig_load(e, attr) {
  136. if (e.attributes["_orig_"+attr] == undefined) return;
  137. e.attributes[attr].value = e.attributes["_orig_" + attr].value;
  138. e.removeAttribute("_orig_"+attr);
  139. }
  140. function g_to_text(e) {
  141. var text = find_child(e, "title").firstChild.nodeValue;
  142. return (text)
  143. }
  144. function g_to_func(e) {
  145. var func = g_to_text(e);
  146. // if there's any manipulation we want to do to the function
  147. // name before it's searched, do it here before returning.
  148. return (func);
  149. }
  150. function update_text(e) {
  151. var r = find_child(e, "rect");
  152. var t = find_child(e, "text");
  153. var w = parseFloat(r.attributes.width.value) -3;
  154. var txt = find_child(e, "title").textContent.replace(/\([^(]*\)$/,"");
  155. t.attributes.x.value = parseFloat(r.attributes.x.value) + 3;
  156. // Smaller than this size won't fit anything
  157. if (w < 2 * 12 * 0.59) {
  158. t.textContent = "";
  159. return;
  160. }
  161. t.textContent = txt;
  162. var sl = t.getSubStringLength(0, txt.length);
  163. // check if only whitespace or if we can fit the entire string into width w
  164. if (/^ *$/.test(txt) || sl < w)
  165. return;
  166. // this isn't perfect, but gives a good starting point
  167. // and avoids calling getSubStringLength too often
  168. var start = Math.floor((w/sl) * txt.length);
  169. for (var x = start; x > 0; x = x-2) {
  170. if (t.getSubStringLength(0, x + 2) <= w) {
  171. t.textContent = txt.substring(0, x) + "..";
  172. return;
  173. }
  174. }
  175. t.textContent = "";
  176. }
  177. // zoom
  178. function zoom_reset(e) {
  179. if (e.attributes != undefined) {
  180. orig_load(e, "x");
  181. orig_load(e, "width");
  182. }
  183. if (e.childNodes == undefined) return;
  184. for (var i = 0, c = e.childNodes; i < c.length; i++) {
  185. zoom_reset(c[i]);
  186. }
  187. }
  188. function zoom_child(e, x, ratio) {
  189. if (e.attributes != undefined) {
  190. if (e.attributes.x != undefined) {
  191. orig_save(e, "x");
  192. e.attributes.x.value = (parseFloat(e.attributes.x.value) - x - 10) * ratio + 10;
  193. if (e.tagName == "text")
  194. e.attributes.x.value = find_child(e.parentNode, "rect[x]").attributes.x.value + 3;
  195. }
  196. if (e.attributes.width != undefined) {
  197. orig_save(e, "width");
  198. e.attributes.width.value = parseFloat(e.attributes.width.value) * ratio;
  199. }
  200. }
  201. if (e.childNodes == undefined) return;
  202. for (var i = 0, c = e.childNodes; i < c.length; i++) {
  203. zoom_child(c[i], x - 10, ratio);
  204. }
  205. }
  206. function zoom_parent(e) {
  207. if (e.attributes) {
  208. if (e.attributes.x != undefined) {
  209. orig_save(e, "x");
  210. e.attributes.x.value = 10;
  211. }
  212. if (e.attributes.width != undefined) {
  213. orig_save(e, "width");
  214. e.attributes.width.value = parseInt(svg.width.baseVal.value) - (10 * 2);
  215. }
  216. }
  217. if (e.childNodes == undefined) return;
  218. for (var i = 0, c = e.childNodes; i < c.length; i++) {
  219. zoom_parent(c[i]);
  220. }
  221. }
  222. function zoom(node) {
  223. var attr = find_child(node, "rect").attributes;
  224. var width = parseFloat(attr.width.value);
  225. var xmin = parseFloat(attr.x.value);
  226. var xmax = parseFloat(xmin + width);
  227. var ymin = parseFloat(attr.y.value);
  228. var ratio = (svg.width.baseVal.value - 2 * 10) / width;
  229. // XXX: Workaround for JavaScript float issues (fix me)
  230. var fudge = 0.0001;
  231. unzoombtn.classList.remove("hide");
  232. var el = document.getElementById("frames").children;
  233. for (var i = 0; i < el.length; i++) {
  234. var e = el[i];
  235. var a = find_child(e, "rect").attributes;
  236. var ex = parseFloat(a.x.value);
  237. var ew = parseFloat(a.width.value);
  238. var upstack;
  239. // Is it an ancestor
  240. if (0 == 0) {
  241. upstack = parseFloat(a.y.value) > ymin;
  242. } else {
  243. upstack = parseFloat(a.y.value) < ymin;
  244. }
  245. if (upstack) {
  246. // Direct ancestor
  247. if (ex <= xmin && (ex+ew+fudge) >= xmax) {
  248. e.classList.add("parent");
  249. zoom_parent(e);
  250. update_text(e);
  251. }
  252. // not in current path
  253. else
  254. e.classList.add("hide");
  255. }
  256. // Children maybe
  257. else {
  258. // no common path
  259. if (ex < xmin || ex + fudge >= xmax) {
  260. e.classList.add("hide");
  261. }
  262. else {
  263. zoom_child(e, xmin, ratio);
  264. update_text(e);
  265. }
  266. }
  267. }
  268. search();
  269. }
  270. function unzoom(dont_update_text) {
  271. unzoombtn.classList.add("hide");
  272. var el = document.getElementById("frames").children;
  273. for(var i = 0; i < el.length; i++) {
  274. el[i].classList.remove("parent");
  275. el[i].classList.remove("hide");
  276. zoom_reset(el[i]);
  277. if(!dont_update_text) update_text(el[i]);
  278. }
  279. search();
  280. }
  281. function clearzoom() {
  282. unzoom();
  283. // remove zoom state
  284. var params = get_params();
  285. if (params.x) delete params.x;
  286. if (params.y) delete params.y;
  287. history.replaceState(null, null, parse_params(params));
  288. }
  289. // search
  290. function toggle_ignorecase() {
  291. ignorecase = !ignorecase;
  292. if (ignorecase) {
  293. ignorecaseBtn.classList.add("show");
  294. } else {
  295. ignorecaseBtn.classList.remove("show");
  296. }
  297. reset_search();
  298. search();
  299. }
  300. function reset_search() {
  301. var el = document.querySelectorAll("#frames rect");
  302. for (var i = 0; i < el.length; i++) {
  303. orig_load(el[i], "fill")
  304. }
  305. var params = get_params();
  306. delete params.s;
  307. history.replaceState(null, null, parse_params(params));
  308. }
  309. function search_prompt() {
  310. if (!searching) {
  311. var term = prompt("Enter a search term (regexp " +
  312. "allowed, eg: ^ext4_)"
  313. + (ignorecase ? ", ignoring case" : "")
  314. + "\nPress Ctrl-i to toggle case sensitivity", "");
  315. if (term != null) search(term);
  316. } else {
  317. reset_search();
  318. searching = 0;
  319. currentSearchTerm = null;
  320. searchbtn.classList.remove("show");
  321. searchbtn.firstChild.nodeValue = "Search"
  322. matchedtxt.classList.add("hide");
  323. matchedtxt.firstChild.nodeValue = ""
  324. }
  325. }
  326. function search(term) {
  327. if (term) currentSearchTerm = term;
  328. var re = new RegExp(currentSearchTerm, ignorecase ? 'i' : '');
  329. var el = document.getElementById("frames").children;
  330. var matches = new Object();
  331. var maxwidth = 0;
  332. for (var i = 0; i < el.length; i++) {
  333. var e = el[i];
  334. var func = g_to_func(e);
  335. var rect = find_child(e, "rect");
  336. if (func == null || rect == null)
  337. continue;
  338. // Save max width. Only works as we have a root frame
  339. var w = parseFloat(rect.attributes.width.value);
  340. if (w > maxwidth)
  341. maxwidth = w;
  342. if (func.match(re)) {
  343. // highlight
  344. var x = parseFloat(rect.attributes.x.value);
  345. orig_save(rect, "fill");
  346. rect.attributes.fill.value = "rgb(230,0,230)";
  347. // remember matches
  348. if (matches[x] == undefined) {
  349. matches[x] = w;
  350. } else {
  351. if (w > matches[x]) {
  352. // overwrite with parent
  353. matches[x] = w;
  354. }
  355. }
  356. searching = 1;
  357. }
  358. }
  359. if (!searching)
  360. return;
  361. var params = get_params();
  362. params.s = currentSearchTerm;
  363. history.replaceState(null, null, parse_params(params));
  364. searchbtn.classList.add("show");
  365. searchbtn.firstChild.nodeValue = "Reset Search";
  366. // calculate percent matched, excluding vertical overlap
  367. var count = 0;
  368. var lastx = -1;
  369. var lastw = 0;
  370. var keys = Array();
  371. for (k in matches) {
  372. if (matches.hasOwnProperty(k))
  373. keys.push(k);
  374. }
  375. // sort the matched frames by their x location
  376. // ascending, then width descending
  377. keys.sort(function(a, b){
  378. return a - b;
  379. });
  380. // Step through frames saving only the biggest bottom-up frames
  381. // thanks to the sort order. This relies on the tree property
  382. // where children are always smaller than their parents.
  383. var fudge = 0.0001; // JavaScript floating point
  384. for (var k in keys) {
  385. var x = parseFloat(keys[k]);
  386. var w = matches[keys[k]];
  387. if (x >= lastx + lastw - fudge) {
  388. count += w;
  389. lastx = x;
  390. lastw = w;
  391. }
  392. }
  393. // display matched percent
  394. matchedtxt.classList.remove("hide");
  395. var pct = 100 * count / maxwidth;
  396. if (pct != 100) pct = pct.toFixed(1)
  397. matchedtxt.firstChild.nodeValue = "Matched: " + pct + "%";
  398. }
  399. ]]>
  400. </script>
  401. <rect x="0.0" y="0" width="1200.0" height="758.0" fill="url(#background)" />
  402. <text id="title" x="600.00" y="24" >Flame Graph</text>
  403. <text id="details" x="10.00" y="741" > </text>
  404. <text id="unzoom" x="10.00" y="24" class="hide">Reset Zoom</text>
  405. <text id="search" x="1090.00" y="24" >Search</text>
  406. <text id="ignorecase" x="1174.00" y="24" >ic</text>
  407. <text id="matched" x="1090.00" y="741" > </text>
  408. <g id="frames">
  409. <g >
  410. <title>[Wasm] [fib2] fibonacci (1,321,095,222 samples, 93.80%)</title><rect x="83.2" y="341" width="1106.8" height="15.0" fill="rgb(218,159,32)" rx="2" ry="2" />
  411. <text x="86.21" y="351.5" >[Wasm] [fib2] fibonacci</text>
  412. </g>
  413. <g >
  414. <title>[Wasm] [fib2] fibonacci (382,407,564 samples, 27.15%)</title><rect x="869.6" y="213" width="320.4" height="15.0" fill="rgb(245,35,33)" rx="2" ry="2" />
  415. <text x="872.59" y="223.5" >[Wasm] [fib2] fibonacci</text>
  416. </g>
  417. <g >
  418. <title>[Wasm] [fib2] fibonacci (15,340,273 samples, 1.09%)</title><rect x="1177.1" y="101" width="12.9" height="15.0" fill="rgb(213,210,13)" rx="2" ry="2" />
  419. <text x="1180.11" y="111.5" ></text>
  420. </g>
  421. <g >
  422. <title>[Wasm] [fib2] fibonacci (1,359,552,763 samples, 96.53%)</title><rect x="51.0" y="357" width="1139.0" height="15.0" fill="rgb(252,138,7)" rx="2" ry="2" />
  423. <text x="53.99" y="367.5" >[Wasm] [fib2] fibonacci</text>
  424. </g>
  425. <g >
  426. <title>[Wasm] [fib2] fibonacci (1,408,481,525 samples, 100.00%)</title><rect x="10.0" y="517" width="1180.0" height="15.0" fill="rgb(218,120,5)" rx="2" ry="2" />
  427. <text x="13.00" y="527.5" >[Wasm] [fib2] fibonacci</text>
  428. </g>
  429. <g >
  430. <title>[Wasm] [fib2] fibonacci (27,274,310 samples, 1.94%)</title><rect x="1167.1" y="117" width="22.9" height="15.0" fill="rgb(234,117,51)" rx="2" ry="2" />
  431. <text x="1170.11" y="127.5" >[..</text>
  432. </g>
  433. <g >
  434. <title>[Wasm] [fib2] fibonacci (62,450,767 samples, 4.43%)</title><rect x="1137.6" y="149" width="52.4" height="15.0" fill="rgb(225,21,1)" rx="2" ry="2" />
  435. <text x="1140.64" y="159.5" >[Wasm..</text>
  436. </g>
  437. <g >
  438. <title>[Wasm] [fib2] fibonacci (1,408,481,525 samples, 100.00%)</title><rect x="10.0" y="485" width="1180.0" height="15.0" fill="rgb(233,228,10)" rx="2" ry="2" />
  439. <text x="13.00" y="495.5" >[Wasm] [fib2] fibonacci</text>
  440. </g>
  441. <g >
  442. <title>[Wasm] [fib2] fibonacci (1,388,674,508 samples, 98.59%)</title><rect x="26.6" y="389" width="1163.4" height="15.0" fill="rgb(253,174,18)" rx="2" ry="2" />
  443. <text x="29.59" y="399.5" >[Wasm] [fib2] fibonacci</text>
  444. </g>
  445. <g >
  446. <title>[Wasm] [fib2] fibonacci (1,170,751,868 samples, 83.12%)</title><rect x="209.2" y="309" width="980.8" height="15.0" fill="rgb(227,120,21)" rx="2" ry="2" />
  447. <text x="212.17" y="319.5" >[Wasm] [fib2] fibonacci</text>
  448. </g>
  449. <g >
  450. <title>[Wasm] [fib2] fibonacci (1,408,481,525 samples, 100.00%)</title><rect x="10.0" y="533" width="1180.0" height="15.0" fill="rgb(254,106,47)" rx="2" ry="2" />
  451. <text x="13.00" y="543.5" >[Wasm] [fib2] fibonacci</text>
  452. </g>
  453. <g >
  454. <title>[Wasm] [fib2] fibonacci (120,820,158 samples, 8.58%)</title><rect x="1088.7" y="165" width="101.3" height="15.0" fill="rgb(205,47,33)" rx="2" ry="2" />
  455. <text x="1091.74" y="175.5" >[Wasm] [fib2..</text>
  456. </g>
  457. <g >
  458. <title>invoke_i_i (1,408,481,525 samples, 100.00%)</title><rect x="10.0" y="565" width="1180.0" height="15.0" fill="rgb(238,144,29)" rx="2" ry="2" />
  459. <text x="13.00" y="575.5" >invoke_i_i</text>
  460. </g>
  461. <g >
  462. <title>[Wasm] [fib2] fibonacci (1,375,872,224 samples, 97.68%)</title><rect x="37.3" y="373" width="1152.7" height="15.0" fill="rgb(219,165,53)" rx="2" ry="2" />
  463. <text x="40.32" y="383.5" >[Wasm] [fib2] fibonacci</text>
  464. </g>
  465. <g >
  466. <title>load_run_wasm_file (1,408,481,525 samples, 100.00%)</title><rect x="10.0" y="645" width="1180.0" height="15.0" fill="rgb(233,129,29)" rx="2" ry="2" />
  467. <text x="13.00" y="655.5" >load_run_wasm_file</text>
  468. </g>
  469. <g >
  470. <title>load_run_fib_aot (1,408,481,525 samples, 100.00%)</title><rect x="10.0" y="661" width="1180.0" height="15.0" fill="rgb(248,119,41)" rx="2" ry="2" />
  471. <text x="13.00" y="671.5" >load_run_fib_aot</text>
  472. </g>
  473. <g >
  474. <title>[Wasm] [fib2] run (1,408,481,525 samples, 100.00%)</title><rect x="10.0" y="549" width="1180.0" height="15.0" fill="rgb(235,16,45)" rx="2" ry="2" />
  475. <text x="13.00" y="559.5" >[Wasm] [fib2] run</text>
  476. </g>
  477. <g >
  478. <title>[Wasm] [fib2] fibonacci (42,420,273 samples, 3.01%)</title><rect x="1154.4" y="133" width="35.6" height="15.0" fill="rgb(239,213,43)" rx="2" ry="2" />
  479. <text x="1157.42" y="143.5" >[Wa..</text>
  480. </g>
  481. <g >
  482. <title>[Wasm] [fib2] fibonacci (1,266,323,684 samples, 89.91%)</title><rect x="129.1" y="325" width="1060.9" height="15.0" fill="rgb(248,225,3)" rx="2" ry="2" />
  483. <text x="132.10" y="335.5" >[Wasm] [fib2] fibonacci</text>
  484. </g>
  485. <g >
  486. <title>linux_perf_samp (1,408,481,525 samples, 100.00%)</title><rect x="10.0" y="693" width="1180.0" height="15.0" fill="rgb(241,6,8)" rx="2" ry="2" />
  487. <text x="13.00" y="703.5" >linux_perf_samp</text>
  488. </g>
  489. <g >
  490. <title>[Wasm] [fib2] fibonacci (280,259,464 samples, 19.90%)</title><rect x="955.2" y="197" width="234.8" height="15.0" fill="rgb(243,108,14)" rx="2" ry="2" />
  491. <text x="958.17" y="207.5" >[Wasm] [fib2] fibonacci</text>
  492. </g>
  493. <g >
  494. <title>start_thread (1,408,481,525 samples, 100.00%)</title><rect x="10.0" y="677" width="1180.0" height="15.0" fill="rgb(248,153,5)" rx="2" ry="2" />
  495. <text x="13.00" y="687.5" >start_thread</text>
  496. </g>
  497. <g >
  498. <title>[Wasm] [fib2] fibonacci (2,334,521 samples, 0.17%)</title><rect x="1188.0" y="69" width="1.9" height="15.0" fill="rgb(237,160,49)" rx="2" ry="2" />
  499. <text x="1190.97" y="79.5" ></text>
  500. </g>
  501. <g >
  502. <title>[Wasm] [fib2] fibonacci (666,394,609 samples, 47.31%)</title><rect x="631.7" y="245" width="558.3" height="15.0" fill="rgb(213,187,32)" rx="2" ry="2" />
  503. <text x="634.67" y="255.5" >[Wasm] [fib2] fibonacci</text>
  504. </g>
  505. <g >
  506. <title>[Wasm] [fib2] fibonacci (943,121,736 samples, 66.96%)</title><rect x="399.9" y="277" width="790.1" height="15.0" fill="rgb(219,155,33)" rx="2" ry="2" />
  507. <text x="402.87" y="287.5" >[Wasm] [fib2] fibonacci</text>
  508. </g>
  509. <g >
  510. <title>[Wasm] [fib2] fibonacci (1,169,581 samples, 0.08%)</title><rect x="1188.9" y="53" width="1.0" height="15.0" fill="rgb(237,124,2)" rx="2" ry="2" />
  511. <text x="1191.95" y="63.5" ></text>
  512. </g>
  513. <g >
  514. <title>[Wasm] [fib2] fibonacci (1,169,581 samples, 0.08%)</title><rect x="1188.9" y="37" width="1.0" height="15.0" fill="rgb(251,93,20)" rx="2" ry="2" />
  515. <text x="1191.95" y="47.5" ></text>
  516. </g>
  517. <g >
  518. <title>[Wasm] [fib2] fibonacci (194,755,877 samples, 13.83%)</title><rect x="1026.8" y="181" width="163.2" height="15.0" fill="rgb(215,30,29)" rx="2" ry="2" />
  519. <text x="1029.80" y="191.5" >[Wasm] [fib2] fibonacci</text>
  520. </g>
  521. <g >
  522. <title>[Wasm] [fib2] fibonacci (1,406,148,966 samples, 99.83%)</title><rect x="12.0" y="437" width="1178.0" height="15.0" fill="rgb(254,68,36)" rx="2" ry="2" />
  523. <text x="14.95" y="447.5" >[Wasm] [fib2] fibonacci</text>
  524. </g>
  525. <g >
  526. <title>all (1,408,481,525 samples, 100%)</title><rect x="10.0" y="709" width="1180.0" height="15.0" fill="rgb(236,29,9)" rx="2" ry="2" />
  527. <text x="13.00" y="719.5" ></text>
  528. </g>
  529. <g >
  530. <title>wasm_func_call (1,408,481,525 samples, 100.00%)</title><rect x="10.0" y="629" width="1180.0" height="15.0" fill="rgb(245,143,47)" rx="2" ry="2" />
  531. <text x="13.00" y="639.5" >wasm_func_call</text>
  532. </g>
  533. <g >
  534. <title>[Wasm] [fib2] fibonacci (5,943,602 samples, 0.42%)</title><rect x="1185.0" y="85" width="5.0" height="15.0" fill="rgb(251,87,10)" rx="2" ry="2" />
  535. <text x="1187.98" y="95.5" ></text>
  536. </g>
  537. <g >
  538. <title>[Wasm] [fib2] fibonacci (1,408,481,525 samples, 100.00%)</title><rect x="10.0" y="469" width="1180.0" height="15.0" fill="rgb(249,99,1)" rx="2" ry="2" />
  539. <text x="13.00" y="479.5" >[Wasm] [fib2] fibonacci</text>
  540. </g>
  541. <g >
  542. <title>wasm_runtime_call_wasm (1,408,481,525 samples, 100.00%)</title><rect x="10.0" y="613" width="1180.0" height="15.0" fill="rgb(241,228,3)" rx="2" ry="2" />
  543. <text x="13.00" y="623.5" >wasm_runtime_call_wasm</text>
  544. </g>
  545. <g >
  546. <title>[Wasm] [fib2] fibonacci (1,401,486,191 samples, 99.50%)</title><rect x="15.9" y="405" width="1174.1" height="15.0" fill="rgb(242,25,16)" rx="2" ry="2" />
  547. <text x="18.86" y="415.5" >[Wasm] [fib2] fibonacci</text>
  548. </g>
  549. <g >
  550. <title>aot_call_function (1,408,481,525 samples, 100.00%)</title><rect x="10.0" y="597" width="1180.0" height="15.0" fill="rgb(234,207,25)" rx="2" ry="2" />
  551. <text x="13.00" y="607.5" >aot_call_function</text>
  552. </g>
  553. <g >
  554. <title>[Wasm] [fib2] fibonacci (531,941,563 samples, 37.77%)</title><rect x="744.3" y="229" width="445.7" height="15.0" fill="rgb(233,184,39)" rx="2" ry="2" />
  555. <text x="747.31" y="239.5" >[Wasm] [fib2] fibonacci</text>
  556. </g>
  557. <g >
  558. <title>[Wasm] [fib2] fibonacci (1,406,148,966 samples, 99.83%)</title><rect x="12.0" y="453" width="1178.0" height="15.0" fill="rgb(246,125,49)" rx="2" ry="2" />
  559. <text x="14.95" y="463.5" >[Wasm] [fib2] fibonacci</text>
  560. </g>
  561. <g >
  562. <title>[Wasm] [fib2] fibonacci (1,061,055,435 samples, 75.33%)</title><rect x="301.1" y="293" width="888.9" height="15.0" fill="rgb(248,39,32)" rx="2" ry="2" />
  563. <text x="304.07" y="303.5" >[Wasm] [fib2] fibonacci</text>
  564. </g>
  565. <g >
  566. <title>[Wasm] [fib2] fibonacci (1,408,481,525 samples, 100.00%)</title><rect x="10.0" y="501" width="1180.0" height="15.0" fill="rgb(217,150,5)" rx="2" ry="2" />
  567. <text x="13.00" y="511.5" >[Wasm] [fib2] fibonacci</text>
  568. </g>
  569. <g >
  570. <title>[Wasm] [fib2] fibonacci (1,403,816,880 samples, 99.67%)</title><rect x="13.9" y="421" width="1176.1" height="15.0" fill="rgb(208,33,41)" rx="2" ry="2" />
  571. <text x="16.91" y="431.5" >[Wasm] [fib2] fibonacci</text>
  572. </g>
  573. <g >
  574. <title>[Wasm] [fib2] fibonacci (800,646,766 samples, 56.84%)</title><rect x="519.2" y="261" width="670.8" height="15.0" fill="rgb(252,110,19)" rx="2" ry="2" />
  575. <text x="522.19" y="271.5" >[Wasm] [fib2] fibonacci</text>
  576. </g>
  577. <g >
  578. <title>invoke_native_with_hw_bound_check (1,408,481,525 samples, 100.00%)</title><rect x="10.0" y="581" width="1180.0" height="15.0" fill="rgb(243,145,41)" rx="2" ry="2" />
  579. <text x="13.00" y="591.5" >invoke_native_with_hw_bound_check</text>
  580. </g>
  581. </g>
  582. </svg>