summaryrefslogtreecommitdiffstats
path: root/docs/_static
diff options
context:
space:
mode:
authornicolargo <nicolas@nicolargo.com>2021-08-07 17:29:48 +0200
committernicolargo <nicolas@nicolargo.com>2021-08-07 17:29:48 +0200
commit530bc76f383caad668a2f65a5efaf02a25df5a2d (patch)
tree04032923f9f52626d38e258f4f1db60568bf5adc /docs/_static
parentbdeb414a4c790c10e9ba61089c427372aea9d2b7 (diff)
Update Flame profiling
Diffstat (limited to 'docs/_static')
-rw-r--r--docs/_static/glances-flame.svg81
1 files changed, 37 insertions, 44 deletions
diff --git a/docs/_static/glances-flame.svg b/docs/_static/glances-flame.svg
index 128ee745..6c0c91da 100644
--- a/docs/_static/glances-flame.svg
+++ b/docs/_static/glances-flame.svg
@@ -1,4 +1,4 @@
-<?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="506" onload="init(evt)" viewBox="0 0 1200 506" 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">
+<?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="602" onload="init(evt)" viewBox="0 0 1200 602" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:fg="http://github.com/jonhoo/inferno"><!--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); }
#title { text-anchor:middle; font-size:17px; }
#search { opacity:0.1; cursor:pointer; }
@@ -24,13 +24,14 @@ function init(evt) {
matchedtxt = document.getElementById("matched");
svg = document.getElementsByTagName("svg")[0];
frames = document.getElementById("frames");
+ total_samples = parseInt(frames.attributes.total_samples.value);
searching = 0;
// Use GET parameters to restore a flamegraph's state.
var restore_state = function() {
var params = get_params();
if (params.x && params.y)
- zoom(find_group(document.querySelector('[x="' + params.x + '"][y="' + params.y + '"]')));
+ zoom(find_group(document.querySelector('[*|x="' + params.x + '"][y="' + params.y + '"]')));
if (params.s)
search(params.s);
};
@@ -88,9 +89,9 @@ window.addEventListener("click", function(e) {
// set parameters for zoom state
var el = target.querySelector("rect");
- if (el && el.attributes && el.attributes.y && el.attributes._orig_x) {
+ if (el && el.attributes && el.attributes.y && el.attributes["fg:x"]) {
var params = get_params()
- params.x = el.attributes._orig_x.value;
+ params.x = el.attributes["fg:x"].value;
params.y = el.attributes.y.value;
history.replaceState(null, null, parse_params(params));
}
@@ -158,15 +159,15 @@ function find_group(node) {
return find_group(parent);
}
function orig_save(e, attr, val) {
- if (e.attributes["_orig_" + attr] != undefined) return;
+ if (e.attributes["fg:orig_" + attr] != undefined) return;
if (e.attributes[attr] == undefined) return;
if (val == undefined) val = e.attributes[attr].value;
- e.setAttribute("_orig_" + attr, val);
+ e.setAttribute("fg: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);
+ if (e.attributes["fg:orig_"+attr] == undefined) return;
+ e.attributes[attr].value = e.attributes["fg:orig_" + attr].value;
+ e.removeAttribute("fg:orig_" + attr);
}
function g_to_text(e) {
var text = find_child(e, "title").firstChild.nodeValue;
@@ -214,42 +215,34 @@ function update_text(e) {
}
// zoom
function zoom_reset(e) {
- if (e.attributes != undefined) {
- orig_load(e, "x");
- orig_load(e, "width");
+ if (e.tagName == "rect") {
+ e.attributes.x.value = format_percent(100 * parseInt(e.attributes["fg:x"].value) / total_samples);
+ e.attributes.width.value = format_percent(100 * parseInt(e.attributes["fg:w"].value) / total_samples);
}
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 = format_percent((parseFloat(e.attributes.x.value) - x) * ratio);
- if (e.tagName == "text") {
- e.attributes.x.value = format_percent(parseFloat(find_child(e.parentNode, "rect[x]").attributes.x.value) + (100 * 3 / frames.attributes.width.value));
- }
- }
- if (e.attributes.width != undefined) {
- orig_save(e, "width");
- e.attributes.width.value = format_percent(parseFloat(e.attributes.width.value) * ratio);
- }
+function zoom_child(e, x, zoomed_width_samples) {
+ if (e.tagName == "text") {
+ var parent_x = parseFloat(find_child(e.parentNode, "rect[x]").attributes.x.value);
+ e.attributes.x.value = format_percent(parent_x + (100 * 3 / frames.attributes.width.value));
+ } else if (e.tagName == "rect") {
+ e.attributes.x.value = format_percent(100 * (parseInt(e.attributes["fg:x"].value) - x) / zoomed_width_samples);
+ e.attributes.width.value = format_percent(100 * parseInt(e.attributes["fg:w"].value) / zoomed_width_samples);
}
if (e.childNodes == undefined) return;
for(var i = 0, c = e.childNodes; i < c.length; i++) {
- zoom_child(c[i], x, ratio);
+ zoom_child(c[i], x, zoomed_width_samples);
}
}
function zoom_parent(e) {
if (e.attributes) {
if (e.attributes.x != undefined) {
- orig_save(e, "x");
e.attributes.x.value = "0.0%";
}
if (e.attributes.width != undefined) {
- orig_save(e, "width");
e.attributes.width.value = "100.0%";
}
}
@@ -260,20 +253,17 @@ function zoom_parent(e) {
}
function zoom(node) {
var attr = find_child(node, "rect").attributes;
- var width = parseFloat(attr.width.value);
- var xmin = parseFloat(attr.x.value);
+ var width = parseInt(attr["fg:w"].value);
+ var xmin = parseInt(attr["fg:x"].value);
var xmax = xmin + width;
var ymin = parseFloat(attr.y.value);
- var ratio = 100 / width;
- // XXX: Workaround for JavaScript float issues (fix me)
- var fudge = 0.001;
unzoombtn.classList.remove("hide");
var el = 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 ex = parseInt(a["fg:x"].value);
+ var ew = parseInt(a["fg:w"].value);
// Is it an ancestor
if (!inverted) {
var upstack = parseFloat(a.y.value) > ymin;
@@ -282,7 +272,7 @@ function zoom(node) {
}
if (upstack) {
// Direct ancestor
- if (ex <= xmin && (ex+ew+fudge) >= xmax) {
+ if (ex <= xmin && (ex+ew) >= xmax) {
e.classList.add("parent");
zoom_parent(e);
update_text(e);
@@ -294,11 +284,11 @@ function zoom(node) {
// Children maybe
else {
// no common path
- if (ex < xmin || ex + fudge >= xmax) {
+ if (ex < xmin || ex >= xmax) {
e.classList.add("hide");
}
else {
- zoom_child(e, xmin, ratio);
+ zoom_child(e, xmin, width);
update_text(e);
}
}
@@ -347,17 +337,21 @@ function search(term) {
var maxwidth = 0;
for (var i = 0; i < el.length; i++) {
var e = el[i];
+ // Skip over frames which are either not visible, or below the zoomed-to frame
+ if (e.classList.contains("hide") || e.classList.contains("parent")) {
+ continue;
+ }
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);
+ var w = parseInt(rect.attributes["fg:w"].value);
if (w > maxwidth)
maxwidth = w;
if (func.match(re)) {
// highlight
- var x = parseFloat(rect.attributes.x.value);
+ var x = parseInt(rect.attributes["fg:x"].value);
orig_save(rect, "fill");
rect.attributes.fill.value = searchcolor;
// remember matches
@@ -397,11 +391,10 @@ function search(term) {
// 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 x = parseInt(keys[k]);
var w = matches[keys[k]];
- if (x >= lastx + lastw - fudge) {
+ if (x >= lastx + lastw) {
count += w;
lastx = x;
lastw = w;
@@ -416,4 +409,4 @@ function search(term) {
function format_percent(n) {
return n.toFixed(4) + "%";
}
-]]></script><rect x="0" y="0" width="100%" height="506" fill="url(#background)"/><text id="title" x="50.0000%" y="24.00">./venv/bin/py-spy record -o ./docs/_static/glances-flame.svg -d 60 -s --pid 2656063</text><text id="details" x="10" y="40.00"> </text><text id="unzoom" class="hide" x="10" y="24.00">Reset Zoom</text><text id="search" x="1090" y="24.00">Search</text><text id="matched" x="1090" y="495.00"> </text><svg id="frames" x="10" width="1180"><g><title>_bootstrap (threading.py:890) (2 samples, 0.36%)</title><rect x="0.0000%" y="84" width="0.3636%" height="15" fill="rgb(227,0,7)"/><text x="0.2500%" y="94.50"></text></g><g><title>_bootstrap_inner (threading.py:932) (2 samples, 0.36%)</title><rect x="0.0000%" y="100" width="0.3636%" height="15" fill="rgb(217,0,24)"/><text x="0.2500%" y="110.50"></text></g><g><title>run (glances/plugins/glances_ports.py:246) (2 samples, 0.36%)</title><rect x="0.0000%" y="116" width="0.3636%" height="15" fill="rgb(221,193,54)"/><text x="0.2500%" y="126.50"></text></g><g><title>update (glances/plugins/glances_diskio.py:106) (1 samples, 0.18%)</title><rect x="0.5455%" y="244" width="0.1818%" height="15" fill="rgb(248,212,6)"/><text x="0.7955%" y="254.50"></text></g><g><title>is_hide (glances/plugins/glances_plugin.py:869) (1 samples, 0.18%)</title><rect x="0.5455%" y="260" width="0.1818%" height="15" fill="rgb(208,68,35)"/><text x="0.7955%" y="270.50"></text></g><g><title>&lt;listcomp&gt; (glances/plugins/glances_plugin.py:869) (1 samples, 0.18%)</title><rect x="0.5455%" y="276" width="0.1818%" height="15" fill="rgb(232,128,0)"/><text x="0.7955%" y="286.50"></text></g><g><title>match (re.py:191) (1 samples, 0.18%)</title><rect x="0.5455%" y="292" width="0.1818%" height="15" fill="rgb(207,160,47)"/><text x="0.7955%" y="302.50"></text></g><g><title>disk_io_counters (psutil/__init__.py:2059) (2 samples, 0.36%)</title><rect x="0.7273%" y="260" width="0.3636%" height="15" fill="rgb(228,23,34)"/><text x="0.9773%" y="270.50"></text></g><g><title>disk_io_counters (psutil/_pslinux.py:1166) (2 samples, 0.36%)</title><rect x="0.7273%" y="276" width="0.3636%" height="15" fill="rgb(218,30,26)"/><text x="0.9773%" y="286.50"></text></g><g><title>read_procfs (psutil/_pslinux.py:1118) (2 samples, 0.36%)</title><rect x="0.7273%" y="292" width="0.3636%" height="15" fill="rgb(220,122,19)"/><text x="0.9773%" y="302.50"></text></g><g><title>run (psutil/_common.py:648) (1 samples, 0.18%)</title><rect x="1.0909%" y="292" width="0.1818%" height="15" fill="rgb(250,228,42)"/><text x="1.3409%" y="302.50"></text></g><g><title>_remove_dead_reminders (psutil/_common.py:632) (1 samples, 0.18%)</title><rect x="1.0909%" y="308" width="0.1818%" height="15" fill="rgb(240,193,28)"/><text x="1.3409%" y="318.50"></text></g><g><title>run (psutil/_common.py:667) (1 samples, 0.18%)</title><rect x="1.2727%" y="292" width="0.1818%" height="15" fill="rgb(216,20,37)"/><text x="1.5227%" y="302.50"></text></g><g><title>disk_io_counters (psutil/__init__.py:2063) (5 samples, 0.91%)</title><rect x="1.0909%" y="260" width="0.9091%" height="15" fill="rgb(206,188,39)"/><text x="1.3409%" y="270.50"></text></g><g><title>wrap_numbers (psutil/_common.py:702) (5 samples, 0.91%)</title><rect x="1.0909%" y="276" width="0.9091%" height="15" fill="rgb(217,207,13)"/><text x="1.3409%" y="286.50"></text></g><g><title>run (psutil/_common.py:671) (3 samples, 0.55%)</title><rect x="1.4545%" y="292" width="0.5455%" height="15" fill="rgb(231,73,38)"/><text x="1.7045%" y="302.50"></text></g><g><title>update (glances/plugins/glances_diskio.py:89) (8 samples, 1.45%)</title><rect x="0.7273%" y="244" width="1.4545%" height="15" fill="rgb(225,20,46)"/><text x="0.9773%" y="254.50"></text></g><g><title>disk_io_counters (psutil/__init__.py:2067) (1 samples, 0.18%)</title><rect x="2.0000%" y="260" width="0.1818%" height="15" fill="rgb(210,31,41)"/><text x="2.2500%" y="270.50"></text></g><g><title>get_environ_proxies (requests/utils.py:776) (1 samples, 0.18%)</title><rect x="2.1818%" y="372" width="0.1818%" height="15" fill="rgb(221,200,47)"/><text x="2.4318%" y="382.50"></text></g><g><title>should_bypass_proxies (requests/utils.py:760) (1 samples, 0.18%)</title><rect x="2.1818%" y="388" width="0.1818%" height="15" fill="rgb(226,26,5)"/><text x="2.4318%" y="398.50"></text></g><g><title>proxy_bypass_environment (urllib/request.py:2529) (1 samples, 0.18%)</title><rect x="2.1818%" y="404" width="0.1818%" height="15" fill="rgb(249,33,26)"/><text x="2.4318%" y="414.50"></text></g><g><title>getproxies_environment (urllib/request.py:2512) (1 samples, 0.18%)</title><rect x="2.1818%" y="420" width="0.1818%" height="15" fill="rgb(235,183,28)"/><text x="2.4318%" y="430.50"></text></g><g><title>__iter__ (_collections_abc.py:743) (1 samples, 0.18%)</title><rect x="2.1818%" y="436" width="0.1818%" height="15" fill="rgb(221,5,38)"/><text x="2.4318%" y="446.50"></text></g><g><title>__iter__ (os.py:697) (1 samples, 0.18%)</title><rect x="2.1818%" y="452" width="0.1818%" height="15" fill="rgb(247,18,42)"/><text x="2.4318%" y="462.50"></text></g><g><title>decode (os.py:753) (1 samples, 0.18%)</title><rect x="2.1818%" y="468" width="0.1818%" height="15" fill="rgb(241,131,45)"/><text x="2.4318%" y="478.50"></text></g><g><title>request (requests/sessions.py:532) (2 samples, 0.36%)</title><rect x="2.1818%" y="340" width="0.3636%" height="15" fill="rgb(249,31,29)"/><text x="2.4318%" y="350.50"></text></g><g><title>merge_environment_settings (requests/sessions.py:711) (2 samples, 0.36%)</title><rect x="2.1818%" y="356" width="0.3636%" height="15" fill="rgb(225,111,53)"/><text x="2.4318%" y="366.50"></text></g><g><title>get_environ_proxies (requests/utils.py:779) (1 samples, 0.18%)</title><rect x="2.3636%" y="372" width="0.1818%" height="15" fill="rgb(238,160,17)"/><text x="2.6136%" y="382.50"></text></g><g><title>getproxies_environment (urllib/request.py:2502) (1 samples, 0.18%)</title><rect x="2.3636%" y="388" width="0.1818%" height="15" fill="rgb(214,148,48)"/><text x="2.6136%" y="398.50"></text></g><g><title>__iter__ (_collections_abc.py:743) (1 samples, 0.18%)</title><rect x="2.3636%" y="404" width="0.1818%" height="15" fill="rgb(232,36,49)"/><text x="2.6136%" y="414.50"></text></g><g><title>update (glances/plugins/glances_docker.py:186) (3 samples, 0.55%)</title><rect x="2.1818%" y="244" width="0.5455%" height="15" fill="rgb(209,103,24)"/><text x="2.4318%" y="254.50"></text></g><g><title>version (docker/client.py:207) (3 samples, 0.55%)</title><rect x="2.1818%" y="260" width="0.5455%" height="15" fill="rgb(229,88,8)"/><text x="2.4318%" y="270.50"></text></g><g><title>version (docker/api/daemon.py:181) (3 samples, 0.55%)</title><rect x="2.1818%" y="276" width="0.5455%" height="15" fill="rgb(213,181,19)"/><text x="2.4318%" y="286.50"></text></g><g><title>inner (docker/utils/decorators.py:46) (3 samples, 0.55%)</title><rect x="2.1818%" y="292" width="0.5455%" height="15" fill="rgb(254,191,54)"/><text x="2.4318%" y="302.50"></text></g><g><title>_get (docker/api/client.py:237) (3 samples, 0.55%)</title><rect x="2.1818%" y="308" width="0.5455%" height="15" fill="rgb(241,83,37)"/><text x="2.4318%" y="318.50"></text></g><g><title>get (requests/sessions.py:555) (3 samples, 0.55%)</title><rect x="2.1818%" y="324" width="0.5455%" height="15" fill="rgb(233,36,39)"/><text x="2.4318%" y="334.50"></text></g><g><title>request (requests/sessions.py:542) (1 samples, 0.18%)</title><rect x="2.5455%" y="340" width="0.1818%" height="15" fill="rgb(226,3,54)"/><text x="2.7955%" y="350.50"></text></g><g><title>send (requests/sessions.py:655) (1 samples, 0.18%)</title><rect x="2.5455%" y="356" width="0.1818%" height="15" fill="rgb(245,192,40)"/><text x="2.7955%" y="366.50"></text></g><g><title>send (requests/adapters.py:439) (1 samples, 0.18%)</title><rect x="2.5455%" y="372" width="0.1818%" height="15" fill="rgb(238,167,29)"/><text x="2.7955%" y="382.50"></text></g><g><title>urlopen (urllib3/connectionpool.py:699) (1 samples, 0.18%)</title><rect x="2.5455%" y="388" width="0.1818%" height="15" fill="rgb(232,182,51)"/><text x="2.7955%" y="398.50"></text></g><g><title>_make_request (urllib3/connectionpool.py:440) (1 samples, 0.18%)</title><rect x="2.5455%" y="404" width="0.1818%" height="15" fill="rgb(231,60,39)"/><text x="2.7955%" y="414.50"></text></g><g><title>getresponse (http/client.py:1347) (1 samples, 0.18%)</title><rect x="2.5455%" y="420" width="0.1818%" height="15" fill="rgb(208,69,12)"/><text x="2.7955%" y="430.50"></text></g><g><title>begin (http/client.py:338) (1 samples, 0.18%)</title><rect x="2.5455%" y="436" width="0.1818%" height="15" fill="rgb(235,93,37)"/><text x="2.7955%" y="446.50"></text></g><g><title>get (email/message.py:470) (1 samples, 0.18%)</title><rect x="2.5455%" y="452" width="0.1818%" height="15" fill="rgb(213,116,39)"/><text x="2.7955%" y="462.50"></text></g><g><title>update (glances/plugins/glances_ip.py:85) (1 samples, 0.18%)</title><rect x="2.7273%" y="244" width="0.1818%" height="15" fill="rgb(222,207,29)"/><text x="2.9773%" y="254.50"></text></g><g><title>update (glances/plugins/glances_ip.py:86) (4 samples, 0.73%)</title><rect x="2.9091%" y="244" width="0.7273%" height="15" fill="rgb(206,96,30)"/><text x="3.1591%" y="254.50"></text></g><g><title>update (glances/plugins/glances_ip.py:88) (2 samples, 0.36%)</title><rect x="3.6364%" y="244" width="0.3636%" height="15" fill="rgb(218,138,4)"/><text x="3.8864%" y="254.50"></text></g><g><title>update (glances/plugins/glances_mem.py:82) (1 samples, 0.18%)</title><rect x="4.0000%" y="244" width="0.1818%" height="15" fill="rgb(250,191,14)"/><text x="4.2500%" y="254.50"></text></g><g><title>virtual_memory (psutil/__init__.py:1963) (1 samples, 0.18%)</title><rect x="4.0000%" y="260" width="0.1818%" height="15" fill="rgb(239,60,40)"/><text x="4.2500%" y="270.50"></text></g><g><title>virtual_memory (psutil/_pslinux.py:435) (1 samples, 0.18%)</title><rect x="4.0000%" y="276" width="0.1818%" height="15" fill="rgb(206,27,48)"/><text x="4.2500%" y="286.50"></text></g><g><title>update (glances/plugins/glances_percpu.py:65) (1 samples, 0.18%)</title><rect x="4.1818%" y="244" width="0.1818%" height="15" fill="rgb(225,35,8)"/><text x="4.4318%" y="254.50"></text></g><g><title>process_iter (psutil/__init__.py:1425) (1 samples, 0.18%)</title><rect x="4.3636%" y="292" width="0.1818%" height="15" fill="rgb(250,213,24)"/><text x="4.6136%" y="302.50"></text></g><g><title>pids (psutil/__init__.py:1365) (1 samples, 0.18%)</title><rect x="4.3636%" y="308" width="0.1818%" height="15" fill="rgb(247,123,22)"/><text x="4.6136%" y="318.50"></text></g><g><title>pids (psutil/_pslinux.py:1512) (1 samples, 0.18%)</title><rect x="4.3636%" y="324" width="0.1818%" height="15" fill="rgb(231,138,38)"/><text x="4.6136%" y="334.50"></text></g><g><title>&lt;listcomp&gt; (psutil/_pslinux.py:1512) (1 samples, 0.18%)</title><rect x="4.3636%" y="340" width="0.1818%" height="15" fill="rgb(231,145,46)"/><text x="4.6136%" y="350.50"></text></g><g><title>is_running (psutil/__init__.py:568) (1 samples, 0.18%)</title><rect x="4.5455%" y="308" width="0.1818%" height="15" fill="rgb(251,118,11)"/><text x="4.7955%" y="318.50"></text></g><g><title>_init (psutil/__init__.py:337) (1 samples, 0.18%)</title><rect x="5.2727%" y="340" width="0.1818%" height="15" fill="rgb(217,147,25)"/><text x="5.5227%" y="350.50"></text></g><g><title>_init (psutil/__init__.py:341) (1 samples, 0.18%)</title><rect x="5.4545%" y="340" width="0.1818%" height="15" fill="rgb(247,81,37)"/><text x="5.7045%" y="350.50"></text></g><g><title>_init (psutil/__init__.py:342) (1 samples, 0.18%)</title><rect x="5.6364%" y="340" width="0.1818%" height="15" fill="rgb(209,12,38)"/><text x="5.8864%" y="350.50"></text></g><g><title>_init (psutil/__init__.py:345) (1 samples, 0.18%)</title><rect x="5.8182%" y="340" width="0.1818%" height="15" fill="rgb(227,1,9)"/><text x="6.0682%" y="350.50"></text></g><g><title>_init (psutil/__init__.py:348) (1 samples, 0.18%)</title><rect x="6.0000%" y="340" width="0.1818%" height="15" fill="rgb(248,47,43)"/><text x="6.2500%" y="350.50"></text></g><g><title>__init__ (psutil/_pslinux.py:1599) (1 samples, 0.18%)</title><rect x="6.0000%" y="356" width="0.1818%" height="15" fill="rgb(221,10,30)"/><text x="6.2500%" y="366.50"></text></g><g><title>get_procfs_path (psutil/_common.py:750) (1 samples, 0.18%)</title><rect x="6.0000%" y="372" width="0.1818%" height="15" fill="rgb(210,229,1)"/><text x="6.2500%" y="382.50"></text></g><g><title>_parse_stat_file (psutil/_pslinux.py:1618) (10 samples, 1.82%)</title><rect x="6.5455%" y="436" width="1.8182%" height="15" fill="rgb(222,148,37)"/><text x="6.7955%" y="446.50">_..</text></g><g><title>open_binary (psutil/_common.py:711) (10 samples, 1.82%)</title><rect x="6.5455%" y="452" width="1.8182%" height="15" fill="rgb(234,67,33)"/><text x="6.7955%" y="462.50">o..</text></g><g><title>create_time (psutil/_pslinux.py:1788) (29 samples, 5.27%)</title><rect x="6.1818%" y="388" width="5.2727%" height="15" fill="rgb(247,98,35)"/><text x="6.4318%" y="398.50">create..</text></g><g><title>wrapper (psutil/_pslinux.py:1576) (29 samples, 5.27%)</title><rect x="6.1818%" y="404" width="5.2727%" height="15" fill="rgb(247,138,52)"/><text x="6.4318%" y="414.50">wrappe..</text></g><g><title>wrapper (psutil/_common.py:450) (28 samples, 5.09%)</title><rect x="6.3636%" y="420" width="5.0909%" height="15" fill="rgb(213,79,30)"/><text x="6.6136%" y="430.50">wrappe..</text></g><g><title>_parse_stat_file (psutil/_pslinux.py:1619) (17 samples, 3.09%)</title><rect x="8.3636%" y="436" width="3.0909%" height="15" fill="rgb(246,177,23)"/><text x="8.6136%" y="446.50">_pa..</text></g><g><title>_init (psutil/__init__.py:354) (30 samples, 5.45%)</title><rect x="6.1818%" y="340" width="5.4545%" height="15" fill="rgb(230,62,27)"/><text x="6.4318%" y="350.50">_init (..</text></g><g><title>create_time (psutil/__init__.py:710) (30 samples, 5.45%)</title><rect x="6.1818%" y="356" width="5.4545%" height="15" fill="rgb(216,154,8)"/><text x="6.4318%" y="366.50">create_..</text></g><g><title>wrapper (psutil/_pslinux.py:1576) (30 samples, 5.45%)</title><rect x="6.1818%" y="372" width="5.4545%" height="15" fill="rgb(244,35,45)"/><text x="6.4318%" y="382.50">wrapper..</text></g><g><title>create_time (psutil/_pslinux.py:1794) (1 samples, 0.18%)</title><rect x="11.4545%" y="388" width="0.1818%" height="15" fill="rgb(251,115,12)"/><text x="11.7045%" y="398.50"></text></g><g><title>process_iter (psutil/__init__.py:1443) (40 samples, 7.27%)</title><rect x="4.5455%" y="292" width="7.2727%" height="15" fill="rgb(240,54,50)"/><text x="4.7955%" y="302.50">process_it..</text></g><g><title>is_running (psutil/__init__.py:581) (39 samples, 7.09%)</title><rect x="4.7273%" y="308" width="7.0909%" height="15" fill="rgb(233,84,52)"/><text x="4.9773%" y="318.50">is_running..</text></g><g><title>__init__ (psutil/__init__.py:326) (37 samples, 6.73%)</title><rect x="5.0909%" y="324" width="6.7273%" height="15" fill="rgb(207,117,47)"/><text x="5.3409%" y="334.50">__init__ ..</text></g><g><title>_init (psutil/__init__.py:374) (1 samples, 0.18%)</title><rect x="11.6364%" y="340" width="0.1818%" height="15" fill="rgb(249,43,39)"/><text x="11.8864%" y="350.50"></text></g><g><title>process_iter (psutil/__init__.py:1444) (2 samples, 0.36%)</title><rect x="11.8182%" y="292" width="0.3636%" height="15" fill="rgb(209,38,44)"/><text x="12.0682%" y="302.50"></text></g><g><title>as_dict (psutil/__init__.py:505) (1 samples, 0.18%)</title><rect x="12.3636%" y="308" width="0.1818%" height="15" fill="rgb(236,212,23)"/><text x="12.6136%" y="318.50"></text></g><g><title>as_dict (psutil/__init__.py:509) (1 samples, 0.18%)</title><rect x="12.5455%" y="308" width="0.1818%" height="15" fill="rgb(242,79,21)"/><text x="12.7955%" y="318.50"></text></g><g><title>as_dict (psutil/__init__.py:511) (1 samples, 0.18%)</title><rect x="12.7273%" y="308" width="0.1818%" height="15" fill="rgb(211,96,35)"/><text x="12.9773%" y="318.50"></text></g><g><title>__enter__ (contextlib.py:111) (1 samples, 0.18%)</title><rect x="13.0909%" y="324" width="0.1818%" height="15" fill="rgb(253,215,40)"/><text x="13.3409%" y="334.50"></text></g><g><title>oneshot (psutil/__init__.py:475) (2 samples, 0.36%)</title><rect x="13.2727%" y="340" width="0.3636%" height="15" fill="rgb(211,81,21)"/><text x="13.5227%" y="350.50"></text></g><g><title>__enter__ (contextlib.py:113) (5 samples, 0.91%)</title><rect x="13.2727%" y="324" width="0.9091%" height="15" fill="rgb(208,190,38)"/><text x="13.5227%" y="334.50"></text></g><g><title>oneshot (psutil/__init__.py:484) (3 samples, 0.55%)</title><rect x="13.6364%" y="340" width="0.5455%" height="15" fill="rgb(235,213,38)"/><text x="13.8864%" y="350.50"></text></g><g><title>oneshot_enter (psutil/_pslinux.py:1662) (3 samples, 0.55%)</title><rect x="13.6364%" y="356" width="0.5455%" height="15" fill="rgb(237,122,38)"/><text x="13.8864%" y="366.50"></text></g><g><title>cache_activate (psutil/_common.py:457) (1 samples, 0.18%)</title><rect x="14.0000%" y="372" width="0.1818%" height="15" fill="rgb(244,218,35)"/><text x="14.2500%" y="382.50"></text></g><g><title>as_dict (psutil/__init__.py:518) (8 samples, 1.45%)</title><rect x="12.9091%" y="308" width="1.4545%" height="15" fill="rgb(240,68,47)"/><text x="13.1591%" y="318.50"></text></g><g><title>helper (contextlib.py:240) (1 samples, 0.18%)</title><rect x="14.1818%" y="324" width="0.1818%" height="15" fill="rgb(210,16,53)"/><text x="14.4318%" y="334.50"></text></g><g><title>as_dict (psutil/__init__.py:519) (1 samples, 0.18%)</title><rect x="14.3636%" y="308" width="0.1818%" height="15" fill="rgb(235,124,12)"/><text x="14.6136%" y="318.50"></text></g><g><title>as_dict (psutil/__init__.py:522) (1 samples, 0.18%)</title><rect x="14.5455%" y="308" width="0.1818%" height="15" fill="rgb(224,169,11)"/><text x="14.7955%" y="318.50"></text></g><g><title>pid (psutil/__init__.py:423) (1 samples, 0.18%)</title><rect x="14.5455%" y="324" width="0.1818%" height="15" fill="rgb(250,166,2)"/><text x="14.7955%" y="334.50"></text></g><g><title>as_dict (psutil/__init__.py:524) (2 samples, 0.36%)</title><rect x="14.7273%" y="308" width="0.3636%" height="15" fill="rgb(242,216,29)"/><text x="14.9773%" y="318.50"></text></g><g><title>cmdline (psutil/_pslinux.py:1696) (1 samples, 0.18%)</title><rect x="15.6364%" y="356" width="0.1818%" height="15" fill="rgb(230,116,27)"/><text x="15.8864%" y="366.50"></text></g><g><title>open_text (psutil/_common.py:725) (1 samples, 0.18%)</title><rect x="15.6364%" y="372" width="0.1818%" height="15" fill="rgb(228,99,48)"/><text x="15.8864%" y="382.50"></text></g><g><title>cmdline (psutil/__init__.py:677) (3 samples, 0.55%)</title><rect x="15.4545%" y="324" width="0.5455%" height="15" fill="rgb(253,11,6)"/><text x="15.7045%" y="334.50"></text></g><g><title>wrapper (psutil/_pslinux.py:1576) (3 samples, 0.55%)</title><rect x="15.4545%" y="340" width="0.5455%" height="15" fill="rgb(247,143,39)"/><text x="15.7045%" y="350.50"></text></g><g><title>cmdline (psutil/_pslinux.py:1715) (1 samples, 0.18%)</title><rect x="15.8182%" y="356" width="0.1818%" height="15" fill="rgb(236,97,10)"/><text x="16.0682%" y="366.50"></text></g><g><title>cpu_percent (psutil/__init__.py:1007) (1 samples, 0.18%)</title><rect x="16.0000%" y="324" width="0.1818%" height="15" fill="rgb(233,208,19)"/><text x="16.2500%" y="334.50"></text></g><g><title>cpu_percent (psutil/__init__.py:1032) (2 samples, 0.36%)</title><rect x="16.1818%" y="324" width="0.3636%" height="15" fill="rgb(216,164,2)"/><text x="16.4318%" y="334.50"></text></g><g><title>cpu_percent (psutil/__init__.py:980) (1 samples, 0.18%)</title><rect x="16.5455%" y="324" width="0.1818%" height="15" fill="rgb(220,129,5)"/><text x="16.7955%" y="334.50"></text></g><g><title>cpu_count (psutil/__init__.py:1576) (1 samples, 0.18%)</title><rect x="16.5455%" y="340" width="0.1818%" height="15" fill="rgb(242,17,10)"/><text x="16.7955%" y="350.50"></text></g><g><title>cpu_count_logical (psutil/_pslinux.py:633) (1 samples, 0.18%)</title><rect x="16.5455%" y="356" width="0.1818%" height="15" fill="rgb(242,107,0)"/><text x="16.7955%" y="366.50"></text></g><g><title>cpu_percent (psutil/__init__.py:995) (1 samples, 0.18%)</title><rect x="16.7273%" y="324" width="0.1818%" height="15" fill="rgb(251,28,31)"/><text x="16.9773%" y="334.50"></text></g><g><title>wrapper (psutil/_pslinux.py:1576) (1 samples, 0.18%)</title><rect x="16.7273%" y="340" width="0.1818%" height="15" fill="rgb(233,223,10)"/><text x="16.9773%" y="350.50"></text></g><g><title>cpu_times (psutil/_pslinux.py:1775) (1 samples, 0.18%)</title><rect x="16.7273%" y="356" width="0.1818%" height="15" fill="rgb(215,21,27)"/><text x="16.9773%" y="366.50"></text></g><g><title>cpu_percent (psutil/__init__.py:996) (1 samples, 0.18%)</title><rect x="16.9091%" y="324" width="0.1818%" height="15" fill="rgb(232,23,21)"/><text x="17.1591%" y="334.50"></text></g><g><title>gids (psutil/_pslinux.py:2152) (1 samples, 0.18%)</title><rect x="17.2727%" y="356" width="0.1818%" height="15" fill="rgb(244,5,23)"/><text x="17.5227%" y="366.50"></text></g><g><title>gids (psutil/_pslinux.py:2153) (3 samples, 0.55%)</title><rect x="17.4545%" y="356" width="0.5455%" height="15" fill="rgb(226,81,46)"/><text x="17.7045%" y="366.50"></text></g><g><title>gids (psutil/__init__.py:739) (6 samples, 1.09%)</title><rect x="17.0909%" y="324" width="1.0909%" height="15" fill="rgb(247,70,30)"/><text x="17.3409%" y="334.50"></text></g><g><title>wrapper (psutil/_pslinux.py:1576) (5 samples, 0.91%)</title><rect x="17.2727%" y="340" width="0.9091%" height="15" fill="rgb(212,68,19)"/><text x="17.5227%" y="350.50"></text></g><g><title>gids (psutil/_pslinux.py:2154) (1 samples, 0.18%)</title><rect x="18.0000%" y="356" width="0.1818%" height="15" fill="rgb(240,187,13)"/><text x="18.2500%" y="366.50"></text></g><g><title>io_counters (psutil/_pslinux.py:1740) (5 samples, 0.91%)</title><rect x="18.3636%" y="356" width="0.9091%" height="15" fill="rgb(223,113,26)"/><text x="18.6136%" y="366.50"></text></g><g><title>open_binary (psutil/_common.py:711) (5 samples, 0.91%)</title><rect x="18.3636%" y="372" width="0.9091%" height="15" fill="rgb(206,192,2)"/><text x="18.6136%" y="382.50"></text></g><g><title>io_counters (psutil/_pslinux.py:1741) (3 samples, 0.55%)</title><rect x="19.2727%" y="356" width="0.5455%" height="15" fill="rgb(241,108,4)"/><text x="19.5227%" y="366.50"></text></g><g><title>io_counters (psutil/_pslinux.py:1744) (1 samples, 0.18%)</title><rect x="19.8182%" y="356" width="0.1818%" height="15" fill="rgb(247,173,49)"/><text x="20.0682%" y="366.50"></text></g><g><title>wrapper (psutil/_pslinux.py:1576) (12 samples, 2.18%)</title><rect x="18.1818%" y="340" width="2.1818%" height="15" fill="rgb(224,114,35)"/><text x="18.4318%" y="350.50">w..</text></g><g><title>io_counters (psutil/_pslinux.py:1751) (2 samples, 0.36%)</title><rect x="20.0000%" y="356" width="0.3636%" height="15" fill="rgb(245,159,27)"/><text x="20.2500%" y="366.50"></text></g><g><title>__init__ (psutil/_common.py:279) (1 samples, 0.18%)</title><rect x="21.0909%" y="372" width="0.1818%" height="15" fill="rgb(245,172,44)"/><text x="21.3409%" y="382.50"></text></g><g><title>__init__ (psutil/_common.py:338) (3 samples, 0.55%)</title><rect x="20.9091%" y="356" width="0.5455%" height="15" fill="rgb(236,23,11)"/><text x="21.1591%" y="366.50"></text></g><g><title>__init__ (psutil/_common.py:280) (1 samples, 0.18%)</title><rect x="21.2727%" y="372" width="0.1818%" height="15" fill="rgb(205,117,38)"/><text x="21.5227%" y="382.50"></text></g><g><title>io_counters (psutil/__init__.py:763) (19 samples, 3.45%)</title><rect x="18.1818%" y="324" width="3.4545%" height="15" fill="rgb(237,72,25)"/><text x="18.4318%" y="334.50">io_..</text></g><g><title>wrapper (psutil/_pslinux.py:1578) (7 samples, 1.27%)</title><rect x="20.3636%" y="340" width="1.2727%" height="15" fill="rgb(244,70,9)"/><text x="20.6136%" y="350.50"></text></g><g><title>__init__ (psutil/_common.py:344) (1 samples, 0.18%)</title><rect x="21.4545%" y="356" width="0.1818%" height="15" fill="rgb(217,125,39)"/><text x="21.7045%" y="366.50"></text></g><g><title>memory_percent (psutil/__init__.py:1103) (1 samples, 0.18%)</title><rect x="21.6364%" y="324" width="0.1818%" height="15" fill="rgb(235,36,10)"/><text x="21.8864%" y="334.50"></text></g><g><title>name (psutil/__init__.py:617) (3 samples, 0.55%)</title><rect x="21.8182%" y="324" width="0.5455%" height="15" fill="rgb(251,123,47)"/><text x="22.0682%" y="334.50"></text></g><g><title>wrapper (psutil/_pslinux.py:1576) (3 samples, 0.55%)</title><rect x="21.8182%" y="340" width="0.5455%" height="15" fill="rgb(221,13,13)"/><text x="22.0682%" y="350.50"></text></g><g><title>name (psutil/__init__.py:618) (1 samples, 0.18%)</title><rect x="22.3636%" y="324" width="0.1818%" height="15" fill="rgb(238,131,9)"/><text x="22.6136%" y="334.50"></text></g><g><title>cmdline (psutil/_pslinux.py:1696) (3 samples, 0.55%)</title><rect x="22.7273%" y="372" width="0.5455%" height="15" fill="rgb(211,50,8)"/><text x="22.9773%" y="382.50"></text></g><g><title>open_text (psutil/_common.py:725) (3 samples, 0.55%)</title><rect x="22.7273%" y="388" width="0.5455%" height="15" fill="rgb(245,182,24)"/><text x="22.9773%" y="398.50"></text></g><g><title>name (psutil/__init__.py:624) (6 samples, 1.09%)</title><rect x="22.5455%" y="324" width="1.0909%" height="15" fill="rgb(242,14,37)"/><text x="22.7955%" y="334.50"></text></g><g><title>cmdline (psutil/__init__.py:677) (6 samples, 1.09%)</title><rect x="22.5455%" y="340" width="1.0909%" height="15" fill="rgb(246,228,12)"/><text x="22.7955%" y="350.50"></text></g><g><title>wrapper (psutil/_pslinux.py:1576) (6 samples, 1.09%)</title><rect x="22.5455%" y="356" width="1.0909%" height="15" fill="rgb(213,55,15)"/><text x="22.7955%" y="366.50"></text></g><g><title>cmdline (psutil/_pslinux.py:1697) (2 samples, 0.36%)</title><rect x="23.2727%" y="372" width="0.3636%" height="15" fill="rgb(209,9,3)"/><text x="23.5227%" y="382.50"></text></g><g><title>name (psutil/__init__.py:629) (1 samples, 0.18%)</title><rect x="23.6364%" y="324" width="0.1818%" height="15" fill="rgb(230,59,30)"/><text x="23.8864%" y="334.50"></text></g><g><title>basename (posixpath.py:144) (1 samples, 0.18%)</title><rect x="23.6364%" y="340" width="0.1818%" height="15" fill="rgb(209,121,21)"/><text x="23.8864%" y="350.50"></text></g><g><title>nice (psutil/__init__.py:720) (3 samples, 0.55%)</title><rect x="23.8182%" y="324" width="0.5455%" height="15" fill="rgb(220,109,13)"/><text x="24.0682%" y="334.50"></text></g><g><title>wrapper (psutil/_pslinux.py:1576) (3 samples, 0.55%)</title><rect x="23.8182%" y="340" width="0.5455%" height="15" fill="rgb(232,18,1)"/><text x="24.0682%" y="350.50"></text></g><g><title>nice_get (psutil/_pslinux.py:1988) (2 samples, 0.36%)</title><rect x="24.0000%" y="356" width="0.3636%" height="15" fill="rgb(215,41,42)"/><text x="24.2500%" y="366.50"></text></g><g><title>wrapper (psutil/_common.py:451) (1 samples, 0.18%)</title><rect x="25.2727%" y="388" width="0.1818%" height="15" fill="rgb(224,123,36)"/><text x="25.5227%" y="398.50"></text></g><g><title>_read_status_file (psutil/_pslinux.py:1649) (9 samples, 1.64%)</title><rect x="25.4545%" y="404" width="1.6364%" height="15" fill="rgb(240,125,3)"/><text x="25.7045%" y="414.50"></text></g><g><title>open_binary (psutil/_common.py:711) (8 samples, 1.45%)</title><rect x="25.6364%" y="420" width="1.4545%" height="15" fill="rgb(205,98,50)"/><text x="25.8864%" y="430.50"></text></g><g><title>num_threads (psutil/_pslinux.py:1950) (25 samples, 4.55%)</title><rect x="24.7273%" y="356" width="4.5455%" height="15" fill="rgb(205,185,37)"/><text x="24.9773%" y="366.50">num_t..</text></g><g><title>wrapper (psutil/_pslinux.py:1576) (25 samples, 4.55%)</title><rect x="24.7273%" y="372" width="4.5455%" height="15" fill="rgb(238,207,15)"/><text x="24.9773%" y="382.50">wrapp..</text></g><g><title>wrapper (psutil/_common.py:454) (21 samples, 3.82%)</title><rect x="25.4545%" y="388" width="3.8182%" height="15" fill="rgb(213,199,42)"/><text x="25.7045%" y="398.50">wrap..</text></g><g><title>_read_status_file (psutil/_pslinux.py:1650) (12 samples, 2.18%)</title><rect x="27.0909%" y="404" width="2.1818%" height="15" fill="rgb(235,201,11)"/><text x="27.3409%" y="414.50">_..</text></g><g><title>num_threads (psutil/__init__.py:860) (33 samples, 6.00%)</title><rect x="24.3636%" y="324" width="6.0000%" height="15" fill="rgb(207,46,11)"/><text x="24.6136%" y="334.50">num_thre..</text></g><g><title>wrapper (psutil/_pslinux.py:1576) (33 samples, 6.00%)</title><rect x="24.3636%" y="340" width="6.0000%" height="15" fill="rgb(241,35,35)"/><text x="24.6136%" y="350.50">wrapper ..</text></g><g><title>num_threads (psutil/_pslinux.py:1951) (6 samples, 1.09%)</title><rect x="29.2727%" y="356" width="1.0909%" height="15" fill="rgb(243,32,47)"/><text x="29.5227%" y="366.50"></text></g><g><title>_parse_stat_file (psutil/_pslinux.py:1618) (11 samples, 2.00%)</title><rect x="31.0909%" y="404" width="2.0000%" height="15" fill="rgb(247,202,23)"/><text x="31.3409%" y="414.50">_..</text></g><g><title>open_binary (psutil/_common.py:711) (9 samples, 1.64%)</title><rect x="31.4545%" y="420" width="1.6364%" height="15" fill="rgb(219,102,11)"/><text x="31.7045%" y="430.50"></text></g><g><title>_parse_stat_file (psutil/_pslinux.py:1619) (11 samples, 2.00%)</title><rect x="33.0909%" y="404" width="2.0000%" height="15" fill="rgb(243,110,44)"/><text x="33.3409%" y="414.50">_..</text></g><g><title>_parse_stat_file (psutil/_pslinux.py:1623) (1 samples, 0.18%)</title><rect x="35.0909%" y="404" width="0.1818%" height="15" fill="rgb(222,74,54)"/><text x="35.3409%" y="414.50"></text></g><g><title>status (psutil/__init__.py:682) (28 samples, 5.09%)</title><rect x="30.3636%" y="324" width="5.0909%" height="15" fill="rgb(216,99,12)"/><text x="30.6136%" y="334.50">status..</text></g><g><title>wrapper (psutil/_pslinux.py:1576) (27 samples, 4.91%)</title><rect x="30.5455%" y="340" width="4.9091%" height="15" fill="rgb(226,22,26)"/><text x="30.7955%" y="350.50">wrappe..</text></g><g><title>status (psutil/_pslinux.py:2080) (27 samples, 4.91%)</title><rect x="30.5455%" y="356" width="4.9091%" height="15" fill="rgb(217,163,10)"/><text x="30.7955%" y="366.50">status..</text></g><g><title>wrapper (psutil/_pslinux.py:1576) (26 samples, 4.73%)</title><rect x="30.7273%" y="372" width="4.7273%" height="15" fill="rgb(213,25,53)"/><text x="30.9773%" y="382.50">wrappe..</text></g><g><title>wrapper (psutil/_common.py:454) (26 samples, 4.73%)</title><rect x="30.7273%" y="388" width="4.7273%" height="15" fill="rgb(252,105,26)"/><text x="30.9773%" y="398.50">wrappe..</text></g><g><title>_parse_stat_file (psutil/_pslinux.py:1628) (1 samples, 0.18%)</title><rect x="35.2727%" y="404" width="0.1818%" height="15" fill="rgb(220,39,43)"/><text x="35.5227%" y="414.50"></text></g><g><tit