blob: 9866755bcd7e9ac3ecd4078fb4363163af810c03 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{{.Title}}</title>
{{template "css" .}}
<style type="text/css">{{template "d3flamegraphcss" .}}</style>
<style type="text/css">
.flamegraph-content {
width: 90%;
min-width: 80%;
margin-left: 5%;
}
.flamegraph-details {
height: 1.2em;
width: 90%;
min-width: 90%;
margin-left: 5%;
padding: 15px 0 35px;
}
</style>
</head>
<body>
{{template "header" .}}
<div id="bodycontainer">
<div id="flamegraphdetails" class="flamegraph-details"></div>
<div class="flamegraph-content">
<div id="chart"></div>
</div>
</div>
{{template "script" .}}
<script>viewer(new URL(window.location.href), {{.Nodes}});</script>
<script>{{template "d3flamegraphscript" .}}</script>
<script>
{{- /* Deserialize as JSON instead of a JS object literal because the browser's
JSON parser can handle larger payloads than its JS parser. */ -}}
var data = JSON.parse("{{.FlameGraph}}");
var width = document.getElementById('chart').clientWidth;
var flameGraph = flamegraph()
.width(width)
.cellHeight(18)
.minFrameSize(1)
.transitionDuration(750)
.inverted(true)
.sort(true)
.title('')
.tooltip(false)
.setDetailsElement(document.getElementById('flamegraphdetails'));
// <full name> (percentage, value)
flameGraph.label((d) => d.data.f + ' (' + d.data.p + ', ' + d.data.l + ')');
flameGraph.setColorHue('warm');
select('#chart')
.datum(data)
.call(flameGraph);
function clear() {
flameGraph.clear();
}
function resetZoom() {
flameGraph.resetZoom();
}
window.addEventListener('resize', function() {
var width = document.getElementById('chart').clientWidth;
var graphs = document.getElementsByClassName('d3-flame-graph');
if (graphs.length > 0) {
graphs[0].setAttribute('width', width);
}
flameGraph.width(width);
flameGraph.resetZoom();
}, true);
var search = document.getElementById('search');
var searchAlarm = null;
function selectMatching() {
searchAlarm = null;
if (search.value != '') {
flameGraph.search(search.value);
} else {
flameGraph.clear();
}
}
function handleSearch() {
// Delay expensive processing so a flurry of key strokes is handled once.
if (searchAlarm != null) {
clearTimeout(searchAlarm);
}
searchAlarm = setTimeout(selectMatching, 300);
}
search.addEventListener('input', handleSearch);
</script>
</body>
</html>