300 lines
35 KiB
XML
300 lines
35 KiB
XML
<?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="326" onload="init(evt)" viewBox="0 0 1200 326" 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.--><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">.func_g:hover { stroke:black; stroke-width:0.5; cursor:pointer; }</style><script type="text/ecmascript"><![CDATA[var nametype = 'Function:';
|
|
var fontsize = 12;
|
|
var fontwidth = 0.59;
|
|
var xpad = 10;
|
|
var inverted = false;
|
|
var searchcolor = 'rgb(230,0,230)';]]><![CDATA[var details, searchbtn, matchedtxt, svg;
|
|
function init(evt) {
|
|
details = document.getElementById("details").firstChild;
|
|
searchbtn = document.getElementById("search");
|
|
matchedtxt = document.getElementById("matched");
|
|
svg = document.getElementsByTagName("svg")[0];
|
|
searching = 0;
|
|
}
|
|
// mouse-over for info
|
|
function s(node) { // show
|
|
info = g_to_text(node);
|
|
details.nodeValue = nametype + " " + info;
|
|
}
|
|
function c() { // clear
|
|
details.nodeValue = ' ';
|
|
}
|
|
// ctrl-F for search
|
|
window.addEventListener("keydown",function (e) {
|
|
if (e.keyCode === 114 || (e.ctrlKey && e.keyCode === 70)) {
|
|
e.preventDefault();
|
|
search_prompt();
|
|
}
|
|
})
|
|
// functions
|
|
function find_child(parent, name, attr) {
|
|
var children = parent.childNodes;
|
|
for (var i=0; i<children.length;i++) {
|
|
if (children[i].tagName == name)
|
|
return (attr != undefined) ? children[i].attributes[attr].value : children[i];
|
|
}
|
|
return;
|
|
}
|
|
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*fontsize*fontwidth) {
|
|
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 - xpad) * ratio + xpad;
|
|
if(e.tagName == "text") e.attributes["x"].value = find_child(e.parentNode, "rect", "x") + 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-xpad, ratio);
|
|
}
|
|
}
|
|
function zoom_parent(e) {
|
|
if (e.attributes) {
|
|
if (e.attributes["x"] != undefined) {
|
|
orig_save(e, "x");
|
|
e.attributes["x"].value = xpad;
|
|
}
|
|
if (e.attributes["width"] != undefined) {
|
|
orig_save(e, "width");
|
|
e.attributes["width"].value = parseInt(svg.width.baseVal.value) - (xpad*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*xpad) / width;
|
|
// XXX: Workaround for JavaScript float issues (fix me)
|
|
var fudge = 0.0001;
|
|
var unzoombtn = document.getElementById("unzoom");
|
|
unzoombtn.style["opacity"] = "1.0";
|
|
var el = document.getElementsByTagName("g");
|
|
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);
|
|
// Is it an ancestor
|
|
if (!inverted) {
|
|
var upstack = parseFloat(a["y"].value) > ymin;
|
|
} else {
|
|
var upstack = parseFloat(a["y"].value) < ymin;
|
|
}
|
|
if (upstack) {
|
|
// Direct ancestor
|
|
if (ex <= xmin && (ex+ew+fudge) >= xmax) {
|
|
e.style["opacity"] = "0.5";
|
|
zoom_parent(e);
|
|
e.onclick = function(e){unzoom(); zoom(this);};
|
|
update_text(e);
|
|
}
|
|
// not in current path
|
|
else
|
|
e.style["display"] = "none";
|
|
}
|
|
// Children maybe
|
|
else {
|
|
// no common path
|
|
if (ex < xmin || ex + fudge >= xmax) {
|
|
e.style["display"] = "none";
|
|
}
|
|
else {
|
|
zoom_child(e, xmin, ratio);
|
|
e.onclick = function(e){zoom(this);};
|
|
update_text(e);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function unzoom() {
|
|
var unzoombtn = document.getElementById("unzoom");
|
|
unzoombtn.style["opacity"] = "0.0";
|
|
var el = document.getElementsByTagName("g");
|
|
for(i=0;i<el.length;i++) {
|
|
el[i].style["display"] = "block";
|
|
el[i].style["opacity"] = "1";
|
|
zoom_reset(el[i]);
|
|
update_text(el[i]);
|
|
}
|
|
}
|
|
// search
|
|
function reset_search() {
|
|
var el = document.getElementsByTagName("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_)", "");
|
|
if (term != null) {
|
|
search(term)
|
|
}
|
|
} else {
|
|
reset_search();
|
|
searching = 0;
|
|
searchbtn.style["opacity"] = "0.1";
|
|
searchbtn.firstChild.nodeValue = "Search"
|
|
matchedtxt.style["opacity"] = "0.0";
|
|
matchedtxt.firstChild.nodeValue = ""
|
|
}
|
|
}
|
|
function search(term) {
|
|
var re = new RegExp(term);
|
|
var el = document.getElementsByTagName("g");
|
|
var matches = new Object();
|
|
var maxwidth = 0;
|
|
for (var i = 0; i < el.length; i++) {
|
|
var e = el[i];
|
|
if (e.attributes["class"].value != "func_g")
|
|
continue;
|
|
var func = g_to_func(e);
|
|
var rect = find_child(e, "rect");
|
|
if (rect == null) {
|
|
// the rect might be wrapped in an anchor
|
|
// if nameattr href is being used
|
|
if (rect = find_child(e, "a")) {
|
|
rect = find_child(r, "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 = searchcolor;
|
|
// 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.style["opacity"] = "1.0";
|
|
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.style["opacity"] = "1.0";
|
|
pct = 100 * count / maxwidth;
|
|
if (pct == 100)
|
|
pct = "100"
|
|
else
|
|
pct = pct.toFixed(1)
|
|
matchedtxt.firstChild.nodeValue = "Matched: " + pct + "%";
|
|
}
|
|
function searchover(e) {
|
|
searchbtn.style["opacity"] = "1.0";
|
|
}
|
|
function searchout(e) {
|
|
if (searching) {
|
|
searchbtn.style["opacity"] = "1.0";
|
|
} else {
|
|
searchbtn.style["opacity"] = "0.1";
|
|
}
|
|
}
|
|
]]></script><rect x="0" y="0" width="1200" height="326" fill="url(#background)"/><text text-anchor="middle" x="600.00" y="24.00" font-size="17" font-family="Verdana" fill="rgb(0, 0, 0)">Flame Graph</text><text id="details" text-anchor="left" x="10.00" y="309.00" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"> </text><text id="unzoom" onclick="unzoom()" style="opacity:0.0;cursor:pointer" text-anchor="left" x="10.00" y="24.00" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">Reset Zoom</text><text id="search" onmouseover="searchover()" onmouseout="searchout()" onclick="search_prompt()" style="opacity:0.1;cursor:pointer" text-anchor="left" x="1090.00" y="24.00" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">Search</text><text id="matched" text-anchor="left" x="1090.00" y="309.00" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"> </text><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>perf_4.19 (4 samples, 0.70%)</title><rect x="10" y="261" width="8" height="15" fill="rgb(222,89,39)"/><text text-anchor="left" x="13.00" y="271.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>[unknown] (4 samples, 0.70%)</title><rect x="10" y="245" width="8" height="15" fill="rgb(225,105,42)"/><text text-anchor="left" x="13.00" y="255.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>entry_SYSCALL_64_after_hwframe (4 samples, 0.70%)</title><rect x="10" y="229" width="8" height="15" fill="rgb(249,161,12)"/><text text-anchor="left" x="13.00" y="239.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>do_syscall_64 (4 samples, 0.70%)</title><rect x="10" y="213" width="8" height="15" fill="rgb(219,89,8)"/><text text-anchor="left" x="13.00" y="223.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>__x64_sys_execve (4 samples, 0.70%)</title><rect x="10" y="197" width="8" height="15" fill="rgb(240,90,19)"/><text text-anchor="left" x="13.00" y="207.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>__do_execve_file.isra.34 (4 samples, 0.70%)</title><rect x="10" y="181" width="8" height="15" fill="rgb(215,49,7)"/><text text-anchor="left" x="13.00" y="191.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>search_binary_handler (4 samples, 0.70%)</title><rect x="10" y="165" width="8" height="15" fill="rgb(235,73,14)"/><text text-anchor="left" x="13.00" y="175.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>load_elf_binary (4 samples, 0.70%)</title><rect x="10" y="149" width="8" height="15" fill="rgb(206,98,51)"/><text text-anchor="left" x="13.00" y="159.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>setup_new_exec (4 samples, 0.70%)</title><rect x="10" y="133" width="8" height="15" fill="rgb(223,64,12)"/><text text-anchor="left" x="13.00" y="143.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>perf_event_exec (4 samples, 0.70%)</title><rect x="10" y="117" width="8" height="15" fill="rgb(236,26,1)"/><text text-anchor="left" x="13.00" y="127.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>__intel_pmu_enable_all.constprop.23 (4 samples, 0.70%)</title><rect x="10" y="101" width="8" height="15" fill="rgb(252,149,22)"/><text text-anchor="left" x="13.00" y="111.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>native_write_msr (4 samples, 0.70%)</title><rect x="10" y="85" width="8" height="15" fill="rgb(254,118,50)"/><text text-anchor="left" x="13.00" y="95.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>entry_SYSCALL_64_after_hwframe (1 samples, 0.18%)</title><rect x="18" y="229" width="2" height="15" fill="rgb(253,144,6)"/><text text-anchor="left" x="21.00" y="239.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>do_syscall_64 (1 samples, 0.18%)</title><rect x="18" y="213" width="2" height="15" fill="rgb(240,155,49)"/><text text-anchor="left" x="21.00" y="223.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>__x64_sys_execve (1 samples, 0.18%)</title><rect x="18" y="197" width="2" height="15" fill="rgb(218,5,32)"/><text text-anchor="left" x="21.00" y="207.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>__do_execve_file.isra.34 (1 samples, 0.18%)</title><rect x="18" y="181" width="2" height="15" fill="rgb(213,76,41)"/><text text-anchor="left" x="21.00" y="191.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>search_binary_handler (1 samples, 0.18%)</title><rect x="18" y="165" width="2" height="15" fill="rgb(249,76,38)"/><text text-anchor="left" x="21.00" y="175.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>load_elf_binary (1 samples, 0.18%)</title><rect x="18" y="149" width="2" height="15" fill="rgb(249,154,25)"/><text text-anchor="left" x="21.00" y="159.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>__clear_user (1 samples, 0.18%)</title><rect x="18" y="133" width="2" height="15" fill="rgb(215,58,5)"/><text text-anchor="left" x="21.00" y="143.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>page_fault (1 samples, 0.18%)</title><rect x="18" y="117" width="2" height="15" fill="rgb(237,199,45)"/><text text-anchor="left" x="21.00" y="127.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>__do_page_fault (1 samples, 0.18%)</title><rect x="18" y="101" width="2" height="15" fill="rgb(234,207,49)"/><text text-anchor="left" x="21.00" y="111.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>handle_mm_fault (1 samples, 0.18%)</title><rect x="18" y="85" width="2" height="15" fill="rgb(226,100,4)"/><text text-anchor="left" x="21.00" y="95.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>__handle_mm_fault (1 samples, 0.18%)</title><rect x="18" y="69" width="2" height="15" fill="rgb(244,206,9)"/><text text-anchor="left" x="21.00" y="79.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>finish_fault (1 samples, 0.18%)</title><rect x="18" y="53" width="2" height="15" fill="rgb(215,56,40)"/><text text-anchor="left" x="21.00" y="63.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>alloc_set_pte (1 samples, 0.18%)</title><rect x="18" y="37" width="2" height="15" fill="rgb(248,209,46)"/><text text-anchor="left" x="21.00" y="47.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>[unknown] (4 samples, 0.70%)</title><rect x="18" y="245" width="8" height="15" fill="rgb(224,175,45)"/><text text-anchor="left" x="21.00" y="255.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>swapgs_restore_regs_and_return_to_usermode (3 samples, 0.53%)</title><rect x="20" y="229" width="6" height="15" fill="rgb(227,121,51)"/><text text-anchor="left" x="23.00" y="239.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>prepare_exit_to_usermode (3 samples, 0.53%)</title><rect x="20" y="213" width="6" height="15" fill="rgb(228,58,1)"/><text text-anchor="left" x="23.00" y="223.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>exit_to_usermode_loop (3 samples, 0.53%)</title><rect x="20" y="197" width="6" height="15" fill="rgb(207,227,41)"/><text text-anchor="left" x="23.00" y="207.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>schedule (3 samples, 0.53%)</title><rect x="20" y="181" width="6" height="15" fill="rgb(226,76,30)"/><text text-anchor="left" x="23.00" y="191.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>__sched_text_start (3 samples, 0.53%)</title><rect x="20" y="165" width="6" height="15" fill="rgb(206,78,10)"/><text text-anchor="left" x="23.00" y="175.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>finish_task_switch (3 samples, 0.53%)</title><rect x="20" y="149" width="6" height="15" fill="rgb(242,94,34)"/><text text-anchor="left" x="23.00" y="159.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>__perf_event_task_sched_in (3 samples, 0.53%)</title><rect x="20" y="133" width="6" height="15" fill="rgb(223,74,50)"/><text text-anchor="left" x="23.00" y="143.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>__intel_pmu_enable_all.constprop.23 (3 samples, 0.53%)</title><rect x="20" y="117" width="6" height="15" fill="rgb(214,146,52)"/><text text-anchor="left" x="23.00" y="127.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>native_write_msr (3 samples, 0.53%)</title><rect x="20" y="101" width="6" height="15" fill="rgb(248,202,16)"/><text text-anchor="left" x="23.00" y="111.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title><std::time::Instant as core::ops::arith::Sub>::sub (21 samples, 3.69%)</title><rect x="57" y="101" width="44" height="15" fill="rgb(231,186,5)"/><text text-anchor="left" x="60.00" y="111.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"><std..</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>std::sys::unix::time::Timespec::sub_timespec (17 samples, 2.99%)</title><rect x="65" y="85" width="36" height="15" fill="rgb(211,30,33)"/><text text-anchor="left" x="68.00" y="95.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">std..</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>rustperf::one (164 samples, 28.82%)</title><rect x="45" y="117" width="340" height="15" fill="rgb(213,134,24)"/><text text-anchor="left" x="48.00" y="127.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">rustperf::one</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>std::time::Instant::now (137 samples, 24.08%)</title><rect x="101" y="101" width="284" height="15" fill="rgb(232,154,29)"/><text text-anchor="left" x="104.00" y="111.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">std::time::Instant::now</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>__clock_gettime (127 samples, 22.32%)</title><rect x="121" y="85" width="264" height="15" fill="rgb(222,15,24)"/><text text-anchor="left" x="124.00" y="95.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">__clock_gettime</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>__vdso_clock_gettime (108 samples, 18.98%)</title><rect x="161" y="69" width="224" height="15" fill="rgb(242,211,49)"/><text text-anchor="left" x="164.00" y="79.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">__vdso_clock_gettime</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>[[vdso]] (73 samples, 12.83%)</title><rect x="233" y="53" width="152" height="15" fill="rgb(244,220,15)"/><text text-anchor="left" x="236.00" y="63.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">[[vdso]]</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title><std::time::Instant as core::ops::arith::Sub>::sub (38 samples, 6.68%)</title><rect x="385" y="101" width="79" height="15" fill="rgb(214,222,1)"/><text text-anchor="left" x="388.00" y="111.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"><std::tim..</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>std::sys::unix::time::Timespec::sub_timespec (28 samples, 4.92%)</title><rect x="406" y="85" width="58" height="15" fill="rgb(210,27,39)"/><text text-anchor="left" x="409.00" y="95.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">std::s..</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>rustperf::main (371 samples, 65.20%)</title><rect x="26" y="133" width="769" height="15" fill="rgb(205,147,41)"/><text text-anchor="left" x="29.00" y="143.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">rustperf::main</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>rustperf::two (198 samples, 34.80%)</title><rect x="385" y="117" width="410" height="15" fill="rgb(222,120,39)"/><text text-anchor="left" x="388.00" y="127.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">rustperf::two</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>std::time::Instant::now (160 samples, 28.12%)</title><rect x="464" y="101" width="331" height="15" fill="rgb(211,15,23)"/><text text-anchor="left" x="467.00" y="111.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">std::time::Instant::now</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>__clock_gettime (153 samples, 26.89%)</title><rect x="478" y="85" width="317" height="15" fill="rgb(210,32,51)"/><text text-anchor="left" x="481.00" y="95.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">__clock_gettime</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>__vdso_clock_gettime (137 samples, 24.08%)</title><rect x="511" y="69" width="284" height="15" fill="rgb(206,30,22)"/><text text-anchor="left" x="514.00" y="79.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">__vdso_clock_gettime</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>[[vdso]] (92 samples, 16.17%)</title><rect x="605" y="53" width="190" height="15" fill="rgb(225,39,48)"/><text text-anchor="left" x="608.00" y="63.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">[[vdso]]</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title><std::time::Instant as core::ops::arith::Sub>::sub (45 samples, 7.91%)</title><rect x="795" y="117" width="94" height="15" fill="rgb(249,158,4)"/><text text-anchor="left" x="798.00" y="127.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"><std::time:..</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>std::sys::unix::time::Timespec::sub_timespec (33 samples, 5.80%)</title><rect x="820" y="101" width="69" height="15" fill="rgb(231,162,1)"/><text text-anchor="left" x="823.00" y="111.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">std::sy..</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>_start (560 samples, 98.42%)</title><rect x="26" y="245" width="1161" height="15" fill="rgb(217,88,22)"/><text text-anchor="left" x="29.00" y="255.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">_start</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>__libc_start_main (560 samples, 98.42%)</title><rect x="26" y="229" width="1161" height="15" fill="rgb(254,110,49)"/><text text-anchor="left" x="29.00" y="239.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">__libc_start_main</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>main (560 samples, 98.42%)</title><rect x="26" y="213" width="1161" height="15" fill="rgb(218,10,24)"/><text text-anchor="left" x="29.00" y="223.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">main</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>std::rt::lang_start_internal (560 samples, 98.42%)</title><rect x="26" y="197" width="1161" height="15" fill="rgb(214,64,54)"/><text text-anchor="left" x="29.00" y="207.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">std::rt::lang_start_internal</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>__rust_maybe_catch_panic (560 samples, 98.42%)</title><rect x="26" y="181" width="1161" height="15" fill="rgb(217,196,48)"/><text text-anchor="left" x="29.00" y="191.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">__rust_maybe_catch_panic</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>std::panicking::try::do_call (560 samples, 98.42%)</title><rect x="26" y="165" width="1161" height="15" fill="rgb(251,25,30)"/><text text-anchor="left" x="29.00" y="175.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">std::panicking::try::do_call</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>std::rt::lang_start::_$u7b$$u7b$closure$u7d$$u7d$::h80d40c3a4e341551 (560 samples, 98.42%)</title><rect x="26" y="149" width="1161" height="15" fill="rgb(231,93,9)"/><text text-anchor="left" x="29.00" y="159.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">std::rt::lang_start::_$u7b$$u7b$closure$u7d$$u7d$::h80d40c3a4e341551</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>rustperf::one (189 samples, 33.22%)</title><rect x="795" y="133" width="392" height="15" fill="rgb(209,178,53)"/><text text-anchor="left" x="798.00" y="143.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">rustperf::one</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>std::time::Instant::now (144 samples, 25.31%)</title><rect x="889" y="117" width="298" height="15" fill="rgb(218,195,22)"/><text text-anchor="left" x="892.00" y="127.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">std::time::Instant::now</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>__clock_gettime (134 samples, 23.55%)</title><rect x="910" y="101" width="277" height="15" fill="rgb(212,111,51)"/><text text-anchor="left" x="913.00" y="111.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">__clock_gettime</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>__vdso_clock_gettime (121 samples, 21.27%)</title><rect x="936" y="85" width="251" height="15" fill="rgb(208,74,28)"/><text text-anchor="left" x="939.00" y="95.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">__vdso_clock_gettime</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>[[vdso]] (69 samples, 12.13%)</title><rect x="1044" y="69" width="143" height="15" fill="rgb(221,101,25)"/><text text-anchor="left" x="1047.00" y="79.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">[[vdso]]</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>all (569 samples, 100%)</title><rect x="10" y="277" width="1180" height="15" fill="rgb(226,204,4)"/><text text-anchor="left" x="13.00" y="287.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>rustperf (565 samples, 99.30%)</title><rect x="18" y="261" width="1172" height="15" fill="rgb(214,76,50)"/><text text-anchor="left" x="21.00" y="271.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)">rustperf</text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>std::time::Instant::now (1 samples, 0.18%)</title><rect x="1187" y="245" width="3" height="15" fill="rgb(234,48,39)"/><text text-anchor="left" x="1190.00" y="255.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>swapgs_restore_regs_and_return_to_usermode (1 samples, 0.18%)</title><rect x="1187" y="229" width="3" height="15" fill="rgb(232,174,47)"/><text text-anchor="left" x="1190.00" y="239.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>prepare_exit_to_usermode (1 samples, 0.18%)</title><rect x="1187" y="213" width="3" height="15" fill="rgb(238,61,20)"/><text text-anchor="left" x="1190.00" y="223.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>exit_to_usermode_loop (1 samples, 0.18%)</title><rect x="1187" y="197" width="3" height="15" fill="rgb(236,84,0)"/><text text-anchor="left" x="1190.00" y="207.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>schedule (1 samples, 0.18%)</title><rect x="1187" y="181" width="3" height="15" fill="rgb(211,136,6)"/><text text-anchor="left" x="1190.00" y="191.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>__sched_text_start (1 samples, 0.18%)</title><rect x="1187" y="165" width="3" height="15" fill="rgb(240,71,19)"/><text text-anchor="left" x="1190.00" y="175.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>finish_task_switch (1 samples, 0.18%)</title><rect x="1187" y="149" width="3" height="15" fill="rgb(244,9,15)"/><text text-anchor="left" x="1190.00" y="159.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>__perf_event_task_sched_in (1 samples, 0.18%)</title><rect x="1187" y="133" width="3" height="15" fill="rgb(238,41,38)"/><text text-anchor="left" x="1190.00" y="143.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>__intel_pmu_enable_all.constprop.23 (1 samples, 0.18%)</title><rect x="1187" y="117" width="3" height="15" fill="rgb(235,28,45)"/><text text-anchor="left" x="1190.00" y="127.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g><g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)"><title>native_write_msr (1 samples, 0.18%)</title><rect x="1187" y="101" width="3" height="15" fill="rgb(209,15,24)"/><text text-anchor="left" x="1190.00" y="111.50" font-size="12" font-family="Verdana" fill="rgb(0, 0, 0)"></text></g></svg> |