Last active
December 24, 2015 15:29
-
-
Save GlenHertz/6821100 to your computer and use it in GitHub Desktop.
Julia SVG Flame Graph
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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, '<', "<") | |
s = replace(s, '>', ">") | |
s = replace(s, '&', "&") | |
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