mirror of
https://github.com/coot/free-category.git
synced 2024-09-11 14:17:30 +03:00
Fixed a typo in README.md file
This commit is contained in:
parent
ea038180e6
commit
78a65122e0
@ -20,9 +20,9 @@ an effectful one.
|
||||
|
||||
Check performence characteristics of various presentations free categories:
|
||||
|
||||
* [raport-O0](/bench/raport-O0.md)
|
||||
* [raport-O1](/bench/raport-O1.md)
|
||||
* [raport-O2](/bench/raport-O2.md)
|
||||
* [report-O0](/bench/raport-O0.md)
|
||||
* [report-O1](/bench/raport-O1.md)
|
||||
* [report-O2](/bench/raport-O2.md)
|
||||
|
||||
## Some examples
|
||||
* [LoginStateMachine](https://github.com/coot/free-category/blob/master/examples/src/LoginStateMachine.hs):
|
||||
|
11469
bench-cats.hp
Normal file
11469
bench-cats.hp
Normal file
File diff suppressed because it is too large
Load Diff
3403
bench-cats.prof
Normal file
3403
bench-cats.prof
Normal file
File diff suppressed because it is too large
Load Diff
507
bench-cats.svg
Normal file
507
bench-cats.svg
Normal file
@ -0,0 +1,507 @@
|
||||
<?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="418" onload="init(evt)" viewBox="0 0 1200 418" 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 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 = "Function: " + 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*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") + 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;
|
||||
|
||||
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 (0 == 0) {
|
||||
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 =
|
||||
"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.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;
|
||||
if (a < b || a > b)
|
||||
return a - b;
|
||||
return matches[b] - matches[a];
|
||||
});
|
||||
// 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.
|
||||
for (var k in keys) {
|
||||
var x = parseFloat(keys[k]);
|
||||
var w = matches[keys[k]];
|
||||
if (x >= lastx + lastw) {
|
||||
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.0" y="0" width="1200.0" height="418.0" fill="url(#background)" />
|
||||
<text text-anchor="middle" x="600.00" y="24" font-size="17" font-family="Verdana" fill="rgb(0,0,0)" >Flame Graph</text>
|
||||
<text text-anchor="" x="10.00" y="401" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" id="details" > </text>
|
||||
<text text-anchor="" x="10.00" y="24" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" id="unzoom" onclick="unzoom()" style="opacity:0.0;cursor:pointer" >Reset Zoom</text>
|
||||
<text text-anchor="" x="1090.00" y="24" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" id="search" onmouseover="searchover()" onmouseout="searchout()" onclick="search_prompt()" style="opacity:0.1;cursor:pointer" >Search</text>
|
||||
<text text-anchor="" x="1090.00" y="401" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" id="matched" > </text>
|
||||
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
|
||||
<title>Statistics.Resampling.resample (1 samples, 0.10%)</title><rect x="34.8" y="113" width="1.2" height="15.0" fill="rgb(250,9,12)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="37.78" y="123.5" 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>Main.interpret (286 samples, 28.60%)</title><rect x="847.8" y="81" width="337.5" height="15.0" fill="rgb(207,140,26)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="850.80" y="91.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >Main.interpret</text>
|
||||
</g>
|
||||
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
|
||||
<title>Statistics.Sample.mean (1 samples, 0.10%)</title><rect x="34.8" y="49" width="1.2" height="15.0" fill="rgb(238,23,1)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="37.78" y="59.5" 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>Criterion.Internal.runAndAnalyseOne (996 samples, 99.60%)</title><rect x="10.0" y="145" width="1175.3" height="15.0" fill="rgb(207,162,15)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="13.00" y="155.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >Criterion.Internal.runAndAnalyseOne</text>
|
||||
</g>
|
||||
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
|
||||
<title>Statistics.Matrix.Algorithms.qr (5 samples, 0.50%)</title><rect x="18.3" y="49" width="5.9" height="15.0" fill="rgb(225,8,3)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="21.26" y="59.5" 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>Criterion.Internal.runAndAnalyse (997 samples, 99.70%)</title><rect x="10.0" y="209" width="1176.5" height="15.0" fill="rgb(225,208,51)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="13.00" y="219.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >Criterion.Internal.runAndAnalyse</text>
|
||||
</g>
|
||||
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
|
||||
<title>System.IO.CodePage.withCodePage (997 samples, 99.70%)</title><rect x="10.0" y="241" width="1176.5" height="15.0" fill="rgb(211,1,5)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="13.00" y="251.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >System.IO.CodePage.withCodePage</text>
|
||||
</g>
|
||||
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
|
||||
<title>Statistics.Matrix.transpose (4 samples, 0.40%)</title><rect x="13.5" y="65" width="4.8" height="15.0" fill="rgb(207,56,50)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="16.54" y="75.5" 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>Statistics.Matrix.unsafeIndex (1 samples, 0.10%)</title><rect x="27.7" y="33" width="1.2" height="15.0" fill="rgb(212,62,11)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="30.70" y="43.5" 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>Criterion.Monad.withConfig (997 samples, 99.70%)</title><rect x="10.0" y="273" width="1176.5" height="15.0" fill="rgb(232,137,38)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="13.00" y="283.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >Criterion.Monad.withConfig</text>
|
||||
</g>
|
||||
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
|
||||
<title>System.IO.CodePage.withCodePageOptions (997 samples, 99.70%)</title><rect x="10.0" y="225" width="1176.5" height="15.0" fill="rgb(241,2,45)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="13.00" y="235.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >System.IO.CodePage.withCodePageOptions</text>
|
||||
</g>
|
||||
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
|
||||
<title>Control.Monad.Catch.finally (997 samples, 99.70%)</title><rect x="10.0" y="193" width="1176.5" height="15.0" fill="rgb(240,222,10)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="13.00" y="203.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >Control.Monad.Catch.finally</text>
|
||||
</g>
|
||||
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
|
||||
<title>Statistics.Matrix.transpose (4 samples, 0.40%)</title><rect x="24.2" y="49" width="4.7" height="15.0" fill="rgb(248,55,2)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="27.16" y="59.5" 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>Main.main (997 samples, 99.70%)</title><rect x="10.0" y="337" width="1176.5" height="15.0" fill="rgb(208,214,51)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="13.00" y="347.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >Main.main</text>
|
||||
</g>
|
||||
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
|
||||
<title>Data.Vector.Algorithms.Intro.sort (2 samples, 0.20%)</title><rect x="11.2" y="65" width="2.3" height="15.0" fill="rgb(241,7,53)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="14.18" y="75.5" 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>System.IO.CodePage.withCP65001 (997 samples, 99.70%)</title><rect x="10.0" y="257" width="1176.5" height="15.0" fill="rgb(236,194,31)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="13.00" y="267.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >System.IO.CodePage.withCP65001</text>
|
||||
</g>
|
||||
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
|
||||
<title>Statistics.Matrix.unsafeIndex (2 samples, 0.20%)</title><rect x="15.9" y="49" width="2.4" height="15.0" fill="rgb(212,195,24)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="18.90" y="59.5" 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>Statistics.Regression.bootstrapRegress (21 samples, 2.10%)</title><rect x="10.0" y="97" width="24.8" height="15.0" fill="rgb(220,179,18)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="13.00" y="107.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >S..</text>
|
||||
</g>
|
||||
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
|
||||
<title>Data.Aeson.Types.ToJSON.genericToJSON (1 samples, 0.10%)</title><rect x="1185.3" y="129" width="1.2" height="15.0" fill="rgb(205,160,53)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="1188.28" y="139.5" 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>Criterion.Measurement.Types.whnf (973 samples, 97.30%)</title><rect x="37.1" y="97" width="1148.2" height="15.0" fill="rgb(236,42,40)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="40.14" y="107.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >Criterion.Measurement.Types.whnf</text>
|
||||
</g>
|
||||
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
|
||||
<title>Statistics.Function.sort (2 samples, 0.20%)</title><rect x="11.2" y="81" width="2.3" height="15.0" fill="rgb(210,219,17)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="14.18" y="91.5" 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>Statistics.Regression.olsRegress (18 samples, 1.80%)</title><rect x="13.5" y="81" width="21.3" height="15.0" fill="rgb(230,117,39)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="16.54" y="91.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >S..</text>
|
||||
</g>
|
||||
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
|
||||
<title>Statistics.Resampling.estimate (1 samples, 0.10%)</title><rect x="34.8" y="97" width="1.2" height="15.0" fill="rgb(254,74,33)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="37.78" y="107.5" 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>Criterion.Internal.runOne (974 samples, 97.40%)</title><rect x="36.0" y="129" width="1149.3" height="15.0" fill="rgb(210,104,4)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="38.96" y="139.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >Criterion.Internal.runOne</text>
|
||||
</g>
|
||||
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
|
||||
<title>Criterion.Analysis.analyseSample (22 samples, 2.20%)</title><rect x="10.0" y="129" width="26.0" height="15.0" fill="rgb(228,111,32)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="13.00" y="139.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >C..</text>
|
||||
</g>
|
||||
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
|
||||
<title>Data.Aeson.encode (1 samples, 0.10%)</title><rect x="1185.3" y="145" width="1.2" height="15.0" fill="rgb(223,212,37)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="1188.28" y="155.5" 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>Statistics.Sample.stdDev (1 samples, 0.10%)</title><rect x="34.8" y="81" width="1.2" height="15.0" fill="rgb(214,18,35)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="37.78" y="91.5" 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>Control.Monad.Catch.bracket_ (997 samples, 99.70%)</title><rect x="10.0" y="177" width="1176.5" height="15.0" fill="rgb(229,124,22)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="13.00" y="187.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >Control.Monad.Catch.bracket_</text>
|
||||
</g>
|
||||
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
|
||||
<title>Criterion.Analysis.regress (21 samples, 2.10%)</title><rect x="10.0" y="113" width="24.8" height="15.0" fill="rgb(251,64,48)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="13.00" y="123.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >C..</text>
|
||||
</g>
|
||||
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
|
||||
<title>Statistics.Regression.rSquare (5 samples, 0.50%)</title><rect x="28.9" y="65" width="5.9" height="15.0" fill="rgb(248,117,27)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="31.88" y="75.5" 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>Statistics.Matrix.unsafeIndex (1 samples, 0.10%)</title><rect x="33.6" y="49" width="1.2" height="15.0" fill="rgb(205,201,9)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="36.60" y="59.5" 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 (3 samples, 0.30%)</title><rect x="1186.5" y="353" width="3.5" height="15.0" fill="rgb(220,101,48)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="1189.46" y="363.5" 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>Data.Scientific.fromFloatDigits (1 samples, 0.10%)</title><rect x="1185.3" y="113" width="1.2" height="15.0" fill="rgb(239,222,5)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="1188.28" y="123.5" 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>Criterion.Main.defaultMainWith (997 samples, 99.70%)</title><rect x="10.0" y="305" width="1176.5" height="15.0" fill="rgb(239,160,44)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="13.00" y="315.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >Criterion.Main.defaultMainWith</text>
|
||||
</g>
|
||||
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
|
||||
<title>Criterion.Main.defaultMain (997 samples, 99.70%)</title><rect x="10.0" y="321" width="1176.5" height="15.0" fill="rgb(242,27,28)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="13.00" y="331.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >Criterion.Main.defaultMain</text>
|
||||
</g>
|
||||
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
|
||||
<title>Statistics.Sample.varianceUnbiased (1 samples, 0.10%)</title><rect x="34.8" y="65" width="1.2" height="15.0" fill="rgb(226,2,43)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="37.78" y="75.5" 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>MAIN.MAIN (997 samples, 99.70%)</title><rect x="10.0" y="353" width="1176.5" height="15.0" fill="rgb(230,18,0)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="13.00" y="363.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >MAIN.MAIN</text>
|
||||
</g>
|
||||
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
|
||||
<title>all (1,000 samples, 100%)</title><rect x="10.0" y="369" width="1180.0" height="15.0" fill="rgb(229,156,9)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="13.00" y="379.5" 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>Criterion.Main.runMode (997 samples, 99.70%)</title><rect x="10.0" y="289" width="1176.5" height="15.0" fill="rgb(226,156,3)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="13.00" y="299.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >Criterion.Main.runMode</text>
|
||||
</g>
|
||||
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
|
||||
<title>Control.Monad.Catch.bracket (997 samples, 99.70%)</title><rect x="10.0" y="161" width="1176.5" height="15.0" fill="rgb(247,36,26)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="13.00" y="171.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >Control.Monad.Catch.bracket</text>
|
||||
</g>
|
||||
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
|
||||
<title>Criterion.Measurement.runBenchmark (974 samples, 97.40%)</title><rect x="36.0" y="113" width="1149.3" height="15.0" fill="rgb(244,102,53)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="38.96" y="123.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >Criterion.Measurement.runBenchmark</text>
|
||||
</g>
|
||||
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
|
||||
<title>Statistics.Regression.ols (9 samples, 0.90%)</title><rect x="18.3" y="65" width="10.6" height="15.0" fill="rgb(223,141,54)" rx="2" ry="2" />
|
||||
<text text-anchor="" x="21.26" y="75.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 24 KiB |
Loading…
Reference in New Issue
Block a user