Created
June 4, 2020 11:09
-
-
Save ethe/b287f81fc34cf7c3bc4dbdeea79234d2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?xml version="1.0" standalone="no"?> | |
| <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | |
| <svg version="1.1" width="1200" height="214" onload="init(evt)" viewBox="0 0 1200 214" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> | |
| <!-- Flame graph stack visualization. See https://github.com/brendangregg/FlameGraph for latest version, and http://www.brendangregg.com/flamegraphs.html for examples. --> | |
| <!-- NOTES: --> | |
| <defs> | |
| <linearGradient id="background" y1="0" y2="1" x1="0" x2="0" > | |
| <stop stop-color="#eeeeee" offset="5%" /> | |
| <stop stop-color="#eeeeb0" offset="95%" /> | |
| </linearGradient> | |
| </defs> | |
| <style type="text/css"> | |
| text { font-family:Verdana; font-size:12px; fill:rgb(0,0,0); } | |
| #search, #ignorecase { opacity:0.1; cursor:pointer; } | |
| #search:hover, #search.show, #ignorecase:hover, #ignorecase.show { opacity:1; } | |
| #subtitle { text-anchor:middle; font-color:rgb(160,160,160); } | |
| #title { text-anchor:middle; font-size:17px} | |
| #unzoom { cursor:pointer; } | |
| #frames > *:hover { stroke:black; stroke-width:0.5; cursor:pointer; } | |
| .hide { display:none; } | |
| .parent { opacity:0.5; } | |
| </style> | |
| <script type="text/ecmascript"> | |
| <![CDATA[ | |
| "use strict"; | |
| var details, searchbtn, unzoombtn, matchedtxt, svg, searching, currentSearchTerm, ignorecase, ignorecaseBtn; | |
| function init(evt) { | |
| details = document.getElementById("details").firstChild; | |
| searchbtn = document.getElementById("search"); | |
| ignorecaseBtn = document.getElementById("ignorecase"); | |
| unzoombtn = document.getElementById("unzoom"); | |
| matchedtxt = document.getElementById("matched"); | |
| svg = document.getElementsByTagName("svg")[0]; | |
| searching = 0; | |
| currentSearchTerm = null; | |
| } | |
| window.addEventListener("click", function(e) { | |
| var target = find_group(e.target); | |
| if (target) { | |
| if (target.nodeName == "a") { | |
| if (e.ctrlKey === false) return; | |
| e.preventDefault(); | |
| } | |
| if (target.classList.contains("parent")) unzoom(); | |
| zoom(target); | |
| } | |
| else if (e.target.id == "unzoom") unzoom(); | |
| else if (e.target.id == "search") search_prompt(); | |
| else if (e.target.id == "ignorecase") toggle_ignorecase(); | |
| }, false) | |
| // mouse-over for info | |
| // show | |
| window.addEventListener("mouseover", function(e) { | |
| var target = find_group(e.target); | |
| if (target) details.nodeValue = "Function: " + g_to_text(target); | |
| }, false) | |
| // clear | |
| window.addEventListener("mouseout", function(e) { | |
| var target = find_group(e.target); | |
| if (target) details.nodeValue = ' '; | |
| }, false) | |
| // ctrl-F for search | |
| window.addEventListener("keydown",function (e) { | |
| if (e.keyCode === 114 || (e.ctrlKey && e.keyCode === 70)) { | |
| e.preventDefault(); | |
| search_prompt(); | |
| } | |
| }, false) | |
| // ctrl-I to toggle case-sensitive search | |
| window.addEventListener("keydown",function (e) { | |
| if (e.ctrlKey && e.keyCode === 73) { | |
| e.preventDefault(); | |
| toggle_ignorecase(); | |
| } | |
| }, false) | |
| // functions | |
| function find_child(node, selector) { | |
| var children = node.querySelectorAll(selector); | |
| if (children.length) return children[0]; | |
| return; | |
| } | |
| function find_group(node) { | |
| var parent = node.parentElement; | |
| if (!parent) return; | |
| if (parent.id == "frames") return node; | |
| return find_group(parent); | |
| } | |
| function orig_save(e, attr, val) { | |
| if (e.attributes["_orig_" + attr] != undefined) return; | |
| if (e.attributes[attr] == undefined) return; | |
| if (val == undefined) val = e.attributes[attr].value; | |
| e.setAttribute("_orig_" + attr, val); | |
| } | |
| function orig_load(e, attr) { | |
| if (e.attributes["_orig_"+attr] == undefined) return; | |
| e.attributes[attr].value = e.attributes["_orig_" + attr].value; | |
| e.removeAttribute("_orig_"+attr); | |
| } | |
| function g_to_text(e) { | |
| var text = find_child(e, "title").firstChild.nodeValue; | |
| return (text) | |
| } | |
| function g_to_func(e) { | |
| var func = g_to_text(e); | |
| // if there's any manipulation we want to do to the function | |
| // name before it's searched, do it here before returning. | |
| return (func); | |
| } | |
| function update_text(e) { | |
| var r = find_child(e, "rect"); | |
| var t = find_child(e, "text"); | |
| var w = parseFloat(r.attributes.width.value) -3; | |
| var txt = find_child(e, "title").textContent.replace(/\([^(]*\)$/,""); | |
| t.attributes.x.value = parseFloat(r.attributes.x.value) + 3; | |
| // Smaller than this size won't fit anything | |
| if (w < 2 * 12 * 0.59) { | |
| t.textContent = ""; | |
| return; | |
| } | |
| t.textContent = txt; | |
| // Fit in full text width | |
| if (/^ *$/.test(txt) || t.getSubStringLength(0, txt.length) < w) | |
| return; | |
| for (var x = txt.length - 2; x > 0; x--) { | |
| if (t.getSubStringLength(0, x + 2) <= w) { | |
| t.textContent = txt.substring(0, x) + ".."; | |
| return; | |
| } | |
| } | |
| t.textContent = ""; | |
| } | |
| // zoom | |
| function zoom_reset(e) { | |
| if (e.attributes != undefined) { | |
| orig_load(e, "x"); | |
| orig_load(e, "width"); | |
| } | |
| if (e.childNodes == undefined) return; | |
| for (var i = 0, c = e.childNodes; i < c.length; i++) { | |
| zoom_reset(c[i]); | |
| } | |
| } | |
| function zoom_child(e, x, ratio) { | |
| if (e.attributes != undefined) { | |
| if (e.attributes.x != undefined) { | |
| orig_save(e, "x"); | |
| e.attributes.x.value = (parseFloat(e.attributes.x.value) - x - 10) * ratio + 10; | |
| if (e.tagName == "text") | |
| e.attributes.x.value = find_child(e.parentNode, "rect[x]").attributes.x.value + 3; | |
| } | |
| if (e.attributes.width != undefined) { | |
| orig_save(e, "width"); | |
| e.attributes.width.value = parseFloat(e.attributes.width.value) * ratio; | |
| } | |
| } | |
| if (e.childNodes == undefined) return; | |
| for (var i = 0, c = e.childNodes; i < c.length; i++) { | |
| zoom_child(c[i], x - 10, ratio); | |
| } | |
| } | |
| function zoom_parent(e) { | |
| if (e.attributes) { | |
| if (e.attributes.x != undefined) { | |
| orig_save(e, "x"); | |
| e.attributes.x.value = 10; | |
| } | |
| if (e.attributes.width != undefined) { | |
| orig_save(e, "width"); | |
| e.attributes.width.value = parseInt(svg.width.baseVal.value) - (10 * 2); | |
| } | |
| } | |
| if (e.childNodes == undefined) return; | |
| for (var i = 0, c = e.childNodes; i < c.length; i++) { | |
| zoom_parent(c[i]); | |
| } | |
| } | |
| function zoom(node) { | |
| var attr = find_child(node, "rect").attributes; | |
| var width = parseFloat(attr.width.value); | |
| var xmin = parseFloat(attr.x.value); | |
| var xmax = parseFloat(xmin + width); | |
| var ymin = parseFloat(attr.y.value); | |
| var ratio = (svg.width.baseVal.value - 2 * 10) / width; | |
| // XXX: Workaround for JavaScript float issues (fix me) | |
| var fudge = 0.0001; | |
| unzoombtn.classList.remove("hide"); | |
| var el = document.getElementById("frames").children; | |
| for (var i = 0; i < el.length; i++) { | |
| var e = el[i]; | |
| var a = find_child(e, "rect").attributes; | |
| var ex = parseFloat(a.x.value); | |
| var ew = parseFloat(a.width.value); | |
| var upstack; | |
| // Is it an ancestor | |
| if (0 == 0) { | |
| upstack = parseFloat(a.y.value) > ymin; | |
| } else { | |
| upstack = parseFloat(a.y.value) < ymin; | |
| } | |
| if (upstack) { | |
| // Direct ancestor | |
| if (ex <= xmin && (ex+ew+fudge) >= xmax) { | |
| e.classList.add("parent"); | |
| zoom_parent(e); | |
| update_text(e); | |
| } | |
| // not in current path | |
| else | |
| e.classList.add("hide"); | |
| } | |
| // Children maybe | |
| else { | |
| // no common path | |
| if (ex < xmin || ex + fudge >= xmax) { | |
| e.classList.add("hide"); | |
| } | |
| else { | |
| zoom_child(e, xmin, ratio); | |
| update_text(e); | |
| } | |
| } | |
| } | |
| search(); | |
| } | |
| function unzoom() { | |
| unzoombtn.classList.add("hide"); | |
| var el = document.getElementById("frames").children; | |
| for(var i = 0; i < el.length; i++) { | |
| el[i].classList.remove("parent"); | |
| el[i].classList.remove("hide"); | |
| zoom_reset(el[i]); | |
| update_text(el[i]); | |
| } | |
| search(); | |
| } | |
| // search | |
| function toggle_ignorecase() { | |
| ignorecase = !ignorecase; | |
| if (ignorecase) { | |
| ignorecaseBtn.classList.add("show"); | |
| } else { | |
| ignorecaseBtn.classList.remove("show"); | |
| } | |
| reset_search(); | |
| search(); | |
| } | |
| function reset_search() { | |
| var el = document.querySelectorAll("#frames rect"); | |
| for (var i = 0; i < el.length; i++) { | |
| orig_load(el[i], "fill") | |
| } | |
| } | |
| function search_prompt() { | |
| if (!searching) { | |
| var term = prompt("Enter a search term (regexp " + | |
| "allowed, eg: ^ext4_)" | |
| + (ignorecase ? ", ignoring case" : "") | |
| + "\nPress Ctrl-i to toggle case sensitivity", ""); | |
| if (term != null) { | |
| currentSearchTerm = term; | |
| search(); | |
| } | |
| } else { | |
| reset_search(); | |
| searching = 0; | |
| currentSearchTerm = null; | |
| searchbtn.classList.remove("show"); | |
| searchbtn.firstChild.nodeValue = "Search" | |
| matchedtxt.classList.add("hide"); | |
| matchedtxt.firstChild.nodeValue = "" | |
| } | |
| } | |
| function search(term) { | |
| if (currentSearchTerm === null) return; | |
| var term = currentSearchTerm; | |
| var re = new RegExp(term, ignorecase ? 'i' : ''); | |
| var el = document.getElementById("frames").children; | |
| var matches = new Object(); | |
| var maxwidth = 0; | |
| for (var i = 0; i < el.length; i++) { | |
| var e = el[i]; | |
| var func = g_to_func(e); | |
| var rect = find_child(e, "rect"); | |
| if (func == null || rect == null) | |
| continue; | |
| // Save max width. Only works as we have a root frame | |
| var w = parseFloat(rect.attributes.width.value); | |
| if (w > maxwidth) | |
| maxwidth = w; | |
| if (func.match(re)) { | |
| // highlight | |
| var x = parseFloat(rect.attributes.x.value); | |
| orig_save(rect, "fill"); | |
| rect.attributes.fill.value = "rgb(230,0,230)"; | |
| // remember matches | |
| if (matches[x] == undefined) { | |
| matches[x] = w; | |
| } else { | |
| if (w > matches[x]) { | |
| // overwrite with parent | |
| matches[x] = w; | |
| } | |
| } | |
| searching = 1; | |
| } | |
| } | |
| if (!searching) | |
| return; | |
| searchbtn.classList.add("show"); | |
| searchbtn.firstChild.nodeValue = "Reset Search"; | |
| // calculate percent matched, excluding vertical overlap | |
| var count = 0; | |
| var lastx = -1; | |
| var lastw = 0; | |
| var keys = Array(); | |
| for (k in matches) { | |
| if (matches.hasOwnProperty(k)) | |
| keys.push(k); | |
| } | |
| // sort the matched frames by their x location | |
| // ascending, then width descending | |
| keys.sort(function(a, b){ | |
| return a - b; | |
| }); | |
| // Step through frames saving only the biggest bottom-up frames | |
| // thanks to the sort order. This relies on the tree property | |
| // where children are always smaller than their parents. | |
| var fudge = 0.0001; // JavaScript floating point | |
| for (var k in keys) { | |
| var x = parseFloat(keys[k]); | |
| var w = matches[keys[k]]; | |
| if (x >= lastx + lastw - fudge) { | |
| count += w; | |
| lastx = x; | |
| lastw = w; | |
| } | |
| } | |
| // display matched percent | |
| matchedtxt.classList.remove("hide"); | |
| var pct = 100 * count / maxwidth; | |
| if (pct != 100) pct = pct.toFixed(1) | |
| matchedtxt.firstChild.nodeValue = "Matched: " + pct + "%"; | |
| } | |
| ]]> | |
| </script> | |
| <rect x="0.0" y="0" width="1200.0" height="214.0" fill="url(#background)" /> | |
| <text id="title" x="600.00" y="24" >Flame Graph</text> | |
| <text id="details" x="10.00" y="197" > </text> | |
| <text id="unzoom" x="10.00" y="24" class="hide">Reset Zoom</text> | |
| <text id="search" x="1090.00" y="24" >Search</text> | |
| <text id="ignorecase" x="1174.00" y="24" >ic</text> | |
| <text id="matched" x="1090.00" y="197" > </text> | |
| <g id="frames"> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).appendStrings (6 samples, 5.17%)</title><rect x="793.3" y="69" width="61.0" height="15.0" fill="rgb(209,200,23)" rx="2" ry="2" /> | |
| <text x="796.28" y="79.5" >code.b..</text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).Time (3 samples, 2.59%)</title><rect x="182.9" y="85" width="30.5" height="15.0" fill="rgb(235,125,1)" rx="2" ry="2" /> | |
| <text x="185.93" y="95.5" >co..</text> | |
| </g> | |
| <g > | |
| <title>runtime.sysmon (2 samples, 1.72%)</title><rect x="10.0" y="117" width="20.3" height="15.0" fill="rgb(245,26,24)" rx="2" ry="2" /> | |
| <text x="13.00" y="127.5" ></text> | |
| </g> | |
| <g > | |
| <title>runtime.memmove (2 samples, 1.72%)</title><rect x="671.2" y="53" width="20.4" height="15.0" fill="rgb(242,145,29)" rx="2" ry="2" /> | |
| <text x="674.21" y="63.5" ></text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).PSM.func1 (9 samples, 7.76%)</title><rect x="762.8" y="85" width="91.5" height="15.0" fill="rgb(217,180,0)" rx="2" ry="2" /> | |
| <text x="765.76" y="95.5" >code.byted..</text> | |
| </g> | |
| <g > | |
| <title>sync.(*Pool).Put (9 samples, 7.76%)</title><rect x="1098.4" y="69" width="91.6" height="15.0" fill="rgb(208,229,3)" rx="2" ry="2" /> | |
| <text x="1101.45" y="79.5" >sync.(*Poo..</text> | |
| </g> | |
| <g > | |
| <title>runtime.startTheWorldWithSema (1 samples, 0.86%)</title><rect x="30.3" y="101" width="10.2" height="15.0" fill="rgb(212,97,21)" rx="2" ry="2" /> | |
| <text x="33.34" y="111.5" ></text> | |
| </g> | |
| <g > | |
| <title>testing.(*B).runN (113 samples, 97.41%)</title><rect x="40.5" y="133" width="1149.5" height="15.0" fill="rgb(208,224,37)" rx="2" ry="2" /> | |
| <text x="43.52" y="143.5" >testing.(*B).runN</text> | |
| </g> | |
| <g > | |
| <title>sync.(*Pool).pin (1 samples, 0.86%)</title><rect x="274.5" y="53" width="10.2" height="15.0" fill="rgb(250,167,29)" rx="2" ry="2" /> | |
| <text x="277.48" y="63.5" ></text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).LogID.func1 (4 samples, 3.45%)</title><rect x="722.1" y="85" width="40.7" height="15.0" fill="rgb(249,190,18)" rx="2" ry="2" /> | |
| <text x="725.07" y="95.5" >cod..</text> | |
| </g> | |
| <g > | |
| <title>runtime.mstart (3 samples, 2.59%)</title><rect x="10.0" y="149" width="30.5" height="15.0" fill="rgb(207,125,35)" rx="2" ry="2" /> | |
| <text x="13.00" y="159.5" >ru..</text> | |
| </g> | |
| <g > | |
| <title>testing.(*B).launch (113 samples, 97.41%)</title><rect x="40.5" y="149" width="1149.5" height="15.0" fill="rgb(216,131,1)" rx="2" ry="2" /> | |
| <text x="43.52" y="159.5" >testing.(*B).launch</text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).Location.func1 (3 samples, 2.59%)</title><rect x="691.6" y="85" width="30.5" height="15.0" fill="rgb(242,119,6)" rx="2" ry="2" /> | |
| <text x="694.55" y="95.5" >co..</text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*ByteDLogger).Debug (19 samples, 16.38%)</title><rect x="91.4" y="101" width="193.3" height="15.0" fill="rgb(227,153,29)" rx="2" ry="2" /> | |
| <text x="94.38" y="111.5" >code.byted.org/guozixing/..</text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).Level (1 samples, 0.86%)</title><rect x="132.1" y="85" width="10.1" height="15.0" fill="rgb(224,7,5)" rx="2" ry="2" /> | |
| <text x="135.07" y="95.5" ></text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).Level.func1 (5 samples, 4.31%)</title><rect x="640.7" y="85" width="50.9" height="15.0" fill="rgb(221,192,48)" rx="2" ry="2" /> | |
| <text x="643.69" y="95.5" >code...</text> | |
| </g> | |
| <g > | |
| <title>runtime.memmove (5 samples, 4.31%)</title><rect x="366.0" y="85" width="50.9" height="15.0" fill="rgb(243,125,30)" rx="2" ry="2" /> | |
| <text x="369.03" y="95.5" >runti..</text> | |
| </g> | |
| <g > | |
| <title>runtime.memmove (2 samples, 1.72%)</title><rect x="1047.6" y="69" width="20.3" height="15.0" fill="rgb(210,141,20)" rx="2" ry="2" /> | |
| <text x="1050.59" y="79.5" ></text> | |
| </g> | |
| <g > | |
| <title>sync.indexLocal (2 samples, 1.72%)</title><rect x="1159.5" y="53" width="20.3" height="15.0" fill="rgb(244,138,33)" rx="2" ry="2" /> | |
| <text x="1162.48" y="63.5" ></text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).Cluster.func1 (7 samples, 6.03%)</title><rect x="518.6" y="85" width="71.2" height="15.0" fill="rgb(222,93,9)" rx="2" ry="2" /> | |
| <text x="521.62" y="95.5" >code.byt..</text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.BenchmarkLogPrint (108 samples, 93.10%)</title><rect x="91.4" y="117" width="1098.6" height="15.0" fill="rgb(214,141,3)" rx="2" ry="2" /> | |
| <text x="94.38" y="127.5" >code.byted.org/guozixing/log.BenchmarkLogPrint</text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).Version (2 samples, 1.72%)</title><rect x="213.4" y="85" width="20.4" height="15.0" fill="rgb(207,8,20)" rx="2" ry="2" /> | |
| <text x="216.45" y="95.5" ></text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).Line (5 samples, 4.31%)</title><rect x="40.5" y="117" width="50.9" height="15.0" fill="rgb(225,15,27)" rx="2" ry="2" /> | |
| <text x="43.52" y="127.5" >code...</text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.logIDFromContext (1 samples, 0.86%)</title><rect x="752.6" y="69" width="10.2" height="15.0" fill="rgb(237,14,25)" rx="2" ry="2" /> | |
| <text x="755.59" y="79.5" ></text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).appendStrings (4 samples, 3.45%)</title><rect x="600.0" y="69" width="40.7" height="15.0" fill="rgb(216,83,18)" rx="2" ry="2" /> | |
| <text x="603.00" y="79.5" >cod..</text> | |
| </g> | |
| <g > | |
| <title>runtime.netpoll (1 samples, 0.86%)</title><rect x="30.3" y="85" width="10.2" height="15.0" fill="rgb(248,30,53)" rx="2" ry="2" /> | |
| <text x="33.34" y="95.5" ></text> | |
| </g> | |
| <g > | |
| <title>sync.(*Pool).Get (4 samples, 3.45%)</title><rect x="244.0" y="69" width="40.7" height="15.0" fill="rgb(252,79,52)" rx="2" ry="2" /> | |
| <text x="246.97" y="79.5" >syn..</text> | |
| </g> | |
| <g > | |
| <title>runtime.memmove (3 samples, 2.59%)</title><rect x="1017.1" y="53" width="30.5" height="15.0" fill="rgb(220,44,16)" rx="2" ry="2" /> | |
| <text x="1020.07" y="63.5" >ru..</text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).Content (13 samples, 11.21%)</title><rect x="284.7" y="101" width="132.2" height="15.0" fill="rgb(245,44,40)" rx="2" ry="2" /> | |
| <text x="287.66" y="111.5" >code.byted.org/g..</text> | |
| </g> | |
| <g > | |
| <title>sync.(*Once).Do (1 samples, 0.86%)</title><rect x="81.2" y="101" width="10.2" height="15.0" fill="rgb(234,109,50)" rx="2" ry="2" /> | |
| <text x="84.21" y="111.5" ></text> | |
| </g> | |
| <g > | |
| <title>runtime.procPin (1 samples, 0.86%)</title><rect x="1149.3" y="37" width="10.2" height="15.0" fill="rgb(211,192,0)" rx="2" ry="2" /> | |
| <text x="1152.31" y="47.5" ></text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).appendStrings (2 samples, 1.72%)</title><rect x="732.2" y="69" width="20.4" height="15.0" fill="rgb(236,166,38)" rx="2" ry="2" /> | |
| <text x="735.24" y="79.5" ></text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).recycle (12 samples, 10.34%)</title><rect x="1067.9" y="85" width="122.1" height="15.0" fill="rgb(216,162,30)" rx="2" ry="2" /> | |
| <text x="1070.93" y="95.5" >code.byted.org/..</text> | |
| </g> | |
| <g > | |
| <title>runtime.memmove (1 samples, 0.86%)</title><rect x="945.9" y="69" width="10.1" height="15.0" fill="rgb(212,189,13)" rx="2" ry="2" /> | |
| <text x="948.86" y="79.5" ></text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).appendStrings (2 samples, 1.72%)</title><rect x="1047.6" y="85" width="20.3" height="15.0" fill="rgb(218,14,33)" rx="2" ry="2" /> | |
| <text x="1050.59" y="95.5" ></text> | |
| </g> | |
| <g > | |
| <title>runtime.kevent (1 samples, 0.86%)</title><rect x="30.3" y="69" width="10.2" height="15.0" fill="rgb(215,168,2)" rx="2" ry="2" /> | |
| <text x="33.34" y="79.5" ></text> | |
| </g> | |
| <g > | |
| <title>sync.(*Pool).pin (1 samples, 0.86%)</title><rect x="1149.3" y="53" width="10.2" height="15.0" fill="rgb(239,162,7)" rx="2" ry="2" /> | |
| <text x="1152.31" y="63.5" ></text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).Stage (1 samples, 0.86%)</title><rect x="172.8" y="85" width="10.1" height="15.0" fill="rgb(245,146,32)" rx="2" ry="2" /> | |
| <text x="175.76" y="95.5" ></text> | |
| </g> | |
| <g > | |
| <title>runtime.systemstack (1 samples, 0.86%)</title><rect x="30.3" y="133" width="10.2" height="15.0" fill="rgb(239,149,51)" rx="2" ry="2" /> | |
| <text x="33.34" y="143.5" ></text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).appendStrings (5 samples, 4.31%)</title><rect x="539.0" y="69" width="50.8" height="15.0" fill="rgb(237,11,37)" rx="2" ry="2" /> | |
| <text x="541.97" y="79.5" >code...</text> | |
| </g> | |
| <g > | |
| <title>runtime.mstart1 (2 samples, 1.72%)</title><rect x="10.0" y="133" width="20.3" height="15.0" fill="rgb(252,101,6)" rx="2" ry="2" /> | |
| <text x="13.00" y="143.5" ></text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).appendStrings (3 samples, 2.59%)</title><rect x="661.0" y="69" width="30.6" height="15.0" fill="rgb(233,167,8)" rx="2" ry="2" /> | |
| <text x="664.03" y="79.5" >co..</text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).Host (1 samples, 0.86%)</title><rect x="121.9" y="85" width="10.2" height="15.0" fill="rgb(215,186,45)" rx="2" ry="2" /> | |
| <text x="124.90" y="95.5" ></text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).PSM (1 samples, 0.86%)</title><rect x="162.6" y="85" width="10.2" height="15.0" fill="rgb(253,148,7)" rx="2" ry="2" /> | |
| <text x="165.59" y="95.5" ></text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).Time.func1 (4 samples, 3.45%)</title><rect x="915.3" y="85" width="40.7" height="15.0" fill="rgb(220,176,22)" rx="2" ry="2" /> | |
| <text x="918.34" y="95.5" >cod..</text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).Version.func1 (9 samples, 7.76%)</title><rect x="956.0" y="85" width="91.6" height="15.0" fill="rgb(244,208,27)" rx="2" ry="2" /> | |
| <text x="959.03" y="95.5" >code.byted..</text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).Farewell (76 samples, 65.52%)</title><rect x="416.9" y="101" width="773.1" height="15.0" fill="rgb(207,90,7)" rx="2" ry="2" /> | |
| <text x="419.90" y="111.5" >code.byted.org/guozixing/log.(*Log).Farewell</text> | |
| </g> | |
| <g > | |
| <title>sync.runtime_procUnpin (1 samples, 0.86%)</title><rect x="1179.8" y="53" width="10.2" height="15.0" fill="rgb(224,43,19)" rx="2" ry="2" /> | |
| <text x="1182.83" y="63.5" ></text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.newLog (5 samples, 4.31%)</title><rect x="233.8" y="85" width="50.9" height="15.0" fill="rgb(247,17,53)" rx="2" ry="2" /> | |
| <text x="236.79" y="95.5" >code...</text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).appendStrings (7 samples, 6.03%)</title><rect x="976.4" y="69" width="71.2" height="15.0" fill="rgb(246,46,41)" rx="2" ry="2" /> | |
| <text x="979.38" y="79.5" >code.byt..</text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).appendStrings (2 samples, 1.72%)</title><rect x="701.7" y="69" width="20.4" height="15.0" fill="rgb(220,113,35)" rx="2" ry="2" /> | |
| <text x="704.72" y="79.5" ></text> | |
| </g> | |
| <g > | |
| <title>all (116 samples, 100%)</title><rect x="10.0" y="165" width="1180.0" height="15.0" fill="rgb(225,54,15)" rx="2" ry="2" /> | |
| <text x="13.00" y="175.5" ></text> | |
| </g> | |
| <g > | |
| <title>runtime.memmove (1 samples, 0.86%)</title><rect x="711.9" y="53" width="10.2" height="15.0" fill="rgb(216,227,47)" rx="2" ry="2" /> | |
| <text x="714.90" y="63.5" ></text> | |
| </g> | |
| <g > | |
| <title>runtime.usleep (2 samples, 1.72%)</title><rect x="10.0" y="101" width="20.3" height="15.0" fill="rgb(205,40,10)" rx="2" ry="2" /> | |
| <text x="13.00" y="111.5" ></text> | |
| </g> | |
| <g > | |
| <title>runtime.memmove (2 samples, 1.72%)</title><rect x="620.3" y="53" width="20.4" height="15.0" fill="rgb(250,115,2)" rx="2" ry="2" /> | |
| <text x="623.34" y="63.5" ></text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).Location (2 samples, 1.72%)</title><rect x="142.2" y="85" width="20.4" height="15.0" fill="rgb(251,124,26)" rx="2" ry="2" /> | |
| <text x="145.24" y="95.5" ></text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).Host.func1 (5 samples, 4.31%)</title><rect x="589.8" y="85" width="50.9" height="15.0" fill="rgb(235,21,28)" rx="2" ry="2" /> | |
| <text x="592.83" y="95.5" >code...</text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Line).Load (2 samples, 1.72%)</title><rect x="60.9" y="101" width="20.3" height="15.0" fill="rgb(210,138,22)" rx="2" ry="2" /> | |
| <text x="63.86" y="111.5" ></text> | |
| </g> | |
| <g > | |
| <title>runtime.memmove (4 samples, 3.45%)</title><rect x="874.7" y="53" width="40.6" height="15.0" fill="rgb(242,146,1)" rx="2" ry="2" /> | |
| <text x="877.66" y="63.5" >run..</text> | |
| </g> | |
| <g > | |
| <title>runtime.memmove (1 samples, 0.86%)</title><rect x="579.7" y="53" width="10.1" height="15.0" fill="rgb(234,152,1)" rx="2" ry="2" /> | |
| <text x="582.66" y="63.5" ></text> | |
| </g> | |
| <g > | |
| <title>runtime.procPin (1 samples, 0.86%)</title><rect x="274.5" y="37" width="10.2" height="15.0" fill="rgb(244,110,41)" rx="2" ry="2" /> | |
| <text x="277.48" y="47.5" ></text> | |
| </g> | |
| <g > | |
| <title>runtime.startTheWorld.func1 (1 samples, 0.86%)</title><rect x="30.3" y="117" width="10.2" height="15.0" fill="rgb(229,130,4)" rx="2" ry="2" /> | |
| <text x="33.34" y="127.5" ></text> | |
| </g> | |
| <g > | |
| <title>runtime.memmove (4 samples, 3.45%)</title><rect x="813.6" y="53" width="40.7" height="15.0" fill="rgb(247,223,9)" rx="2" ry="2" /> | |
| <text x="816.62" y="63.5" >run..</text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).appendStrings (6 samples, 5.17%)</title><rect x="854.3" y="69" width="61.0" height="15.0" fill="rgb(219,175,14)" rx="2" ry="2" /> | |
| <text x="857.31" y="79.5" >code.b..</text> | |
| </g> | |
| <g > | |
| <title>code.byted.org/guozixing/log.(*Log).Stage.func1 (6 samples, 5.17%)</title><rect x="854.3" y="85" width="61.0" height="15.0" fill="rgb(237,195,24)" rx="2" ry="2" /> | |
| <text x="857.31" y="95.5" >code.b..</text> | |
| </g> | |
| </g> | |
| </svg> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment