Skip to content

Instantly share code, notes, and snippets.

@GlenHertz
Last active December 24, 2015 15:29
Show Gist options
  • Save GlenHertz/6821100 to your computer and use it in GitHub Desktop.
Save GlenHertz/6821100 to your computer and use it in GitHub Desktop.
Julia SVG Flame Graph
Display the source blob
Display the rendered blob
Raw
<?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="265" onload="init(evt)" viewBox="0 0 1200 265" xmlns="http://www.w3.org/2000/svg" >
<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">
rect[rx]:hover { stroke:black; stroke-width:1; }
text:hover { stroke:black; stroke-width:1; stroke-opacity:0.35; }
</style>
<script type="text/ecmascript">
<![CDATA[
var details;
function init(evt) { details = document.getElementById("details").firstChild; }
function s(info) { details.nodeValue = info; }
function c() { details.nodeValue = ' '; }
]]>
</script>
<rect x="0.0" y="0" width="1200.0" height="265.0" fill="url(#background)" />
<text text-anchor="middle" x="600" y="24" font-size="17" font-family="Verdana" fill="rgb(0,0,0)" >Flame Graph</text>
<text text-anchor="left" x="10" y="248" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >Function:</text>
<text text-anchor="" x="70" y="248" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" id="details" > </text>
<rect x="35.26566217287866" y="210.0" width="4.678826328310869" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('copy! in abstractarray.jl:180: 0.4% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="39.94448850118953" y="210.0" width="2.8072957969865158" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('copy! in abstractarray.jl:181: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="42.75178429817605" y="210.0" width="2.807295796986523" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('copy! in abstractarray.jl:181: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="45.55908009516257" y="210.0" width="21.522601110229985" height="15.0" fill="rgb(266,92,70)" rx="2" ry="2" onmouseover="s('copy! in abstractarray.jl:181: 1.8% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><text text-anchor="" x="49.55908009516257" y="221.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('copy! in abstractarray.jl:181: 1.8% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()">
co..
</text>
<rect x="67.08168120539256" y="210.0" width="0.9357652656621553" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('copy! in abstractarray.jl:181: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="68.01744647105471" y="210.0" width="1.8715305313243533" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('copy! in abstractarray.jl:181: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="69.88897700237906" y="210.0" width="1.8715305313243533" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('copy! in abstractarray.jl:181: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="71.76050753370342" y="210.0" width="1.871530531324339" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('copy! in abstractarray.jl:182: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="73.63203806502776" y="210.0" width="1.871530531324339" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('copy! in abstractarray.jl:182: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="75.5035685963521" y="210.0" width="4.678826328310876" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('copy! in abstractarray.jl:182: 0.4% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="80.18239492466297" y="210.0" width="0.9357652656621696" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('copy! in abstractarray.jl:182: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="81.11816019032514" y="210.0" width="0.9357652656621696" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('max in abstractarray.jl:135: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="82.05392545598731" y="210.0" width="6.550356859635215" height="15.0" fill="rgb(266,91,70)" rx="2" ry="2" onmouseover="s('max in abstractarray.jl:135: 0.6% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="88.60428231562253" y="210.0" width="4.678826328310862" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('max in abstractarray.jl:1513: 0.4% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="93.28310864393339" y="210.0" width="2.807295796986523" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('max in abstractarray.jl:1513: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="96.09040444091991" y="210.0" width="4.678826328310862" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('max in abstractarray.jl:1513: 0.4% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="100.76923076923077" y="210.0" width="2.8072957969865087" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('max in abstractarray.jl:1513: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="103.57652656621728" y="210.0" width="2.807295796986523" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('max in abstractarray.jl:1514: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="106.3838223632038" y="210.0" width="1082.680412371134" height="15.0" fill="rgb(86,173,70)" rx="2" ry="2" onmouseover="s('include in boot.jl:238: 91.8% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><text text-anchor="" x="110.3838223632038" y="221.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('include in boot.jl:238: 91.8% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()">
include in boot.jl:238: 91.8% of all samples (0.0% in self; 100.0% in children)
</text>
<rect x="106.3838223632038" y="195.0" width="1082.680412371134" height="15.0" fill="rgb(86,173,70)" rx="2" ry="2" onmouseover="s('anonymous in profile.jl:14: 91.8% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><text text-anchor="" x="110.3838223632038" y="206.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('anonymous in profile.jl:14: 91.8% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()">
anonymous in profile.jl:14: 91.8% of all samples (0.0% in self; 100.0% in children)
</text>
<rect x="106.3838223632038" y="180.0" width="232.06978588421885" height="15.0" fill="rgb(86,108,70)" rx="2" ry="2" onmouseover="s('profile_test in /home/hertz/.julia/ProfileView/test/test.jl:3: 19.7% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><text text-anchor="" x="110.3838223632038" y="191.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('profile_test in /home/hertz/.julia/ProfileView/test/test.jl:3: 19.7% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()">
profile_test in /home/hertz/.julia/Pr..
</text>
<rect x="338.45360824742266" y="180.0" width="279.7938144329897" height="15.0" fill="rgb(86,111,70)" rx="2" ry="2" onmouseover="s('profile_test in /home/hertz/.julia/ProfileView/test/test.jl:5: 23.7% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><text text-anchor="" x="342.45360824742266" y="191.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('profile_test in /home/hertz/.julia/ProfileView/test/test.jl:5: 23.7% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()">
profile_test in /home/hertz/.julia/ProfileVie..
</text>
<rect x="618.2474226804123" y="180.0" width="515.6066613798572" height="15.0" fill="rgb(86,129,70)" rx="2" ry="2" onmouseover="s('profile_test in /home/hertz/.julia/ProfileView/test/test.jl:6: 43.7% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><text text-anchor="" x="622.2474226804123" y="191.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('profile_test in /home/hertz/.julia/ProfileView/test/test.jl:6: 43.7% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()">
profile_test in /home/hertz/.julia/ProfileView/test/test.jl:6: 43.7% of all samples ..
</text>
<rect x="1133.8540840602695" y="180.0" width="3.7430610626488487" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('profile_test in /home/hertz/.julia/ProfileView/test/test.jl:7: 0.3% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="1137.5971451229184" y="180.0" width="44.91673275178414" height="15.0" fill="rgb(86,93,70)" rx="2" ry="2" onmouseover="s('profile_test in /home/hertz/.julia/ProfileView/test/test.jl:8: 3.8% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><text text-anchor="" x="1141.5971451229184" y="191.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('profile_test in /home/hertz/.julia/ProfileView/test/test.jl:8: 3.8% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()">
profi..
</text>
<rect x="1182.5138778747025" y="180.0" width="6.550356859635258" height="15.0" fill="rgb(86,91,70)" rx="2" ry="2" onmouseover="s('profile_test in /home/hertz/.julia/ProfileView/test/test.jl:10: 0.6% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="106.3838223632038" y="165.0" width="232.06978588421885" height="15.0" fill="rgb(266,108,70)" rx="2" ry="2" onmouseover="s('randmtzig_fill_randn! in librandom.jl:170: 19.7% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><text text-anchor="" x="110.3838223632038" y="176.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('randmtzig_fill_randn! in librandom.jl:170: 19.7% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()">
randmtzig_fill_randn! in librandom.jl..
</text>
<rect x="338.45360824742266" y="165.0" width="53.33862014274388" height="15.0" fill="rgb(266,94,70)" rx="2" ry="2" onmouseover="s('fft in fftw.jl:442: 4.5% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><text text-anchor="" x="342.45360824742266" y="176.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('fft in fftw.jl:442: 4.5% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()">
fft in ..
</text>
<rect x="391.79222839016654" y="165.0" width="226.4551942902458" height="15.0" fill="rgb(86,107,70)" rx="2" ry="2" onmouseover="s('fft in fftw.jl:443: 19.2% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><text text-anchor="" x="395.79222839016654" y="176.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('fft in fftw.jl:443: 19.2% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()">
fft in fftw.jl:443: 19.2% of all sam..
</text>
<rect x="618.2474226804123" y="165.0" width="0.9357652656622122" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('mapslices in abstractarray.jl:1539: 0.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="619.1831879460746" y="165.0" width="2.807295796986523" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('mapslices in abstractarray.jl:1549: 0.2% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="621.9904837430611" y="165.0" width="0.9357652656622122" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('mapslices in abstractarray.jl:1549: 0.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="622.9262490087233" y="165.0" width="1.8715305313243107" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('mapslices in abstractarray.jl:1557: 0.2% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="624.7977795400476" y="165.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('mapslices in abstractarray.jl:1563: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="625.7335448057098" y="165.0" width="508.12053925455973" height="15.0" fill="rgb(86,129,70)" rx="2" ry="2" onmouseover="s('mapslices in abstractarray.jl:1569: 43.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><text text-anchor="" x="629.7335448057098" y="176.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('mapslices in abstractarray.jl:1569: 43.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()">
mapslices in abstractarray.jl:1569: 43.1% of all samples (0.0% in self; 100.0% in c..
</text>
<rect x="1133.8540840602695" y="165.0" width="0.9357652656622122" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:364: 0.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="1134.7898493259318" y="165.0" width="2.8072957969866366" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:369: 0.2% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="1137.5971451229184" y="165.0" width="0.9357652656622122" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('mapslices in abstractarray.jl:1535: 0.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="1138.5329103885806" y="165.0" width="0.9357652656619848" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('mapslices in abstractarray.jl:1549: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1139.4686756542426" y="165.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('mapslices in abstractarray.jl:1557: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1140.4044409199048" y="165.0" width="0.9357652656622122" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('mapslices in abstractarray.jl:1557: 0.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="1141.340206185567" y="165.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('mapslices in abstractarray.jl:1558: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1142.2759714512292" y="165.0" width="40.237906423473305" height="15.0" fill="rgb(86,93,70)" rx="2" ry="2" onmouseover="s('mapslices in abstractarray.jl:1569: 3.4% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><text text-anchor="" x="1146.2759714512292" y="176.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('mapslices in abstractarray.jl:1569: 3.4% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()">
mapsl..
</text>
<rect x="1182.5138778747025" y="165.0" width="6.550356859635258" height="15.0" fill="rgb(86,91,70)" rx="2" ry="2" onmouseover="s('.* in broadcast.jl:266: 0.6% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="391.79222839016654" y="150.0" width="73.92545598731164" height="15.0" fill="rgb(86,96,70)" rx="2" ry="2" onmouseover="s('fft! in fftw.jl:435: 6.3% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><text text-anchor="" x="395.79222839016654" y="161.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('fft! in fftw.jl:435: 6.3% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()">
fft! in ff..
</text>
<rect x="465.7176843774782" y="150.0" width="152.52973830293416" height="15.0" fill="rgb(266,102,70)" rx="2" ry="2" onmouseover="s('fft! in fftw.jl:436: 12.9% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><text text-anchor="" x="469.7176843774782" y="161.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('fft! in fftw.jl:436: 12.9% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()">
fft! in fftw.jl:436: 12..
</text>
<rect x="618.2474226804123" y="150.0" width="0.9357652656622122" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('setdiff in array.jl:1606: 0.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="619.1831879460746" y="150.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:363: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="620.1189532117368" y="150.0" width="0.9357652656620985" height="15.0" fill="rgb(-634,90,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:364: 0.1% of all samples (-400.0% in self; 500.0% in children)')" onmouseout="c()"/><rect x="621.0547184773989" y="150.0" width="0.9357652656622122" height="15.0" fill="rgb(-10534,90,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:369: 0.1% of all samples (-5900.0% in self; 6000.0% in children)')" onmouseout="c()"/><rect x="621.9904837430611" y="150.0" width="0.9357652656622122" height="15.0" fill="rgb(-4234,90,70)" rx="2" ry="2" onmouseover="s('sum in abstractarray.jl:1401: 0.1% of all samples (-2400.0% in self; 2500.0% in children)')" onmouseout="c()"/><rect x="622.9262490087233" y="150.0" width="1.8715305313243107" height="15.0" fill="rgb(176,90,70)" rx="2" ry="2" onmouseover="s('vcat in abstractarray.jl:774: 0.2% of all samples (50.0% in self; 50.0% in children)')" onmouseout="c()"/><rect x="625.7335448057098" y="150.0" width="507.18477398889775" height="15.0" fill="rgb(86,129,70)" rx="2" ry="2" onmouseover="s('cartesianmap in abstractarray.jl:1322: 43.0% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><text text-anchor="" x="629.7335448057098" y="161.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('cartesianmap in abstractarray.jl:1322: 43.0% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()">
cartesianmap in abstractarray.jl:1322: 43.0% of all samples (0.0% in self; 100.0% i..
</text>
<rect x="1132.9183187946076" y="150.0" width="0.9357652656619848" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('anonymous in no file:1571: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1133.8540840602695" y="150.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('similar in array.jl:139: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1134.7898493259318" y="150.0" width="2.8072957969866366" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('gen_array_index_map in abstractarray.jl:497: 0.2% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="1137.5971451229184" y="150.0" width="0.9357652656622122" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('== in abstractarray.jl:964: 0.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="1140.4044409199048" y="150.0" width="0.9357652656622122" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('vcat in abstractarray.jl:774: 0.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="1142.2759714512292" y="150.0" width="39.30214115781132" height="15.0" fill="rgb(86,93,70)" rx="2" ry="2" onmouseover="s('cartesianmap in abstractarray.jl:1315: 3.3% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><text text-anchor="" x="1146.2759714512292" y="161.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('cartesianmap in abstractarray.jl:1315: 3.3% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()">
carte..
</text>
<rect x="1181.5781126090405" y="150.0" width="0.9357652656619848" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('cartesianmap in abstractarray.jl:1315: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1182.5138778747025" y="150.0" width="0.9357652656622122" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('##broadcast_T_*#627 in broadcast.jl:176: 0.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="1183.4496431403647" y="150.0" width="4.678826328310834" height="15.0" fill="rgb(122,90,70)" rx="2" ry="2" onmouseover="s('##broadcast_T_*#627 in broadcast.jl:178: 0.4% of all samples (20.0% in self; 80.0% in children)')" onmouseout="c()"/><rect x="1188.1284694686756" y="150.0" width="0.9357652656622122" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('##broadcast_T_*#627 in broadcast.jl:178: 0.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="391.79222839016654" y="135.0" width="61.76050753370339" height="15.0" fill="rgb(266,95,70)" rx="2" ry="2" onmouseover="s('Plan in fftw.jl:305: 5.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><text text-anchor="" x="395.79222839016654" y="146.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('Plan in fftw.jl:305: 5.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()">
Plan in ..
</text>
<rect x="453.55273592386993" y="135.0" width="0.9357652656622122" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('Plan in fftw.jl:305: 0.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="454.48850118953214" y="135.0" width="11.229183187946035" height="15.0" fill="rgb(266,91,70)" rx="2" ry="2" onmouseover="s('Plan in fftw.jl:306: 1.0% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="618.2474226804123" y="135.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('Dict in dict.jl:289: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="621.0547184773989" y="135.0" width="0.9357652656622122" height="15.0" fill="rgb(-1174,90,70)" rx="2" ry="2" onmouseover="s('gen_array_index_map in abstractarray.jl:478: 0.1% of all samples (-700.0% in self; 800.0% in children)')" onmouseout="c()"/><rect x="621.9904837430611" y="135.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sum_pairwise in abstractarray.jl:135: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="622.9262490087233" y="135.0" width="0.9357652656620985" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('cat in abstractarray.jl:761: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="623.8620142743854" y="135.0" width="0.9357652656622122" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('cat in abstractarray.jl:768: 0.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="625.7335448057098" y="135.0" width="14.0364789849325" height="15.0" fill="rgb(146,91,70)" rx="2" ry="2" onmouseover="s('anonymous in no file:1573: 1.2% of all samples (33.3% in self; 66.7% in children)')" onmouseout="c()"/><rect x="639.7700237906423" y="135.0" width="44.916732751784366" height="15.0" fill="rgb(255,93,70)" rx="2" ry="2" onmouseover="s('anonymous in no file:1574: 3.8% of all samples (93.8% in self; 6.200000000000003% in children)')" onmouseout="c()"/><text text-anchor="" x="643.7700237906423" y="146.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('anonymous in no file:1574: 3.8% of all samples (93.8% in self; 6.200000000000003% in children)')" onmouseout="c()">
anony..
</text>
<rect x="684.6867565424267" y="135.0" width="27.137192704203017" height="15.0" fill="rgb(260,92,70)" rx="2" ry="2" onmouseover="s('anonymous in no file:1575: 2.3% of all samples (96.6% in self; 3.4000000000000057% in children)')" onmouseout="c()"/><text text-anchor="" x="688.6867565424267" y="146.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('anonymous in no file:1575: 2.3% of all samples (96.6% in self; 3.4000000000000057% in children)')" onmouseout="c()">
ano..
</text>
<rect x="711.8239492466297" y="135.0" width="166.56621728786672" height="15.0" fill="rgb(100,103,70)" rx="2" ry="2" onmouseover="s('anonymous in no file:1576: 14.1% of all samples (7.9% in self; 92.1% in children)')" onmouseout="c()"/><text text-anchor="" x="715.8239492466297" y="146.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('anonymous in no file:1576: 14.1% of all samples (7.9% in self; 92.1% in children)')" onmouseout="c()">
anonymous in no file:1576:..
</text>
<rect x="878.3901665344964" y="135.0" width="138.4932593180016" height="15.0" fill="rgb(102,101,70)" rx="2" ry="2" onmouseover="s('anonymous in no file:1576: 11.7% of all samples (8.8% in self; 91.2% in children)')" onmouseout="c()"/><text text-anchor="" x="882.3901665344964" y="146.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('anonymous in no file:1576: 11.7% of all samples (8.8% in self; 91.2% in children)')" onmouseout="c()">
anonymous in no file:..
</text>
<rect x="1016.883425852498" y="135.0" width="15.908009516256925" height="15.0" fill="rgb(202,91,70)" rx="2" ry="2" onmouseover="s('anonymous in no file:1576: 1.3% of all samples (64.7% in self; 35.3% in children)')" onmouseout="c()"/><rect x="1032.791435368755" y="135.0" width="67.37509912767655" height="15.0" fill="rgb(266,95,70)" rx="2" ry="2" onmouseover="s('anonymous in no file:1576: 5.7% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><text text-anchor="" x="1036.791435368755" y="146.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('anonymous in no file:1576: 5.7% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()">
anonymous..
</text>
<rect x="1100.1665344964315" y="135.0" width="29.008723235527214" height="15.0" fill="rgb(121,92,70)" rx="2" ry="2" onmouseover="s('anonymous in no file:1576: 2.5% of all samples (19.4% in self; 80.6% in children)')" onmouseout="c()"/><text text-anchor="" x="1104.1665344964315" y="146.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('anonymous in no file:1576: 2.5% of all samples (19.4% in self; 80.6% in children)')" onmouseout="c()">
ano..
</text>
<rect x="1129.1752577319587" y="135.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('anonymous in no file:1576: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1130.111022997621" y="135.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('anonymous in no file:1576: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1131.0467882632831" y="135.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('anonymous in no file:1576: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1131.9825535289453" y="135.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('anonymous in no file:1576: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1134.7898493259318" y="135.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('_F_ in abstractarray.jl:370: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1135.725614591594" y="135.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('_F_ in abstractarray.jl:370: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1136.6613798572562" y="135.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('_F_ in abstractarray.jl:439: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1137.5971451229184" y="135.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('== in tuple.jl:84: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1140.4044409199048" y="135.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('cat in abstractarray.jl:717: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1142.2759714512292" y="135.0" width="1.8715305313244244" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('anonymous in no file:1574: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1144.1475019825536" y="135.0" width="0.9357652656619848" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('anonymous in no file:1575: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1145.0832672482156" y="135.0" width="34.62331482950049" height="15.0" fill="rgb(86,93,70)" rx="2" ry="2" onmouseover="s('anonymous in no file:1576: 2.9% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><text text-anchor="" x="1149.0832672482156" y="146.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('anonymous in no file:1576: 2.9% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()">
anon..
</text>
<rect x="1179.7065820777161" y="135.0" width="1.8715305313244244" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('anonymous in no file:1576: 0.2% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="1182.5138778747025" y="135.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('broadcast_shape in broadcast.jl:25: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1183.4496431403647" y="135.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('##*_inner!#629 in broadcast.jl:155: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1184.385408406027" y="135.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('##*_inner!#629 in broadcast.jl:155: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1185.3211736716892" y="135.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('##*_inner!#629 in broadcast.jl:155: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1186.2569389373514" y="135.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('##*_inner!#629 in broadcast.jl:155: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1188.1284694686756" y="135.0" width="0.9357652656622122" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('broadcast_args in broadcast.jl:76: 0.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="453.55273592386993" y="120.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('dims_howmany in fftw.jl:258: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="621.0547184773989" y="120.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('ht_keyindex in dict.jl:488: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="623.8620142743854" y="120.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('append_any in base.jl:110: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="625.7335448057098" y="120.0" width="0.9357652656620985" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('vcat in abstractarray.jl:637: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="626.6693100713719" y="120.0" width="6.550356859635258" height="15.0" fill="rgb(266,91,70)" rx="2" ry="2" onmouseover="s('vcat in abstractarray.jl:637: 0.6% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="633.2196669310072" y="120.0" width="0.9357652656620985" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('vcat in abstractarray.jl:637: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="634.1554321966693" y="120.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('vcat in abstractarray.jl:637: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="639.7700237906423" y="120.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('setindex! in array.jl:443: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="640.7057890563045" y="120.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('setindex! in array.jl:443: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="641.6415543219667" y="120.0" width="0.9357652656620985" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('setindex! in array.jl:444: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="684.6867565424267" y="120.0" width="0.9357652656620985" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('setindex! in array.jl:443: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="712.7597145122918" y="120.0" width="24.329896907216494" height="15.0" fill="rgb(86,92,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:362: 2.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><text text-anchor="" x="716.7597145122918" y="131.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('getindex in array.jl:362: 2.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()">
ge..
</text>
<rect x="737.0896114195083" y="120.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:362: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="738.0253766851705" y="120.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:362: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="738.9611419508327" y="120.0" width="0.9357652656620985" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:362: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="739.8969072164948" y="120.0" width="1.8715305313244244" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:362: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="741.7684377478192" y="120.0" width="4.678826328310834" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:363: 0.4% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="746.4472640761301" y="120.0" width="1.8715305313243107" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:363: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="748.3187946074544" y="120.0" width="2.807295796986523" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:363: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="751.1260904044409" y="120.0" width="2.807295796986523" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:363: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="753.9333862014274" y="120.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:363: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="754.8691514670896" y="120.0" width="0.9357652656620985" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:363: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="755.8049167327517" y="120.0" width="14.036478984932614" height="15.0" fill="rgb(206,91,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:364: 1.2% of all samples (66.7% in self; 33.3% in children)')" onmouseout="c()"/><rect x="769.8413957176843" y="120.0" width="31.816019032513964" height="15.0" fill="rgb(155,92,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:364: 2.7% of all samples (38.2% in self; 61.8% in children)')" onmouseout="c()"/><text text-anchor="" x="773.8413957176843" y="131.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('getindex in array.jl:364: 2.7% of all samples (38.2% in self; 61.8% in children)')" onmouseout="c()">
get..
</text>
<rect x="801.6574147501983" y="120.0" width="0.9357652656620985" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:366: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="802.5931800158604" y="120.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:366: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="803.5289452815226" y="120.0" width="61.76050753370339" height="15.0" fill="rgb(102,95,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:369: 5.2% of all samples (9.1% in self; 90.9% in children)')" onmouseout="c()"/><text text-anchor="" x="807.5289452815226" y="131.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('getindex in array.jl:369: 5.2% of all samples (9.1% in self; 90.9% in children)')" onmouseout="c()">
getindex..
</text>
<rect x="876.5186360031721" y="120.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:362: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="878.3901665344964" y="120.0" width="25.265662172878706" height="15.0" fill="rgb(86,92,70)" rx="2" ry="2" onmouseover="s('setindex! in array.jl:566: 2.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><text text-anchor="" x="882.3901665344964" y="131.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('setindex! in array.jl:566: 2.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()">
se..
</text>
<rect x="903.6558287073751" y="120.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('setindex! in array.jl:566: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="904.5915939730373" y="120.0" width="7.486122125297356" height="15.0" fill="rgb(266,91,70)" rx="2" ry="2" onmouseover="s('setindex! in array.jl:566: 0.6% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="912.0777160983347" y="120.0" width="0.9357652656620985" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('setindex! in array.jl:566: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="913.0134813639968" y="120.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('setindex! in array.jl:566: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="913.949246629659" y="120.0" width="58.01744647105477" height="15.0" fill="rgb(266,94,70)" rx="2" ry="2" onmouseover="s('setindex! in array.jl:567: 4.9% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><text text-anchor="" x="917.949246629659" y="131.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('setindex! in array.jl:567: 4.9% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()">
setindex..
</text>
<rect x="971.9666931007138" y="120.0" width="3.7430610626486214" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('setindex! in array.jl:567: 0.3% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="975.7097541633624" y="120.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('setindex! in array.jl:567: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="976.6455194290246" y="120.0" width="3.743061062648735" height="15.0" fill="rgb(221,90,70)" rx="2" ry="2" onmouseover="s('setindex! in array.jl:567: 0.3% of all samples (75.0% in self; 25.0% in children)')" onmouseout="c()"/><rect x="980.3885804916733" y="120.0" width="3.7430610626486214" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('setindex! in array.jl:568: 0.3% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="984.131641554322" y="120.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('setindex! in array.jl:572: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="985.0674068199842" y="120.0" width="19.65107057890566" height="15.0" fill="rgb(112,92,70)" rx="2" ry="2" onmouseover="s('setindex! in array.jl:600: 1.7% of all samples (14.3% in self; 85.7% in children)')" onmouseout="c()"/><text text-anchor="" x="989.0674068199842" y="131.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('setindex! in array.jl:600: 1.7% of all samples (14.3% in self; 85.7% in children)')" onmouseout="c()">
s..
</text>
<rect x="1016.883425852498" y="120.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('reshape in array.jl:131: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1017.8191911181602" y="120.0" width="3.7430610626486214" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('reshape in array.jl:134: 0.3% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1031.8556701030927" y="120.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('reshape in array.jl:131: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1101.1022997620935" y="120.0" width="23.394131641554395" height="15.0" fill="rgb(86,92,70)" rx="2" ry="2" onmouseover="s('sum in abstractarray.jl:1401: 2.0% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><text text-anchor="" x="1105.1022997620935" y="131.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('sum in abstractarray.jl:1401: 2.0% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()">
su..
</text>
<rect x="1145.0832672482156" y="120.0" width="31.81601903251385" height="15.0" fill="rgb(86,92,70)" rx="2" ry="2" onmouseover="s('sort in sort.jl:321: 2.7% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><text text-anchor="" x="1149.0832672482156" y="131.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('sort in sort.jl:321: 2.7% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()">
sor..
</text>
<rect x="1176.8992862807295" y="120.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort in sort.jl:321: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1177.8350515463917" y="120.0" width="0.9357652656622122" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('sort in sort.jl:321: 0.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="1178.770816812054" y="120.0" width="0.9357652656622122" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('sort in sort.jl:321: 0.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="1179.7065820777161" y="120.0" width="0.9357652656622122" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:309: 0.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="1180.6423473433783" y="120.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('getindex in array.jl:310: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1188.1284694686756" y="120.0" width="0.9357652656622122" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('calc_loop_strides in broadcast.jl:55: 0.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="712.7597145122918" y="105.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('checkbounds in abstractarray.jl:111: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="713.695479777954" y="105.0" width="14.036478984932614" height="15.0" fill="rgb(122,91,70)" rx="2" ry="2" onmouseover="s('checkbounds in abstractarray.jl:112: 1.2% of all samples (20.0% in self; 80.0% in children)')" onmouseout="c()"/><rect x="727.7319587628866" y="105.0" width="2.807295796986523" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('checkbounds in abstractarray.jl:112: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="730.5392545598731" y="105.0" width="5.614591593973046" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('checkbounds in abstractarray.jl:118: 0.5% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="736.1538461538462" y="105.0" width="0.9357652656620985" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('checkbounds in abstractarray.jl:118: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="755.8049167327517" y="105.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('index_shape in operators.jl:197: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="756.740681998414" y="105.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('index_shape in operators.jl:197: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="757.6764472640762" y="105.0" width="0.9357652656620985" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('index_shape in operators.jl:197: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="758.6122125297383" y="105.0" width="1.8715305313244244" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('index_shape in operators.jl:197: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="769.8413957176843" y="105.0" width="16.843774781919137" height="15.0" fill="rgb(266,91,70)" rx="2" ry="2" onmouseover="s('similar in array.jl:139: 1.4% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="786.6851704996035" y="105.0" width="1.8715305313243107" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('similar in array.jl:139: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="800.7216494845361" y="105.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('similar in array.jl:139: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="803.5289452815226" y="105.0" width="2.807295796986523" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('gen_array_index_map in abstractarray.jl:477: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="806.3362410785091" y="105.0" width="4.678826328310834" height="15.0" fill="rgb(-22,90,70)" rx="2" ry="2" onmouseover="s('gen_array_index_map in abstractarray.jl:478: 0.4% of all samples (-60.0% in self; 160.0% in children)')" onmouseout="c()"/><rect x="811.01506740682" y="105.0" width="7.486122125297356" height="15.0" fill="rgb(176,91,70)" rx="2" ry="2" onmouseover="s('gen_array_index_map in abstractarray.jl:495: 0.6% of all samples (50.0% in self; 50.0% in children)')" onmouseout="c()"/><rect x="818.5011895321173" y="105.0" width="40.23790642347342" height="15.0" fill="rgb(253,93,70)" rx="2" ry="2" onmouseover="s('gen_array_index_map in abstractarray.jl:497: 3.4% of all samples (93.0% in self; 7.0% in children)')" onmouseout="c()"/><text text-anchor="" x="822.5011895321173" y="116.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('gen_array_index_map in abstractarray.jl:497: 3.4% of all samples (93.0% in self; 7.0% in children)')" onmouseout="c()">
gen_a..
</text>
<rect x="858.7390959555908" y="105.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('gen_array_index_map in abstractarray.jl:497: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="878.3901665344964" y="105.0" width="15.908009516256925" height="15.0" fill="rgb(139,91,70)" rx="2" ry="2" onmouseover="s('checkbounds in abstractarray.jl:112: 1.3% of all samples (29.4% in self; 70.6% in children)')" onmouseout="c()"/><rect x="894.2981760507533" y="105.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('checkbounds in abstractarray.jl:112: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="895.2339413164156" y="105.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('checkbounds in abstractarray.jl:112: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="896.1697065820778" y="105.0" width="0.9357652656620985" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('checkbounds in abstractarray.jl:112: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="897.1054718477399" y="105.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('checkbounds in abstractarray.jl:114: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="898.0412371134021" y="105.0" width="3.743061062648735" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('checkbounds in abstractarray.jl:118: 0.3% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="901.7842981760508" y="105.0" width="1.8715305313243107" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('checkbounds in abstractarray.jl:118: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="976.6455194290246" y="105.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('indices in abstractarray.jl:1228: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="985.0674068199842" y="105.0" width="1.8715305313243107" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('gen_array_index_map in abstractarray.jl:477: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="986.9389373513085" y="105.0" width="7.486122125297356" height="15.0" fill="rgb(86,91,70)" rx="2" ry="2" onmouseover="s('gen_array_index_map in abstractarray.jl:478: 0.6% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="994.4250594766058" y="105.0" width="3.743061062648735" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('gen_array_index_map in abstractarray.jl:495: 0.3% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="998.1681205392546" y="105.0" width="2.807295796986523" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('gen_array_index_map in abstractarray.jl:497: 0.2% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="1003.7827121332276" y="105.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('gen_array_index_map in abstractarray.jl:477: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1101.1022997620935" y="105.0" width="22.458366375892183" height="15.0" fill="rgb(266,92,70)" rx="2" ry="2" onmouseover="s('sum_pairwise in abstractarray.jl:135: 1.9% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><text text-anchor="" x="1105.1022997620935" y="116.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('sum_pairwise in abstractarray.jl:135: 1.9% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()">
su..
</text>
<rect x="1123.5606661379857" y="105.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sum_pairwise in abstractarray.jl:1389: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1145.0832672482156" y="105.0" width="31.81601903251385" height="15.0" fill="rgb(86,92,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:443: 2.7% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><text text-anchor="" x="1149.0832672482156" y="116.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('sort! in sort.jl:443: 2.7% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()">
sor..
</text>
<rect x="1177.8350515463917" y="105.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('ord in ordering.jl:85: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1178.770816812054" y="105.0" width="0.9357652656622122" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('copy! in linalg/blas.jl:587: 0.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="1179.7065820777161" y="105.0" width="0.9357652656622122" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('checkbounds in abstractarray.jl:112: 0.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="1188.1284694686756" y="105.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sizehint in array.jl:700: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="713.695479777954" y="90.0" width="2.807295796986523" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('checkbounds in abstractarray.jl:74: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="716.5027755749405" y="90.0" width="7.486122125297356" height="15.0" fill="rgb(266,91,70)" rx="2" ry="2" onmouseover="s('checkbounds in abstractarray.jl:74: 0.6% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="723.9888977002379" y="90.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('checkbounds in abstractarray.jl:74: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="806.3362410785091" y="90.0" width="1.8715305313243107" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('ht_keyindex in dict.jl:479: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="808.2077716098335" y="90.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('ht_keyindex in dict.jl:480: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="809.1435368754957" y="90.0" width="1.8715305313243107" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('ht_keyindex in dict.jl:488: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="811.01506740682" y="90.0" width="6.550356859635258" height="15.0" fill="rgb(189,91,70)" rx="2" ry="2" onmouseover="s('getindex in dict.jl:503: 0.6% of all samples (57.1% in self; 42.9% in children)')" onmouseout="c()"/><rect x="817.5654242664552" y="90.0" width="0.9357652656620985" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('ht_keyindex in dict.jl:477: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="819.4369547977795" y="90.0" width="2.807295796986523" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('_F_ in abstractarray.jl:370: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="822.2442505947661" y="90.0" width="3.743061062648735" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('_F_ in abstractarray.jl:370: 0.3% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="825.9873116574148" y="90.0" width="16.843774781919024" height="15.0" fill="rgb(266,91,70)" rx="2" ry="2" onmouseover="s('_F_ in abstractarray.jl:370: 1.4% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="842.8310864393338" y="90.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('_F_ in abstractarray.jl:370: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="843.766851704996" y="90.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('_F_ in abstractarray.jl:370: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="878.3901665344964" y="90.0" width="6.550356859635258" height="15.0" fill="rgb(266,91,70)" rx="2" ry="2" onmouseover="s('checkbounds in abstractarray.jl:74: 0.6% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="884.9405233941317" y="90.0" width="3.7430610626486214" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('checkbounds in abstractarray.jl:74: 0.3% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="888.6835844567803" y="90.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('checkbounds in abstractarray.jl:74: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="986.9389373513085" y="90.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('ht_keyindex in dict.jl:480: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="987.8747026169707" y="90.0" width="5.614591593973046" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('ht_keyindex in dict.jl:488: 0.5% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="993.4892942109437" y="90.0" width="0.9357652656620985" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('ht_keyindex in dict.jl:488: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="994.4250594766058" y="90.0" width="2.807295796986523" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('getindex in dict.jl:503: 0.2% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="997.2323552735924" y="90.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('getindex in dict.jl:503: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1145.0832672482156" y="90.0" width="3.7430610626488487" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('fpsort! in sort.jl:426: 0.3% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="1148.8263283108645" y="90.0" width="0.9357652656619848" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('fpsort! in sort.jl:428: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1149.7620935765265" y="90.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('fpsort! in sort.jl:429: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1150.6978588421887" y="90.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('fpsort! in sort.jl:429: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1151.633624107851" y="90.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('fpsort! in sort.jl:431: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1152.569389373513" y="90.0" width="11.229183187946091" height="15.0" fill="rgb(86,91,70)" rx="2" ry="2" onmouseover="s('fpsort! in sort.jl:438: 1.0% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="1163.7985725614592" y="90.0" width="13.100713719270288" height="15.0" fill="rgb(86,91,70)" rx="2" ry="2" onmouseover="s('fpsort! in sort.jl:439: 1.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="1178.770816812054" y="90.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('copy! in linalg/blas.jl:577: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1179.7065820777161" y="90.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('checkbounds in abstractarray.jl:74: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="811.01506740682" y="75.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('ht_keyindex in dict.jl:477: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="811.9508326724822" y="75.0" width="1.8715305313243107" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('ht_keyindex in dict.jl:480: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="813.8223632038065" y="75.0" width="3.743061062648735" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('ht_keyindex in dict.jl:488: 0.3% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="994.4250594766058" y="75.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('ht_keyindex in dict.jl:477: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="995.360824742268" y="75.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('ht_keyindex in dict.jl:480: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="996.2965900079303" y="75.0" width="0.9357652656620985" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('ht_keyindex in dict.jl:488: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1145.0832672482156" y="75.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('nans2right! in sort.jl:403: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1146.0190325138778" y="75.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('nans2right! in sort.jl:408: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1146.95479777954" y="75.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('nans2right! in sort.jl:411: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1147.8905630452023" y="75.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('nans2right! in sort.jl:411: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1152.569389373513" y="75.0" width="1.8715305313244244" height="15.0" fill="rgb(176,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:259: 0.2% of all samples (50.0% in self; 50.0% in children)')" onmouseout="c()"/><rect x="1154.4409199048375" y="75.0" width="0.9357652656619848" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:264: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1155.3766851704995" y="75.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:267: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1156.3124504361617" y="75.0" width="7.48612212529747" height="15.0" fill="rgb(244,91,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:269: 0.6% of all samples (87.5% in self; 12.5% in children)')" onmouseout="c()"/><rect x="1163.7985725614592" y="75.0" width="0.9357652656622122" height="15.0" fill="rgb(-274,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:259: 0.1% of all samples (-200.0% in self; 300.0% in children)')" onmouseout="c()"/><rect x="1164.7343378271214" y="75.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:263: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1165.6701030927836" y="75.0" width="0.9357652656619848" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:264: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1166.6058683584456" y="75.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:264: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1167.5416336241078" y="75.0" width="1.8715305313244244" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:264: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1169.4131641554322" y="75.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:264: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1170.3489294210945" y="75.0" width="6.550356859635031" height="15.0" fill="rgb(189,91,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:269: 0.6% of all samples (57.1% in self; 42.9% in children)')" onmouseout="c()"/><rect x="813.8223632038065" y="60.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('isequal in operators.jl:13: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1152.569389373513" y="60.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:241: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1153.5051546391753" y="60.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:244: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1156.3124504361617" y="60.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:259: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1157.248215701824" y="60.0" width="1.8715305313244244" height="15.0" fill="rgb(176,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:259: 0.2% of all samples (50.0% in self; 50.0% in children)')" onmouseout="c()"/><rect x="1159.1197462331484" y="60.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:264: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1160.0555114988106" y="60.0" width="0.9357652656619848" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:264: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1160.9912767644726" y="60.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:264: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1161.9270420301348" y="60.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:266: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1162.862807295797" y="60.0" width="0.9357652656622122" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:269: 0.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="1163.7985725614592" y="60.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:252: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1170.3489294210945" y="60.0" width="0.9357652656619848" height="15.0" fill="rgb(-274,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:259: 0.1% of all samples (-200.0% in self; 300.0% in children)')" onmouseout="c()"/><rect x="1171.2846946867564" y="60.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:263: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1172.2204599524187" y="60.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:263: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1173.1562252180809" y="60.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:264: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1174.091990483743" y="60.0" width="2.807295796986409" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:269: 0.2% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="1157.248215701824" y="45.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:245: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1158.1839809674861" y="45.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:252: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1162.862807295797" y="45.0" width="0.9357652656622122" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:259: 0.1% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="1170.3489294210945" y="45.0" width="0.9357652656619848" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:245: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1174.091990483743" y="45.0" width="2.807295796986409" height="15.0" fill="rgb(86,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:259: 0.2% of all samples (0.0% in self; 100.0% in children)')" onmouseout="c()"/><rect x="1162.862807295797" y="30.0" width="0.9357652656622122" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:243: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1174.091990483743" y="30.0" width="1.8715305313244244" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:244: 0.2% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/><rect x="1175.9635210150675" y="30.0" width="0.9357652656619848" height="15.0" fill="rgb(266,90,70)" rx="2" ry="2" onmouseover="s('sort! in sort.jl:252: 0.1% of all samples (100.0% in self; 0.0% in children)')" onmouseout="c()"/>
</svg>
module ProfileView
export root
global root
# If IJulia is available, don't use TK
useTk = false
if isdefined(Main, :IJulia)
useTk = false
end
if useTk
using Tk, Color, Base.Graphics
import Cairo
end
using Color, Base.Graphics
import Base: contains, isequal, show
include("tree.jl")
include("pvtree.jl")
if useTk
include(joinpath(Pkg.dir(), "ImageView", "src", "rubberband.jl")) # for zoom
end
using .Tree
using .PVTree
immutable TagData
ip::Uint
status::Int
end
TagData(ip::Integer, status::Integer) = TagData(uint(ip), int(status))
const TAGNONE = TagData(0, -1)
const bkg = color("black")
const fontcolor = color("white")
const gccolor = color("red")
const colors = distinguishable_colors(13, [bkg,fontcolor,gccolor])[4:end]
if useTk
type ZoomCanvas
bb::BoundingBox # in user-coordinates
c::Canvas
end
end
if useTk
function view(data = Profile.fetch(); C = false, colorgc = true, fontsize = 12, combine = true)
bt, counts = Profile.tree_aggregate(data)
if isempty(counts)
Profile.warning_empty()
return
end
len = Int[length(x) for x in bt]
keep = len .> 0
bt = bt[keep]
counts = counts[keep]
# Do code address lookups on all unique instruction pointers
uip = unique(vcat(bt...))
nuip = length(uip)
lkupdict = Dict(uip, 1:nuip)
lkupC = [Profile.lookup(ip, true) for ip in uip]
lkupJ = [Profile.lookup(ip, false) for ip in uip]
lidict = Dict(uip, lkupC)
isjl = Dict(uip, [lkupC[i].line == lkupJ[i].line for i = 1:nuip])
isgc = Dict(uip, [lkupC[i].func == "jl_gc_collect" for i = 1:nuip])
isjl[uint(0)] = false # needed for root below
isgc[uint(0)] = false
p = Profile.liperm(lkupC)
rank = similar(p)
rank[p] = 1:length(p)
ip2so = Dict(uip, rank)
so2ip = Dict(rank, uip)
# Build the graph
level = 0
w = sum(counts)
root = Tree.Node(PVData(1:w))
PVTree.buildgraph!(root, bt, counts, 0, ip2so, so2ip, lidict)
PVTree.setstatus!(root, isgc)
# Tree.showedges(STDOUT, root, x -> string(get(lidict, x.ip, "root"), ", hspan = ", x.hspan, ", status = ", x.status))
# Tree.showedges(STDOUT, root, x -> string(get(lidict, x.ip, "root"), ", status = ", x.status))
# Tree.showedges(STDOUT, root, x -> x.status == 0 ? nothing : string(get(lidict, x.ip, "root"), ", status = ", x.status))
# checkidentity(ip2so, so2ip)
# checkcontains(root, ip2so, so2ip, lidict)
# checkstatus(root, isgc, isjl, C, lidict)
counts = zeros(Int, length(uip))
if !C
PVTree.prunegraph!(root, isjl, lidict, ip2so, counts)
end
# for ip in uip
# println(counts[ip2so[ip]], ": ", lidict[ip])
# end
# if !C
# havegc = any([isgc[ip] for ip in uip])
# if havegc
# @assert checkprunedgc(root, false)
# end
# end
# println("\nPruned:")
# Tree.showedges(STDOUT, root, x -> string(get(lidict, x.ip, "root"), ", status = ", x.status))
# Generate a "tagged" image
rowtags = {fill(TAGNONE, w)}
buildtags!(rowtags, root, 1)
imgtags = hcat(rowtags...)
img = buildimg(imgtags, colors, bkg, gccolor, colorgc, combine, lidict)
img24 = [convert(Uint32, convert(RGB24, img[i,j])) for i = 1:size(img,1), j = size(img,2):-1:1]'
surf = Cairo.CairoRGBSurface(img24)
imw = size(img24,2)
imh = size(img24,1)
# Display in a window
win = Toplevel("Profile", 300, 300)
f = Frame(win)
pack(f, expand = true, fill = "both")
c = Canvas(f)
pack(c, expand = true, fill = "both")
czoom = ZoomCanvas(BoundingBox(0, imw, 0, imh), c)
c.mouse.button1press = (c, x, y) -> rubberband_start(c, x, y, (c, bb) -> zoom_bb(czoom, bb))
bind(c, "<Double-Button-1>", (path,x,y)->zoom_reset(czoom))
lasttextbb = BoundingBox(1,0,1,0)
imgbb = BoundingBox(0, imw, 0, imh)
function zoom_bb(czoom::ZoomCanvas, bb::BoundingBox)
czoom.bb = bb & imgbb
redraw(czoom.c)
reveal(czoom.c)
Tk.update()
end
function zoom_reset(czoom::ZoomCanvas)
czoom.bb = imgbb
redraw(czoom.c)
reveal(czoom.c)
Tk.update()
end
function redraw(c)
ctx = getgc(c)
w = width(c)
h = height(c)
cbb = czoom.bb
winbb = BoundingBox(0, w, 0, h)
set_coords(ctx, winbb, cbb)
rectangle(ctx, cbb)
set_source(ctx, surf)
p = Cairo.get_source(ctx)
Cairo.pattern_set_filter(p, Cairo.FILTER_NEAREST)
fill(ctx)
end
# From a given position, find the underlying tag
function gettag(xu, yu)
x = iceil(xu)
y = iceil(yu)
Y = size(imgtags, 2)
x = max(1, min(x, size(imgtags, 1)))
y = max(1, min(y, Y))
imgtags[x,Y-y+1]
end
c.resize = function (_)
redraw(c)
reveal(c)
Tk.update()
end
# Hover over a block and see the source line
c.mouse.motion = function (c, xd, yd)
# Repair image from ovewritten text
ctx = getgc(c)
w = width(c)
if width(lasttextbb) > 0
h = height(c)
winbb = BoundingBox(0, w, 0, h)
set_coords(ctx, winbb, czoom.bb)
rectangle(ctx, lasttextbb)
set_source(ctx, surf)
p = Cairo.get_source(ctx)
Cairo.pattern_set_filter(p, Cairo.FILTER_NEAREST)
fill(ctx)
end
# Write the info
xu, yu = device_to_user(ctx, xd, yd)
tag = gettag(xu, yu)
if tag != TAGNONE
li = lidict[tag.ip]
str = string(basename(li.file), ", ", li.func, ": line ", li.line)
set_source(ctx, fontcolor)
Cairo.set_font_face(ctx, "sans-serif $(fontsize)px")
lasttextbb = Cairo.text(ctx, xu, yu, str, halign = xd < w/3 ? "left" : xd < 2w/3 ? "center" : "right")
end
reveal(c)
Tk.update()
end
# Right-click prints the full path, function, and line to the console
c.mouse.button3press = function (c, xd, yd)
ctx = getgc(c)
xu, yu = device_to_user(ctx, xd, yd)
tag = gettag(xu, yu)
if tag != TAGNONE
li = lidict[tag.ip]
println(li.file, ", ", li.func, ": line ", li.line)
end
end
set_size(win, 300, 300)
c.resize(c)
nothing
end
end
function svgheader(f::IO; width=1200, height=706, font="Verdana")
y_msg = height - 17
print(f, """<?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="$(width)" height="$(height)" onload="init(evt)" viewBox="0 0 $(width) $(height)" xmlns="http://www.w3.org/2000/svg" >
<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">
rect[rx]:hover { stroke:black; stroke-width:1; }
text:hover { stroke:black; stroke-width:1; stroke-opacity:0.35; }
</style>
<script type="text/ecmascript">
<![CDATA[
var details;
function init(evt) { details = document.getElementById("details").firstChild; }
function s(info) { details.nodeValue = info; }
function c() { details.nodeValue = ' '; }
]]>
</script>
<rect x="0.0" y="0" width="$(width).0" height="$(height).0" fill="url(#background)" />
<text text-anchor="middle" x="600" y="24" font-size="17" font-family="$(font)" fill="rgb(0,0,0)" >Flame Graph</text>
<text text-anchor="left" x="10" y="$y_msg" font-size="12" font-family="$(font)" fill="rgb(0,0,0)" >Function:</text>
<text text-anchor="" x="70" y="$y_msg" font-size="12" font-family="$(font)" fill="rgb(0,0,0)" id="details" > </text>
""")
end
function viewsvg(data = Profile.fetch(); C = false, colorgc = true, fontsize = 12, combine = true)
bt, counts = Profile.tree_aggregate(data)
if isempty(counts)
Profile.warning_empty()
return
end
len = Int[length(x) for x in bt]
keep = len .> 0
bt = bt[keep]
counts = counts[keep]
# Do code address lookups on all unique instruction pointers
uip = unique(vcat(bt...))
nuip = length(uip)
lkupdict = Dict(uip, 1:nuip)
lkupC = [Profile.lookup(ip, true) for ip in uip]
lkupJ = [Profile.lookup(ip, false) for ip in uip]
lidict = Dict(uip, lkupC)
isjl = Dict(uip, [lkupC[i].line == lkupJ[i].line for i = 1:nuip])
isgc = Dict(uip, [lkupC[i].func == "jl_gc_collect" for i = 1:nuip])
isjl[uint(0)] = false # needed for root below
isgc[uint(0)] = false
p = Profile.liperm(lkupC)
rank = similar(p)
rank[p] = 1:length(p)
ip2so = Dict(uip, rank)
so2ip = Dict(rank, uip)
# Build the graph
level = 0
w = sum(counts)
root = Tree.Node(PVData(1:w))
PVTree.buildgraph!(root, bt, counts, 0, ip2so, so2ip, lidict)
PVTree.setstatus!(root, isgc)
# Tree.showedges(STDOUT, root, x -> string(get(lidict, x.ip, "root"), ", hspan = ", x.hspan, ", status = ", x.status))
counts = zeros(Int, length(uip))
if !C
PVTree.prunegraph!(root, isjl, lidict, ip2so, counts)
end
# for ip in uip
# println(counts[ip2so[ip]], ": ", lidict[ip])
# end
# if !C
# havegc = any([isgc[ip] for ip in uip])
# if havegc
# @assert checkprunedgc(root, false)
# end
# end
# println("\nPruned:")
# Tree.showedges(STDOUT, root, x -> string(get(lidict, x.ip, "root"), ", status = ", x.status))
# Generate a "tagged" image
rowtags = {fill(TAGNONE, w)}
buildtags!(rowtags, root, 1)
imgtags = hcat(rowtags...)
img = buildimg(imgtags, colors, bkg, gccolor, colorgc, combine, lidict)
chsamples = zeros(nuip)
function childsamples!(chsamples, parent)
samples = 0
for child in parent
samples += length(child.data.hspan)
end
if haskey(lkupdict, parent.data.ip)
chsamples[lkupdict[parent.data.ip]] = samples
end
for child in parent
childsamples!(chsamples, child)
end
end
chsamples = zeros(nuip)
childsamples!(chsamples, root)
ncols, nrows = size(img)
leftmargin = rightmargin = 10
width = 1200
topmargin = 30
botmargin = 40
rowheight = 15
height = ceil(rowheight*nrows + botmargin + topmargin)
xstep = (width - (leftmargin + rightmargin)) / ncols
ystep = (height - (topmargin + botmargin)) / nrows
avgcharwidth = 6 # for Verdana 12 pt font
function eschtml(str)
s = replace(str, '<', "&lt;")
s = replace(s, '>', "&gt;")
s = replace(s, '&', "&amp;")
s
end
function printrec(f, samples, xstart, xend, y, tag, rgb)
width = xend - xstart
tagnum = lkupdict[tag.ip]
count = counts[tagnum]
li = lidict[tag.ip]
self = samples - chsamples[lkupdict[tag.ip]]
selfpct = round(100*self/samples,1)
samplepct = round(100*samples/ncols,1)
info = "$(li.func) in $(li.file):$(li.line): $(samplepct)% of all samples ($(selfpct)% in self; $(100-selfpct)% in children)"
shortinfo = info
if avgcharwidth*3 > width
shortinfo = ""
elseif length(shortinfo) * avgcharwidth > width
nchars = int(width/avgcharwidth)-2
shortinfo = eschtml(info[1:nchars] * "..")
end
info = eschtml(info)
red = iround(selfpct * 180 /100) + 86
green = iround(samplepct * 90 / 100) + 90
blue = 70
print(f, """<rect x="$xstart" y="$y" width="$width" height="$ystep" fill="rgb($red,$green,$blue)" rx="2" ry="2" onmouseover="s('$info')" onmouseout="c()"/>""")
if shortinfo != ""
println(f, """\n<text text-anchor="" x="$(xstart+4)" y="$(y+11.5)" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" onmouseover="s('$info')" onmouseout="c()">\n$shortinfo\n</text>""")
end
end
open("profile.svg", "w") do f
svgheader(f, width=width, height=height)
# rectangles are on a grid and split across multiple columns (must span similar adjacent ones together)
for r in 1:nrows
# top of rectangle:
y = height - r*ystep - botmargin
# local vars:
prevtag = TAGNONE
xstart = xend = 0.0
for c in 1:ncols
tag = rowtags[r][c]
if prevtag == TAGNONE && prevtag != tag
# Very first in span
xstart = (c-1) * xstep + leftmargin
elseif tag != prevtag && tag != TAGNONE && prevtag != TAGNONE
# End of old span and start of new one
xend = (c-1) * xstep + leftmargin
samples = int(round((xend - xstart)/xstep))
printrec(f, samples, xstart, xend, y, prevtag, img[c-1,r])
xstart = xend
elseif tag == TAGNONE && tag != prevtag
# at end of span and start of nothing
xend = (c-1) * xstep + leftmargin
samples = int(round((xend - xstart)/xstep))
printrec(f, samples, xstart, xend, y, prevtag, img[c-1,r])
xstart = 0.0
elseif c == ncols && tag != TAGNONE
# end of span at last element of row
xend = (c-1) * xstep + leftmargin
samples = int(round((xend - xstart)/xstep))
printrec(f, samples, xstart, xend, y, tag, img[c,r])
xstart = 0.0
else
# in middle of span
end
prevtag = tag
end
end
println(f, "\n</svg>")
end
end
if !useTk
const view = viewsvg
end
function buildtags!(rowtags, parent, level)
if isleaf(parent)
return
end
w = length(rowtags[1])
if length(rowtags) < level
push!(rowtags, fill(TAGNONE, w))
end
t = rowtags[level]
for c in parent
t[c.data.hspan] = TagData(c.data.ip, c.data.status)
buildtags!(rowtags, c, level+1)
end
end
function buildimg(imgtags, colors, bkg, gccolor, colorgc::Bool, combine::Bool, lidict)
w = size(imgtags,1)
h = size(imgtags,2)
img = fill(bkg, w, h)
colorlen = int(length(colors)/2)
for j = 1:h
coloroffset = colorlen*iseven(j)
colorindex = 1
lasttag = TAGNONE
status = 0
first = 0
nextcolor = colors[coloroffset + colorindex]
for i = 1:w
t = imgtags[i,j]
if t != TAGNONE
if t != lasttag && (lasttag == TAGNONE || !(combine && lidict[lasttag.ip] == lidict[t.ip]))
if first != 0
colorindex = fillrow!(img, j, first:i-1, colorindex, colorlen, nextcolor, gccolor, status & colorgc)
nextcolor = colors[coloroffset + colorindex]
status = t.status
end
first = i
lasttag = t
else
status |= t.status
end
else
if first != 0
# We transitioned from tag->none, render the previous range
colorindex = fillrow!(img, j, first:i-1, colorindex, colorlen, nextcolor, gccolor, status & colorgc)
nextcolor = colors[coloroffset + colorindex]
first = 0
lasttag = TAGNONE
end
end
end
if first != 0
# We got to the end of a row, render the previous range
fillrow!(img, j, first:w, colorindex, colorlen, nextcolor, gccolor, status & colorgc)
end
end
img
end
function fillrow!(img, j, rng::Range1{Int}, colorindex, colorlen, regcolor, gccolor, status)
if status > 0
img[rng,j] = gccolor
return colorindex
else
img[rng,j] = regcolor
return mod1(colorindex+1, colorlen)
end
end
#### Debugging code
function checkidentity(ip2so, so2ip)
for (k,v) in ip2so
@assert so2ip[v] == k
end
end
function checkcontains(root, ip2so, so2ip, lidict)
flag = contains(root, ip2so)
if !all(flag)
missing = find(!flag)
println("missing ips:")
for i in missing
println(lidict[so2ip[i]])
end
error("Internal error: the tree does not contain all ips")
end
end
# This skips the parent, gets everything else
# (to avoid a problem with root with ip=0)
function contains(parent::Node, ip2so::Dict)
ret = Array(Bool, 0)
contains!(ret, parent, ip2so)
return ret
end
function contains!(ret, parent::Node, ip2so::Dict)
for c in parent
indx = ip2so[c.data.ip]
setindexsafe!(ret, indx, true)
contains!(ret, c, ip2so)
end
end
function setindexsafe!(a, i::Integer, val)
if i > length(a)
insert!(a, i, val)
else
a[i] = val
end
end
function checkstatus(parent::Node, isgc::Dict, isjl::Dict, C, lidict)
if isgc[parent.data.ip] && parent.data.status == 0
@show lidict[parent.data.ip]
error("gc should be set, and it isn't")
end
for c in parent
checkstatus(c, isgc, isjl, C, lidict)
end
end
function checkprunedgc(parent::Node, tf::Bool)
tf |= parent.data.status > 0
if !tf
for c in parent
tf = checkprunedgc(c, tf)
end
end
tf
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment