Skip to content

Instantly share code, notes, and snippets.

@fwbrasil
Created June 10, 2023 10:09
Show Gist options
  • Save fwbrasil/32f9a7287285e85c72522b94d9624b1f to your computer and use it in GitHub Desktop.
Save fwbrasil/32f9a7287285e85c72522b94d9624b1f to your computer and use it in GitHub Desktop.
[
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.BroadFlatMapBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 49629.5781341893,
"scoreError" : 24055.908316492303,
"scoreConfidence" : [
25573.669817697,
73685.48645068161
],
"scorePercentiles" : {
"0.0" : 48314.63781629548,
"50.0" : 49622.31773734294,
"90.0" : 50951.77884892948,
"95.0" : 50951.77884892948,
"99.0" : 50951.77884892948,
"99.9" : 50951.77884892948,
"99.99" : 50951.77884892948,
"99.999" : 50951.77884892948,
"99.9999" : 50951.77884892948,
"100.0" : 50951.77884892948
},
"scoreUnit" : "ops/s",
"rawData" : [
[
50951.77884892948,
49622.31773734294,
48314.63781629548
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.BroadFlatMapBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 206782.86224611898,
"scoreError" : 1357.0183594784605,
"scoreConfidence" : [
205425.84388664053,
208139.88060559743
],
"scorePercentiles" : {
"0.0" : 206735.3770525951,
"50.0" : 206744.62370390762,
"90.0" : 206868.58598185427,
"95.0" : 206868.58598185427,
"99.0" : 206868.58598185427,
"99.9" : 206868.58598185427,
"99.99" : 206868.58598185427,
"99.999" : 206868.58598185427,
"99.9999" : 206868.58598185427,
"100.0" : 206868.58598185427
},
"scoreUnit" : "ops/s",
"rawData" : [
[
206868.58598185427,
206744.62370390762,
206735.3770525951
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.ChainedForkBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1203.3213926344545,
"scoreError" : 1511.2919758145947,
"scoreConfidence" : [
-307.97058318014024,
2714.613368449049
],
"scorePercentiles" : {
"0.0" : 1108.5196854602762,
"50.0" : 1239.6868811272518,
"90.0" : 1261.7576113158357,
"95.0" : 1261.7576113158357,
"99.0" : 1261.7576113158357,
"99.9" : 1261.7576113158357,
"99.99" : 1261.7576113158357,
"99.999" : 1261.7576113158357,
"99.9999" : 1261.7576113158357,
"100.0" : 1261.7576113158357
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1261.7576113158357,
1239.6868811272518,
1108.5196854602762
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.ChainedForkBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1239.4298840608171,
"scoreError" : 1541.0203515541739,
"scoreConfidence" : [
-301.59046749335675,
2780.450235614991
],
"scorePercentiles" : {
"0.0" : 1143.3605801689828,
"50.0" : 1272.8717836252354,
"90.0" : 1302.057288388233,
"95.0" : 1302.057288388233,
"99.0" : 1302.057288388233,
"99.9" : 1302.057288388233,
"99.99" : 1302.057288388233,
"99.999" : 1302.057288388233,
"99.9999" : 1302.057288388233,
"100.0" : 1302.057288388233
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1143.3605801689828,
1302.057288388233,
1272.8717836252354
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.CollectAllBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 23286.567053170143,
"scoreError" : 12395.243691408996,
"scoreConfidence" : [
10891.323361761148,
35681.81074457914
],
"scorePercentiles" : {
"0.0" : 22509.739554264524,
"50.0" : 23579.99244270391,
"90.0" : 23769.96916254199,
"95.0" : 23769.96916254199,
"99.0" : 23769.96916254199,
"99.9" : 23769.96916254199,
"99.99" : 23769.96916254199,
"99.999" : 23769.96916254199,
"99.9999" : 23769.96916254199,
"100.0" : 23769.96916254199
},
"scoreUnit" : "ops/s",
"rawData" : [
[
23579.99244270391,
23769.96916254199,
22509.739554264524
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.CollectAllBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 40824.09602791024,
"scoreError" : 419.66804809329847,
"scoreConfidence" : [
40404.42797981694,
41243.764076003536
],
"scorePercentiles" : {
"0.0" : 40800.1134304543,
"50.0" : 40826.19876354798,
"90.0" : 40845.97588972841,
"95.0" : 40845.97588972841,
"99.0" : 40845.97588972841,
"99.9" : 40845.97588972841,
"99.99" : 40845.97588972841,
"99.999" : 40845.97588972841,
"99.9999" : 40845.97588972841,
"100.0" : 40845.97588972841
},
"scoreUnit" : "ops/s",
"rawData" : [
[
40800.1134304543,
40845.97588972841,
40826.19876354798
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.CountdownLatchBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 11292.525494663789,
"scoreError" : 1398.8955986060673,
"scoreConfidence" : [
9893.629896057722,
12691.421093269855
],
"scorePercentiles" : {
"0.0" : 11247.250467695249,
"50.0" : 11249.267837738345,
"90.0" : 11381.058178557774,
"95.0" : 11381.058178557774,
"99.0" : 11381.058178557774,
"99.9" : 11381.058178557774,
"99.99" : 11381.058178557774,
"99.999" : 11381.058178557774,
"99.9999" : 11381.058178557774,
"100.0" : 11381.058178557774
},
"scoreUnit" : "ops/s",
"rawData" : [
[
11247.250467695249,
11381.058178557774,
11249.267837738345
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.CountdownLatchBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 11214.541526545605,
"scoreError" : 660.9759247327319,
"scoreConfidence" : [
10553.565601812874,
11875.517451278336
],
"scorePercentiles" : {
"0.0" : 11175.599093951178,
"50.0" : 11220.774489451811,
"90.0" : 11247.25099623383,
"95.0" : 11247.25099623383,
"99.0" : 11247.25099623383,
"99.9" : 11247.25099623383,
"99.99" : 11247.25099623383,
"99.999" : 11247.25099623383,
"99.9999" : 11247.25099623383,
"100.0" : 11247.25099623383
},
"scoreUnit" : "ops/s",
"rawData" : [
[
11247.25099623383,
11175.599093951178,
11220.774489451811
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.DeepBindBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 20594.291424917043,
"scoreError" : 6728.585144868269,
"scoreConfidence" : [
13865.706280048773,
27322.876569785312
],
"scorePercentiles" : {
"0.0" : 20267.002849005254,
"50.0" : 20521.954316237974,
"90.0" : 20993.917109507896,
"95.0" : 20993.917109507896,
"99.0" : 20993.917109507896,
"99.9" : 20993.917109507896,
"99.99" : 20993.917109507896,
"99.999" : 20993.917109507896,
"99.9999" : 20993.917109507896,
"100.0" : 20993.917109507896
},
"scoreUnit" : "ops/s",
"rawData" : [
[
20267.002849005254,
20993.917109507896,
20521.954316237974
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.DeepBindBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 40811.783857089846,
"scoreError" : 833.7785273106333,
"scoreConfidence" : [
39978.00532977921,
41645.56238440048
],
"scorePercentiles" : {
"0.0" : 40771.90620267048,
"50.0" : 40801.789059017814,
"90.0" : 40861.65630958125,
"95.0" : 40861.65630958125,
"99.0" : 40861.65630958125,
"99.9" : 40861.65630958125,
"99.99" : 40861.65630958125,
"99.999" : 40861.65630958125,
"99.9999" : 40861.65630958125,
"100.0" : 40861.65630958125
},
"scoreUnit" : "ops/s",
"rawData" : [
[
40771.90620267048,
40861.65630958125,
40801.789059017814
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.DeepBindMapBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1458.8442602065097,
"scoreError" : 135.79833112562284,
"scoreConfidence" : [
1323.045929080887,
1594.6425913321325
],
"scorePercentiles" : {
"0.0" : 1451.0431589243149,
"50.0" : 1459.6201075938368,
"90.0" : 1465.8695141013775,
"95.0" : 1465.8695141013775,
"99.0" : 1465.8695141013775,
"99.9" : 1465.8695141013775,
"99.99" : 1465.8695141013775,
"99.999" : 1465.8695141013775,
"99.9999" : 1465.8695141013775,
"100.0" : 1465.8695141013775
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1451.0431589243149,
1459.6201075938368,
1465.8695141013775
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.DeepBindMapBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1590.141208074817,
"scoreError" : 7.156567953446687,
"scoreConfidence" : [
1582.9846401213704,
1597.2977760282638
],
"scorePercentiles" : {
"0.0" : 1589.8119764349335,
"50.0" : 1590.0364077262261,
"90.0" : 1590.5752400632916,
"95.0" : 1590.5752400632916,
"99.0" : 1590.5752400632916,
"99.9" : 1590.5752400632916,
"99.99" : 1590.5752400632916,
"99.999" : 1590.5752400632916,
"99.9999" : 1590.5752400632916,
"100.0" : 1590.5752400632916
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1589.8119764349335,
1590.0364077262261,
1590.5752400632916
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.EnqueueDequeueBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1870.9294786705925,
"scoreError" : 344.58313440948393,
"scoreConfidence" : [
1526.3463442611087,
2215.5126130800763
],
"scorePercentiles" : {
"0.0" : 1851.0366113363004,
"50.0" : 1873.1329791916555,
"90.0" : 1888.6188454838223,
"95.0" : 1888.6188454838223,
"99.0" : 1888.6188454838223,
"99.9" : 1888.6188454838223,
"99.99" : 1888.6188454838223,
"99.999" : 1888.6188454838223,
"99.9999" : 1888.6188454838223,
"100.0" : 1888.6188454838223
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1851.0366113363004,
1873.1329791916555,
1888.6188454838223
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.EnqueueDequeueBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1769.4969048031164,
"scoreError" : 234.52701629700675,
"scoreConfidence" : [
1534.9698885061098,
2004.023921100123
],
"scorePercentiles" : {
"0.0" : 1755.8061800673947,
"50.0" : 1771.3744054725937,
"90.0" : 1781.310128869361,
"95.0" : 1781.310128869361,
"99.0" : 1781.310128869361,
"99.9" : 1781.310128869361,
"99.99" : 1781.310128869361,
"99.999" : 1781.310128869361,
"99.9999" : 1781.310128869361,
"100.0" : 1781.310128869361
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1755.8061800673947,
1781.310128869361,
1771.3744054725937
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.ForkManyBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 594.9207105310879,
"scoreError" : 85.28318842405722,
"scoreConfidence" : [
509.6375221070307,
680.2038989551452
],
"scorePercentiles" : {
"0.0" : 589.5342585032344,
"50.0" : 597.3105542927076,
"90.0" : 597.9173187973221,
"95.0" : 597.9173187973221,
"99.0" : 597.9173187973221,
"99.9" : 597.9173187973221,
"99.99" : 597.9173187973221,
"99.999" : 597.9173187973221,
"99.9999" : 597.9173187973221,
"100.0" : 597.9173187973221
},
"scoreUnit" : "ops/s",
"rawData" : [
[
597.3105542927076,
589.5342585032344,
597.9173187973221
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.ForkManyBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 585.6696392273465,
"scoreError" : 68.24864634896288,
"scoreConfidence" : [
517.4209928783836,
653.9182855763094
],
"scorePercentiles" : {
"0.0" : 582.1031833127324,
"50.0" : 585.342200045038,
"90.0" : 589.5635343242691,
"95.0" : 589.5635343242691,
"99.0" : 589.5635343242691,
"99.9" : 589.5635343242691,
"99.99" : 589.5635343242691,
"99.999" : 589.5635343242691,
"99.9999" : 589.5635343242691,
"100.0" : 589.5635343242691
},
"scoreUnit" : "ops/s",
"rawData" : [
[
585.342200045038,
589.5635343242691,
582.1031833127324
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.InterruptBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 4231.519826368095,
"scoreError" : 772.4437508341401,
"scoreConfidence" : [
3459.0760755339547,
5003.963577202235
],
"scorePercentiles" : {
"0.0" : 4183.367328442083,
"50.0" : 4248.268091380145,
"90.0" : 4262.924059282058,
"95.0" : 4262.924059282058,
"99.0" : 4262.924059282058,
"99.9" : 4262.924059282058,
"99.99" : 4262.924059282058,
"99.999" : 4262.924059282058,
"99.9999" : 4262.924059282058,
"100.0" : 4262.924059282058
},
"scoreUnit" : "ops/s",
"rawData" : [
[
4248.268091380145,
4183.367328442083,
4262.924059282058
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.InterruptBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 2768.7358027667033,
"scoreError" : 13456.879927499169,
"scoreConfidence" : [
-10688.144124732466,
16225.615730265872
],
"scorePercentiles" : {
"0.0" : 1919.6416385408688,
"50.0" : 3135.3332557065078,
"90.0" : 3251.2325140527328,
"95.0" : 3251.2325140527328,
"99.0" : 3251.2325140527328,
"99.9" : 3251.2325140527328,
"99.99" : 3251.2325140527328,
"99.999" : 3251.2325140527328,
"99.9999" : 3251.2325140527328,
"100.0" : 3251.2325140527328
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1919.6416385408688,
3135.3332557065078,
3251.2325140527328
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.NarrowBindBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 10219.96492780556,
"scoreError" : 4641.9038543464585,
"scoreConfidence" : [
5578.061073459102,
14861.868782152018
],
"scorePercentiles" : {
"0.0" : 10009.80236790973,
"50.0" : 10147.246657250094,
"90.0" : 10502.845758256859,
"95.0" : 10502.845758256859,
"99.0" : 10502.845758256859,
"99.9" : 10502.845758256859,
"99.99" : 10502.845758256859,
"99.999" : 10502.845758256859,
"99.9999" : 10502.845758256859,
"100.0" : 10502.845758256859
},
"scoreUnit" : "ops/s",
"rawData" : [
[
10502.845758256859,
10147.246657250094,
10009.80236790973
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.NarrowBindBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 14301.45434193235,
"scoreError" : 4622.134647160854,
"scoreConfidence" : [
9679.319694771497,
18923.588989093205
],
"scorePercentiles" : {
"0.0" : 14008.919578673846,
"50.0" : 14445.229289460447,
"90.0" : 14450.214157662758,
"95.0" : 14450.214157662758,
"99.0" : 14450.214157662758,
"99.9" : 14450.214157662758,
"99.99" : 14450.214157662758,
"99.999" : 14450.214157662758,
"99.9999" : 14450.214157662758,
"100.0" : 14450.214157662758
},
"scoreUnit" : "ops/s",
"rawData" : [
[
14445.229289460447,
14450.214157662758,
14008.919578673846
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.NarrowBindMapBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1645.0567812614165,
"scoreError" : 292.82249705064316,
"scoreConfidence" : [
1352.2342842107732,
1937.8792783120598
],
"scorePercentiles" : {
"0.0" : 1632.9240190090784,
"50.0" : 1638.9898004415488,
"90.0" : 1663.2565243336228,
"95.0" : 1663.2565243336228,
"99.0" : 1663.2565243336228,
"99.9" : 1663.2565243336228,
"99.99" : 1663.2565243336228,
"99.999" : 1663.2565243336228,
"99.9999" : 1663.2565243336228,
"100.0" : 1663.2565243336228
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1638.9898004415488,
1632.9240190090784,
1663.2565243336228
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.NarrowBindMapBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1680.8837522587362,
"scoreError" : 19.55871498746827,
"scoreConfidence" : [
1661.325037271268,
1700.4424672462044
],
"scorePercentiles" : {
"0.0" : 1680.0083784146575,
"50.0" : 1680.56338627112,
"90.0" : 1682.0794920904304,
"95.0" : 1682.0794920904304,
"99.0" : 1682.0794920904304,
"99.9" : 1682.0794920904304,
"99.99" : 1682.0794920904304,
"99.999" : 1682.0794920904304,
"99.9999" : 1682.0794920904304,
"100.0" : 1682.0794920904304
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1682.0794920904304,
1680.0083784146575,
1680.56338627112
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.PingPongBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 2072.631796539603,
"scoreError" : 68.69217036088122,
"scoreConfidence" : [
2003.9396261787217,
2141.3239669004843
],
"scorePercentiles" : {
"0.0" : 2068.672795955191,
"50.0" : 2073.0550704030843,
"90.0" : 2076.1675232605335,
"95.0" : 2076.1675232605335,
"99.0" : 2076.1675232605335,
"99.9" : 2076.1675232605335,
"99.99" : 2076.1675232605335,
"99.999" : 2076.1675232605335,
"99.9999" : 2076.1675232605335,
"100.0" : 2076.1675232605335
},
"scoreUnit" : "ops/s",
"rawData" : [
[
2073.0550704030843,
2076.1675232605335,
2068.672795955191
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.PingPongBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 2042.1570372222284,
"scoreError" : 197.48197716422035,
"scoreConfidence" : [
1844.675060058008,
2239.6390143864487
],
"scorePercentiles" : {
"0.0" : 2029.737478931255,
"50.0" : 2047.1465486981408,
"90.0" : 2049.5870840372886,
"95.0" : 2049.5870840372886,
"99.0" : 2049.5870840372886,
"99.9" : 2049.5870840372886,
"99.99" : 2049.5870840372886,
"99.999" : 2049.5870840372886,
"99.9999" : 2049.5870840372886,
"100.0" : 2049.5870840372886
},
"scoreUnit" : "ops/s",
"rawData" : [
[
2047.1465486981408,
2049.5870840372886,
2029.737478931255
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.ProducerConsumerBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1825.4905046937383,
"scoreError" : 241.7032823703587,
"scoreConfidence" : [
1583.7872223233796,
2067.193787064097
],
"scorePercentiles" : {
"0.0" : 1813.22189752678,
"50.0" : 1823.710540662986,
"90.0" : 1839.5390758914493,
"95.0" : 1839.5390758914493,
"99.0" : 1839.5390758914493,
"99.9" : 1839.5390758914493,
"99.99" : 1839.5390758914493,
"99.999" : 1839.5390758914493,
"99.9999" : 1839.5390758914493,
"100.0" : 1839.5390758914493
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1823.710540662986,
1839.5390758914493,
1813.22189752678
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.ProducerConsumerBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1769.3567982807442,
"scoreError" : 487.1781308775368,
"scoreConfidence" : [
1282.1786674032073,
2256.534929158281
],
"scorePercentiles" : {
"0.0" : 1738.7859797888916,
"50.0" : 1781.154249184397,
"90.0" : 1788.1301658689433,
"95.0" : 1788.1301658689433,
"99.0" : 1788.1301658689433,
"99.9" : 1788.1301658689433,
"99.99" : 1788.1301658689433,
"99.999" : 1788.1301658689433,
"99.9999" : 1788.1301658689433,
"100.0" : 1788.1301658689433
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1738.7859797888916,
1781.154249184397,
1788.1301658689433
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.SemaphoreBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1242.7992994014246,
"scoreError" : 160.54794341954639,
"scoreConfidence" : [
1082.2513559818783,
1403.347242820971
],
"scorePercentiles" : {
"0.0" : 1235.2666506006713,
"50.0" : 1240.6590619271462,
"90.0" : 1252.4721856764565,
"95.0" : 1252.4721856764565,
"99.0" : 1252.4721856764565,
"99.9" : 1252.4721856764565,
"99.99" : 1252.4721856764565,
"99.999" : 1252.4721856764565,
"99.9999" : 1252.4721856764565,
"100.0" : 1252.4721856764565
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1235.2666506006713,
1240.6590619271462,
1252.4721856764565
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.SemaphoreBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1235.0677844336035,
"scoreError" : 167.0018776382273,
"scoreConfidence" : [
1068.0659067953761,
1402.0696620718309
],
"scorePercentiles" : {
"0.0" : 1225.3894876748402,
"50.0" : 1236.2269217857804,
"90.0" : 1243.5869438401903,
"95.0" : 1243.5869438401903,
"99.0" : 1243.5869438401903,
"99.9" : 1243.5869438401903,
"99.99" : 1243.5869438401903,
"99.999" : 1243.5869438401903,
"99.9999" : 1243.5869438401903,
"100.0" : 1243.5869438401903
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1225.3894876748402,
1243.5869438401903,
1236.2269217857804
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.SuspensionBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 64946.27654078032,
"scoreError" : 14486.47292174755,
"scoreConfidence" : [
50459.80361903277,
79432.74946252788
],
"scorePercentiles" : {
"0.0" : 64065.40485096302,
"50.0" : 65166.33063971334,
"90.0" : 65607.0941316646,
"95.0" : 65607.0941316646,
"99.0" : 65607.0941316646,
"99.9" : 65607.0941316646,
"99.99" : 65607.0941316646,
"99.999" : 65607.0941316646,
"99.9999" : 65607.0941316646,
"100.0" : 65607.0941316646
},
"scoreUnit" : "ops/s",
"rawData" : [
[
64065.40485096302,
65607.0941316646,
65166.33063971334
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.SuspensionBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1112285.653878587,
"scoreError" : 5061.751454453811,
"scoreConfidence" : [
1107223.9024241331,
1117347.405333041
],
"scorePercentiles" : {
"0.0" : 1111966.4919135678,
"50.0" : 1112421.1275319392,
"90.0" : 1112469.3421902545,
"95.0" : 1112469.3421902545,
"99.0" : 1112469.3421902545,
"99.9" : 1112469.3421902545,
"99.99" : 1112469.3421902545,
"99.999" : 1112469.3421902545,
"99.9999" : 1112469.3421902545,
"100.0" : 1112469.3421902545
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1112421.1275319392,
1112469.3421902545,
1111966.4919135678
]
]
},
"secondaryMetrics" : {
}
}
]
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 400px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(25);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,43,3,'all')
f(1,0,43,1,'java/lang/Thread.run')
f(2,0,43,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,43,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,38,1,'java/util/concurrent/FutureTask.run')
f(5,0,38,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,38,1,'java/util/concurrent/FutureTask.run')
f(7,0,38,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,38,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,38,1,'java/lang/reflect/Method.invoke')
f(10,0,38,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,38,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,38,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,38,1,'kyo/bench/jmh_generated/BroadFlatMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,38,1,'kyo/bench/jmh_generated/BroadFlatMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,38,1,'kyo/bench/Bench.forkKyo')
f(16,0,14,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,0,14,2,'kyo.bench.Bench$$anon$1')
f(16,14,17,1,'kyo/bench/Bench.runLoop$2')
f(17,14,3,1,'kyo/bench/Bench$$anon$1.apply')
f(18,14,3,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,14,3,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,14,3,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(21,14,3,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,14,3,2,'kyo.concurrent.scheduler.IOTask')
f(17,17,14,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,17,14,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,17,14,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,17,14,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,17,4,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,17,4,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,17,1,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,18,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,18,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,21,3,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,24,7,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,24,7,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,24,7,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,31,7,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,31,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,31,1,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,32,6,1,'kyo/locals$Locals$.save')
f(18,32,6,2,'kyo.locals$Locals$$anon$3')
f(4,38,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e5f8.run')
f(5,38,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,38,1,1,'kyo/concurrent/scheduler/Coordinator$.jitter')
f(7,38,1,1,'scala/Predef$.long2Long')
f(8,38,1,1,'java/lang/Long.valueOf')
f(9,38,1,2,'java.lang.Long')
f(4,39,4,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,39,4,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,39,4,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,39,4,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,39,4,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,39,4,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,39,4,1,'scala/runtime/ObjectRef.create')
f(11,39,4,2,'scala.runtime.ObjectRef')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 704px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(44);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,194,3,'all')
f(1,0,1,3,'[unknown_Java]')
f(2,0,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(1,1,193,1,'java/lang/Thread.run')
f(2,1,193,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,1,193,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,1,61,1,'java/util/concurrent/FutureTask.run')
f(5,1,61,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,1,61,1,'java/util/concurrent/FutureTask.run')
f(7,1,61,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,1,61,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,1,61,1,'java/lang/reflect/Method.invoke')
f(10,1,61,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,1,61,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,1,61,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,1,61,1,'kyo/bench/jmh_generated/BroadFlatMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,1,61,1,'kyo/bench/jmh_generated/BroadFlatMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,1,61,1,'kyo/bench/Bench.forkKyo',1,0,0)
f(16,1,1,2,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1',1,0,0)
f(17,1,1,2,'kyo/bench/Bench$$Lambda$39.0x0000000800c82da8.apply',1,0,0)
f(18,1,1,2,'kyo/bench/Bench.$anonfun$2',1,0,0)
f(19,1,1,2,'kyo/concurrent/fibers$Fiber.block',1,0,0)
f(16,2,60,1,'kyo/bench/Bench.runLoop$2')
f(17,2,20,1,'kyo/bench/Bench$$anon$1.apply')
f(18,2,20,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,2,20,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,2,19,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(21,2,19,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,2,19,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,2,19,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,2,19,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,2,19,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,2,19,1,'jdk/internal/misc/Unsafe.unpark')
f(27,2,3,3,'Unsafe_Unpark')
f(28,4,1,3,'pthread_mutex_lock')
f(27,5,16,3,'pthread_cond_signal')
f(28,5,16,5,'entry_SYSCALL_64_after_hwframe')
f(29,5,1,5,'__x64_sys_futex')
f(29,6,15,5,'do_syscall_64')
f(30,6,15,5,'__x64_sys_futex')
f(31,6,15,5,'do_futex')
f(32,6,15,5,'futex_wake')
f(33,6,1,5,'mark_wake_futex')
f(34,6,1,5,'__unqueue_futex')
f(33,7,1,5,'wake_q_add_safe')
f(33,8,13,5,'wake_up_q')
f(34,8,13,5,'_raw_spin_unlock_irqrestore')
f(20,21,1,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',1,0,0)
f(21,21,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(22,21,1,2,'kyo/ios$KyoIO.value',1,0,0)
f(17,22,40,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,22,40,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,22,40,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,22,40,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,22,40,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,22,40,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,22,1,2,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead',1,0,0)
f(23,23,39,1,'java/util/concurrent/locks/LockSupport.park')
f(24,23,39,1,'jdk/internal/misc/Unsafe.park')
f(25,24,1,4,'AccessInternal::PostRuntimeDispatch<G1BarrierSet::AccessBarrier<548964ul, G1BarrierSet>, (AccessInternal::BarrierType)2, 548964ul>::oop_access_barrier(void*)')
f(25,25,3,3,'Unsafe_Park')
f(26,25,3,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,27,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,27,1,5,'do_syscall_64')
f(29,27,1,5,'syscall_enter_from_user_mode')
f(25,28,31,3,'[unknown]')
f(26,28,31,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,29,30,5,'entry_SYSCALL_64_after_hwframe')
f(28,29,30,5,'do_syscall_64')
f(29,29,29,5,'__x64_sys_futex')
f(30,29,29,5,'do_futex')
f(31,29,29,5,'futex_wait')
f(32,31,25,5,'futex_wait_queue_me')
f(33,31,25,5,'schedule')
f(34,31,25,5,'__schedule')
f(35,32,24,5,'finish_task_switch.isra.0')
f(32,56,2,5,'futex_wait_setup')
f(29,58,1,5,'syscall_enter_from_user_mode')
f(25,59,3,4,'java_lang_Thread::set_thread_status(oopDesc*, JavaThreadStatus)')
f(4,62,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,62,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,62,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,62,1,1,'java/lang/Thread.sleep')
f(8,62,1,3,'[unknown]')
f(9,62,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,62,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,62,1,5,'do_syscall_64')
f(12,62,1,5,'__x64_sys_futex')
f(13,62,1,5,'do_futex')
f(14,62,1,5,'futex_wait')
f(15,62,1,5,'futex_wait_queue_me')
f(16,62,1,5,'schedule')
f(17,62,1,5,'__schedule')
f(18,62,1,5,'finish_task_switch.isra.0')
f(4,63,131,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,63,131,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,63,131,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,63,99,1,'kyo/concurrent/scheduler/IOTask.run',1,0,0)
f(8,63,98,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,63,69,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,63,69,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,63,69,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e9f8.apply')
f(12,63,69,1,'kyo/bench/Bench.$anonfun$1')
f(13,63,69,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,63,69,1,'kyo/bench/BroadFlatMapBench.kyoBench')
f(15,63,69,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(16,63,28,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(17,63,28,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(18,64,27,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(19,64,27,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,64,10,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(21,64,10,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(22,64,10,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(23,64,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,64,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,64,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(26,64,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,64,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,64,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,64,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,64,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,64,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,64,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,64,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,64,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(35,64,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,64,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,64,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,64,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,65,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,65,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,65,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,65,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,65,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,65,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,65,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(35,65,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,65,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,65,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(38,65,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(37,66,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,67,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,68,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,68,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,68,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(32,68,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,68,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,68,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,68,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(36,68,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,68,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,69,1,2,'scala/math/BigInt$.apply',1,0,0)
f(24,70,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,70,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,70,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(27,70,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,70,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,70,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,70,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,70,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(32,70,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(33,70,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(25,71,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,71,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,71,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(28,71,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,71,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,71,1,5,'asm_sysvec_hyperv_stimer0')
f(31,71,1,5,'sysvec_hyperv_stimer0')
f(32,71,1,5,'irq_exit_rcu')
f(33,71,1,5,'__irq_exit_rcu')
f(34,71,1,5,'__softirqentry_text_start')
f(30,72,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,72,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(32,72,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,72,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,72,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,73,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,73,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,73,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,73,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,73,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,73,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,73,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,73,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(34,73,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,73,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,73,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,74,17,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,74,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(22,74,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(23,74,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,74,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,74,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,74,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(27,74,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,74,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,74,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,74,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,74,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,74,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,74,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,74,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,74,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,74,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,74,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,74,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(39,74,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,74,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,74,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,74,1,2,'scala/math/BigInt$.apply',1,0,0)
f(43,74,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,75,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,76,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,76,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(31,76,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d44400.newInvokeSpecial',1,0,0)
f(32,76,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.<init>',1,0,0)
f(25,77,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,77,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,77,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(28,77,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,77,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,77,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,77,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(32,77,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,77,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,77,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,77,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,77,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(37,78,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,78,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,78,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,78,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(26,79,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,79,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,79,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(29,79,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,79,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,79,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,79,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(33,79,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,79,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,79,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,79,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,79,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(38,79,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,79,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,80,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,80,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,80,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,81,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,81,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(21,82,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,82,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,82,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(24,82,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,82,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,82,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,82,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(28,82,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,82,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,82,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,82,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(32,82,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,82,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(38,82,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(30,83,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,83,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,83,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(33,83,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,83,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,83,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,83,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,83,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,83,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,84,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,84,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,84,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,84,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,84,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(22,85,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,85,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(24,85,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(25,85,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(26,86,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,86,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,86,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,86,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,86,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,86,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,86,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,86,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(34,86,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,86,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,86,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,86,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(38,86,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d44400.newInvokeSpecial',1,0,0)
f(39,86,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.<init>',1,0,0)
f(23,87,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,87,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,87,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(26,87,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(27,87,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(28,88,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,88,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,88,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,88,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,88,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(33,88,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,88,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,88,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,88,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,88,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(38,88,1,2,'scala/math/BigInt.<init>',1,0,0)
f(25,89,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,89,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,89,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(28,89,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,89,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,89,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,89,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,89,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,89,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,89,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(35,89,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,89,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,89,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,89,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,89,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,90,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,90,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,90,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,90,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,90,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,90,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,90,1,2,'scala/math/BigInt.<init>',1,0,0)
f(16,91,41,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(17,91,19,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(18,91,19,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(19,91,19,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(20,91,19,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,91,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(22,91,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(23,91,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,91,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,91,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,91,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(27,91,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,91,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,91,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,91,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,91,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,91,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,91,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,91,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,91,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(36,91,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d44400.newInvokeSpecial',1,0,0)
f(37,91,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.<init>',1,0,0)
f(29,92,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,92,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(31,92,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d44400.newInvokeSpecial',1,0,0)
f(32,92,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.<init>',1,0,0)
f(30,93,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,93,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(32,93,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,93,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,93,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,94,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,94,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,94,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,94,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,94,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,94,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,94,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,94,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,95,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,95,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(35,95,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(33,96,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,97,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,97,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,97,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,97,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,97,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,97,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,97,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(35,97,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(36,97,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(29,98,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,98,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,99,11,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,99,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,99,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(24,99,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,99,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,99,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,99,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(28,99,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,99,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,99,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,99,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,99,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(33,99,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,99,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,99,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,99,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(37,99,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,99,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,99,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,99,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,99,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(42,99,1,2,'scala/math/BigInt.<init>',1,0,0)
f(31,100,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,100,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,100,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,100,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(35,100,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(36,100,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(22,101,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,101,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,101,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(25,101,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,101,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,101,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,101,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,101,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,101,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,101,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,102,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,102,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,102,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,102,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,102,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,102,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,102,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(23,103,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,103,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,103,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(26,103,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,103,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,103,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,103,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,103,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,103,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,103,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,103,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,103,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,103,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,104,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,104,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,104,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(27,104,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,104,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,104,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,104,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,104,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,104,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,104,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,104,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,104,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,105,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,105,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,105,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(32,105,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,105,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,105,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,105,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,105,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,105,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(25,106,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,106,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,106,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(28,106,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,107,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,107,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,107,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(29,107,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,107,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,107,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,107,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,108,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,108,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,108,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,108,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,108,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,108,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,108,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,108,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,109,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,109,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,109,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,109,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,109,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,109,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(17,110,22,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(18,110,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(19,110,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(20,110,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(21,110,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,110,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,110,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(24,110,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,110,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,110,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(27,110,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(26,111,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,111,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,111,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,111,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,111,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,111,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,111,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,111,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,111,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,111,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(36,111,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,111,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,111,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,112,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,112,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,112,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,112,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,112,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,113,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,113,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,113,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(25,113,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,113,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,113,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,113,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(29,113,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,113,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,113,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,114,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,114,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,114,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(26,114,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,114,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,114,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,114,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,114,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,114,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,114,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,114,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,114,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(33,115,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,116,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,116,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,116,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(27,116,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,116,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,116,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,116,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,116,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,116,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,116,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,116,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(35,116,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d44400.newInvokeSpecial',1,0,0)
f(36,116,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.<init>',1,0,0)
f(29,117,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,117,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,117,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(32,117,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(18,118,14,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(19,118,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(20,118,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(21,118,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(22,118,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,118,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,118,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(25,118,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,118,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,118,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,118,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,118,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,119,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,119,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(32,119,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(19,120,12,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,120,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(21,120,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(22,120,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(23,120,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,120,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,120,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(26,120,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,120,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,120,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,120,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,120,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,120,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(35,120,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,120,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,120,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(39,120,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,121,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,121,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,121,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,121,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,121,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,121,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,121,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,121,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(20,122,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,122,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(22,122,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(23,122,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,122,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,122,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,122,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(27,122,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,122,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,122,1,2,'scala/math/BigInt$.apply',1,0,0)
f(25,123,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,123,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,123,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(28,123,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,123,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,123,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,123,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(32,123,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,123,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,124,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,124,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(28,124,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(21,125,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,125,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,125,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(24,125,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,125,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,125,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,125,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(28,125,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,125,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,125,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,125,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(32,125,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,125,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,125,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,125,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(36,125,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,125,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,125,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,125,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(40,125,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(41,125,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(42,125,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$1',1,0,0)
f(22,126,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,126,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,126,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(25,126,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,126,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,126,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,126,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(29,126,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,126,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,126,1,2,'scala/math/BigInt$.apply',1,0,0)
f(27,127,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,127,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,127,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,127,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,127,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,127,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,127,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,127,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(35,127,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,127,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,128,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,128,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,128,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(23,129,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,129,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(25,129,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(26,129,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(24,130,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,131,1,2,'scala/math/BigInt$.apply',1,0,0)
f(24,131,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(25,131,1,2,'scala/math/BigInt.<init>',1,0,0)
f(9,132,29,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,132,29,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,132,29,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,132,29,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,132,29,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,132,29,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,132,29,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,132,29,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,132,29,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,132,29,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,132,29,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,132,29,1,'jdk/internal/misc/Unsafe.unpark')
f(21,132,2,3,'Unsafe_Unpark')
f(22,132,1,4,'SafeThreadsListPtr::release_stable_list()')
f(23,132,1,5,'asm_sysvec_hyperv_stimer0')
f(24,132,1,5,'sysvec_hyperv_stimer0')
f(25,132,1,5,'irq_exit_rcu')
f(26,132,1,5,'__irq_exit_rcu')
f(27,132,1,5,'rcu_core_si')
f(22,133,1,3,'pthread_mutex_lock')
f(21,134,1,3,'__tls_get_addr')
f(21,135,26,3,'pthread_cond_signal')
f(22,138,23,5,'entry_SYSCALL_64_after_hwframe')
f(23,138,23,5,'do_syscall_64')
f(24,138,23,5,'__x64_sys_futex')
f(25,138,23,5,'do_futex')
f(26,138,23,5,'futex_wake')
f(27,140,2,5,'mark_wake_futex')
f(27,142,1,5,'wake_q_add_safe')
f(27,143,18,5,'wake_up_q')
f(28,144,17,5,'_raw_spin_unlock_irqrestore')
f(8,161,1,2,'scala/runtime/BoxesRunTime.equals',1,0,0)
f(9,161,1,2,'scala/runtime/BoxesRunTime.equals2',1,0,0)
f(10,161,1,2,'scala/runtime/BoxesRunTime.equalsNumObject',1,0,0)
f(7,162,32,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,162,32,1,'kyo/concurrent/scheduler/Worker.park')
f(9,162,32,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,162,32,1,'jdk/internal/misc/Unsafe.park')
f(11,162,5,3,'Unsafe_Park')
f(12,164,2,3,'clock_gettime')
f(13,164,2,3,'[vdso]')
f(12,166,1,3,'pthread_cond_timedwait')
f(11,167,27,3,'[unknown]')
f(12,167,27,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,169,25,5,'entry_SYSCALL_64_after_hwframe')
f(14,169,25,5,'do_syscall_64')
f(15,169,22,5,'__x64_sys_futex')
f(16,169,22,5,'do_futex')
f(17,169,22,5,'futex_wait')
f(18,169,1,5,'__get_user_nocheck_4')
f(18,170,20,5,'futex_wait_queue_me')
f(19,170,3,5,'hrtimer_sleeper_start_expires')
f(20,170,3,5,'_raw_spin_unlock_irqrestore')
f(19,173,17,5,'schedule')
f(20,173,17,5,'__schedule')
f(21,173,17,5,'finish_task_switch.isra.0')
f(18,190,1,5,'hash_futex')
f(15,191,2,5,'syscall_enter_from_user_mode')
f(15,193,1,5,'syscall_exit_to_user_mode')
f(16,193,1,5,'exit_to_user_mode_prepare')
f(17,193,1,5,'exit_to_user_mode_loop')
f(18,193,1,5,'__rseq_handle_notify_resume')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 16px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(1);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,0,2,'all')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 800px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(50);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,299,3,'all')
f(1,0,6,3,'[unknown_Java]')
f(2,0,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(1,6,293,1,'java/lang/Thread.run')
f(2,6,293,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,6,293,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,6,293,1,'java/util/concurrent/FutureTask.run')
f(5,6,293,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,6,293,1,'java/util/concurrent/FutureTask.run')
f(7,6,293,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,6,293,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,6,293,1,'java/lang/reflect/Method.invoke')
f(10,6,293,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,6,293,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,6,293,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,6,293,1,'kyo/bench/jmh_generated/BroadFlatMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,6,293,1,'kyo/bench/jmh_generated/BroadFlatMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,6,293,1,'kyo/bench/Bench.syncKyo')
f(16,6,293,1,'kyo/bench/BroadFlatMapBench.kyoBench')
f(17,6,293,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(18,6,108,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(19,6,108,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(20,6,108,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(21,6,108,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,6,34,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,6,34,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(24,6,34,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,6,34,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,7,12,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,7,12,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,7,12,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,7,12,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,7,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,7,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,7,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,7,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,7,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(35,7,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(36,7,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(37,8,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,8,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,8,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(40,8,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,9,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,9,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,9,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,9,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,9,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,9,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,9,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,9,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,10,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,10,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,10,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,10,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,10,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,11,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,11,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,11,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,11,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,11,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,12,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,12,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,13,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,13,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,13,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,13,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,13,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,13,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,13,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,13,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,13,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,13,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,13,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,13,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,14,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,14,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,14,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,14,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,14,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,14,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,15,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,15,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,15,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,15,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,15,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,15,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,16,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,17,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,17,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,17,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,17,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,17,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,17,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,17,2,2,'scala/math/BigInt$.apply',2,0,0)
f(40,18,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,18,1,2,'scala/math/BigInt.<init>',1,0,0)
f(26,19,21,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,19,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(28,19,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(29,19,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(27,20,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,20,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,20,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,20,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,20,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,20,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,20,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,20,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,20,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,20,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,20,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,20,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,20,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,20,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(41,20,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(42,20,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(31,21,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,21,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,21,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,21,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,21,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,21,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,21,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,21,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,21,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,21,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,21,1,2,'scala/math/BigInt$.apply',1,0,0)
f(42,21,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(37,22,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,23,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,23,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(40,23,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(41,23,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(42,23,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(43,23,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(44,23,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(32,24,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,24,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,24,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,24,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,24,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,24,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,24,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,25,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,25,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,25,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,25,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,26,14,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,26,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,26,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,26,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,26,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,26,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,26,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,26,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,26,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,26,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,26,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,26,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,26,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,28,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,28,2,2,'scala/math/BigInt$.apply',2,0,0)
f(38,28,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(32,30,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,30,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,30,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,30,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,30,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,30,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,30,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,30,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,30,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(37,31,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,32,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,32,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,32,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,32,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,32,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,32,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,32,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,32,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,33,1,2,'scala/math/BigInt$.apply',1,0,0)
f(28,34,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,34,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,34,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,34,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,34,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,34,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,34,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,34,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,34,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,34,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,34,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,34,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,34,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,34,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,34,2,2,'scala/math/BigInt$.apply',2,0,0)
f(43,35,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,36,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,36,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,36,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,36,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,36,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,36,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,36,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,36,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,36,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,36,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,36,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,37,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,37,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,37,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,37,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,37,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,37,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,37,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,38,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,38,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,39,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,39,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,39,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,39,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,39,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,39,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,39,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,39,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,39,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(22,40,74,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,40,32,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,40,32,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(25,40,32,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,40,32,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,40,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,40,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,40,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,40,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,40,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,40,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,40,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,40,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,40,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,40,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,40,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,40,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(36,41,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,41,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,41,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,41,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,41,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,41,1,2,'scala/math/BigInt$.apply',1,0,0)
f(42,41,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(37,42,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,42,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,43,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,43,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,43,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,43,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,43,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,43,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,44,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,44,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,44,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,44,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,44,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,44,1,2,'scala/math/BigInt$.apply',1,0,0)
f(43,44,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(44,44,1,2,'scala/math/BigInt.<init>',1,0,0)
f(32,45,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,45,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,46,25,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,46,10,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(29,46,10,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(30,46,10,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(31,47,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,47,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,47,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,47,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,47,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,47,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(37,47,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(38,47,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',2,0,0)
f(36,49,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,49,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,49,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,49,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,49,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,50,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,50,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,50,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(40,50,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(41,50,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(39,51,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,51,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,51,1,2,'scala/math/BigInt$.apply',1,0,0)
f(42,51,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,52,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,52,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,52,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,52,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,52,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,52,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,52,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,52,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,52,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,53,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,53,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,53,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,53,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,53,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,53,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,53,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(40,53,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(41,53,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(42,53,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$1',1,0,0)
f(43,53,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$40.0x0000000800ca15f8.apply',1,0,0)
f(42,54,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,54,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(44,54,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(45,54,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(46,54,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(47,54,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(48,54,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(49,54,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(34,55,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,55,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,55,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,55,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,55,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,56,15,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,57,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,57,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,57,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,57,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,57,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,57,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,58,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,58,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,58,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,58,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,58,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,58,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,59,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,59,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,59,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,59,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,59,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,59,2,2,'scala/math/BigInt$.apply',2,0,0)
f(39,59,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(40,59,2,2,'scala/math/BigInt.<init>',2,0,0)
f(29,61,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,61,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,61,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,62,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,62,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,63,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,63,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,63,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,63,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,63,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,63,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,63,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,63,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,63,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,64,2,2,'scala/math/BigInt$.apply',2,0,0)
f(40,65,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,66,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,66,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,66,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,66,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,66,2,2,'scala/math/BigInt$.apply',2,0,0)
f(30,68,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,68,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,68,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,68,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,68,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,68,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,68,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,68,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(38,68,1,2,'scala/math/BigInt.<init>',1,0,0)
f(31,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,70,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,70,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,70,1,2,'scala/math/BigInt.<init>',1,0,0)
f(27,71,1,2,'scala/math/BigInt$.apply',1,0,0)
f(23,72,42,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,73,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,73,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(26,73,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,73,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,73,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,73,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,73,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,73,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,73,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,73,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,73,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,73,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,73,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,73,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,73,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,73,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,73,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,73,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(42,73,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(43,73,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(44,73,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(45,73,1,2,'scala/math/BigInt$.apply',1,0,0)
f(46,73,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,74,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,74,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,74,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,74,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,74,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,74,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,74,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,74,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,74,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,74,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,75,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,75,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,75,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,76,2,2,'scala/math/BigInt$.apply',2,0,0)
f(37,76,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(29,78,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,78,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,78,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,78,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,79,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,79,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,80,33,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,80,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,80,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,80,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,80,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,82,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,82,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,82,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,82,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,82,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,82,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,82,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,82,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,82,1,2,'scala/math/BigInt.<init>',1,0,0)
f(29,83,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,83,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,83,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(30,84,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,84,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,84,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,84,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,84,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,84,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,84,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,84,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,84,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(32,85,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,85,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,85,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,85,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,85,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,85,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,86,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,86,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,87,1,2,'scala/math/BigInt$.apply',1,0,0)
f(25,88,25,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,88,10,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,88,10,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,88,10,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,88,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,88,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,88,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,89,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,89,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,89,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,89,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,89,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,89,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,90,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,90,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,90,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,91,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,91,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,91,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,92,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,92,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,93,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,94,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,94,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,94,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,94,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,94,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,94,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,94,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,94,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(38,94,1,2,'scala/math/BigInt.<init>',1,0,0)
f(31,95,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,95,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,95,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,95,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(32,96,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,96,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,96,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,97,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,97,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,98,15,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,98,9,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(28,98,9,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(29,99,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,99,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,99,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,99,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,99,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,99,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,99,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,99,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,100,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,100,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,100,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,100,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,100,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,101,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,101,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,101,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,102,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,102,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,102,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,102,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,102,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,103,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,103,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,103,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,103,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,103,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,103,1,2,'scala/math/BigInt$.apply',1,0,0)
f(42,103,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,104,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,104,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,104,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,104,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,104,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,104,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,104,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,104,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(37,105,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,105,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,107,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,107,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,107,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,107,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,107,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,107,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,107,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,107,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,107,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,107,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,107,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,107,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,107,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,107,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,108,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,108,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,108,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,108,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,108,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,108,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,108,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,109,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,109,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,110,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,110,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,110,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,110,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,110,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,110,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,110,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,111,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,112,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,112,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,112,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,112,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,112,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,113,1,2,'scala/math/BigInt$.apply',1,0,0)
f(25,113,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(18,114,185,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(19,114,77,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(20,114,77,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(21,114,77,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(22,114,77,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,114,26,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,114,26,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(25,114,26,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,114,26,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,115,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,115,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,115,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,115,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,115,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,115,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,115,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,115,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,115,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,115,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,115,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,115,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,115,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(40,115,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(41,116,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(35,117,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,117,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,117,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,117,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,117,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,118,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,118,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,118,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,118,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,118,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,118,1,2,'scala/math/BigInt.<init>',1,0,0)
f(31,119,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,119,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,119,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,119,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(27,120,20,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,120,10,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',5,0,0)
f(29,120,10,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',5,0,0)
f(30,121,9,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',4,0,0)
f(31,125,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,125,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,125,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,125,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,125,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,125,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,125,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,125,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,125,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,125,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,125,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,126,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,126,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(39,126,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(40,126,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(41,126,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,127,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,127,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,127,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,127,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,127,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,127,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,127,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,127,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,127,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,127,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,127,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,128,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,128,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,128,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,128,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,128,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,128,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,128,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,129,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,129,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,129,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(28,130,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,130,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,130,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,130,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,130,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,130,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,130,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,130,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,130,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,131,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,132,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,132,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,132,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,132,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,132,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,133,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,133,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,133,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,133,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,133,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,133,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,133,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,133,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,134,2,2,'scala/math/BigInt$.apply',2,0,0)
f(35,134,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(29,136,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,136,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,136,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,136,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,136,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,136,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,136,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,136,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,136,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,136,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,137,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,137,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,137,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,137,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,137,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,137,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,137,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,137,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(38,137,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$1',1,0,0)
f(39,137,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$40.0x0000000800ca15f8.apply',1,0,0)
f(31,138,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,138,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,139,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,139,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(23,140,51,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,140,22,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,140,22,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(26,140,22,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,140,22,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,140,9,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(29,140,9,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(30,140,9,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',2,0,0)
f(31,142,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,143,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,143,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,143,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,143,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,143,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,143,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,143,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(39,144,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,144,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,145,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,145,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,145,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,145,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,145,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,145,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,145,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,145,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,145,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,146,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,146,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,146,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,146,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,146,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,146,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,146,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,147,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,147,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,147,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,147,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,148,1,2,'scala/math/BigInt$.apply',1,0,0)
f(28,149,13,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,149,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,149,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,149,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,149,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,149,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,149,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,149,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,149,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,150,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,150,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,150,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,150,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,150,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,150,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,150,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,151,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,151,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,151,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,151,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,152,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,152,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,153,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,153,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,153,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,153,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,153,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,153,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,153,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,153,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,153,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,153,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,153,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,153,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,154,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,154,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,154,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,154,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,154,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,154,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,154,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,154,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,154,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,155,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(44,155,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(45,155,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(46,155,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(47,155,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$1',1,0,0)
f(35,156,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,156,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,157,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,157,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(36,158,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,158,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,159,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,159,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,159,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,159,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,159,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,159,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,160,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,160,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,160,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,160,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,160,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,160,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,160,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,160,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,160,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(40,160,1,2,'scala/math/BigInt.<init>',1,0,0)
f(32,161,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,162,29,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,164,10,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,164,10,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,164,10,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,164,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,165,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,165,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,165,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,165,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,165,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,165,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,165,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,165,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,165,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,165,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,166,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,166,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,166,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,166,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,166,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,166,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,167,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,167,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,167,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,168,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,168,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,168,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,168,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,168,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,168,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,168,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,168,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,168,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,168,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,168,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,168,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,168,1,2,'scala/math/BigInt$.apply',1,0,0)
f(42,168,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,169,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,169,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,169,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(30,170,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,170,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,170,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,170,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,170,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,170,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,170,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(37,170,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(38,170,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(36,171,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,172,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,172,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,172,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,173,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,173,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,173,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,173,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(25,174,17,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,174,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,174,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,174,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,174,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,174,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,174,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,174,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,174,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,174,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,174,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,174,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,174,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,174,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(30,175,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,175,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,175,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,175,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,175,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,175,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,175,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,175,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,175,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,175,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,175,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,175,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,175,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,176,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,176,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,176,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,177,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,177,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,177,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,177,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,177,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,177,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,178,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,178,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,178,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,178,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,178,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,178,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,179,12,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,179,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,179,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,179,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,179,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,179,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,179,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,179,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,179,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,179,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,179,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(31,180,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,180,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,180,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,180,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,180,1,2,'scala/math/BigInt.<init>',1,0,0)
f(31,181,1,2,'scala/math/BigInt$.apply',1,0,0)
f(27,182,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,183,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,183,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,183,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,183,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,183,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,183,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,183,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(32,184,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,184,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,184,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,185,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,185,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(30,185,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(29,186,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,186,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,186,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,186,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,186,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,186,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,186,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,187,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,187,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,188,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,188,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,188,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,188,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,188,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,188,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,189,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,189,2,2,'scala/math/BigInt$.apply',2,0,0)
f(33,189,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(19,191,107,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,191,40,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(21,191,40,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(22,191,40,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(23,191,40,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,191,15,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,191,15,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(26,191,15,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,191,15,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,191,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,191,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,191,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,191,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,191,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,191,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,191,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,191,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(36,192,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,192,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,192,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,192,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,192,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,193,13,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,193,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,193,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,193,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,193,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,193,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,193,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,193,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,193,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,193,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,193,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,194,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,194,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,194,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,194,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,194,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,194,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,194,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,194,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,195,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,195,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,195,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,196,2,2,'scala/math/BigInt$.apply',2,0,0)
f(37,196,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(29,198,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,198,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,198,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,198,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,198,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,198,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,198,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,198,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,198,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,198,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,198,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(40,198,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(41,198,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(39,199,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,200,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,200,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,200,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,200,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,200,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,200,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,200,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,200,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,200,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,200,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,200,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,200,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,201,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,201,2,2,'scala/math/BigInt$.apply',2,0,0)
f(37,201,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(31,203,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,203,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,203,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,203,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,203,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,203,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,203,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,203,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,204,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,204,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,204,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,205,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,205,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,206,25,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,206,13,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,206,13,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,206,13,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,206,13,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,206,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,206,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,206,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,206,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,206,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,206,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,206,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,206,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,207,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,207,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,207,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,207,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,207,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,208,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,208,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,208,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,208,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,209,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,209,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,209,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,209,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,209,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,209,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(39,209,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(40,209,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(41,209,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,210,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,210,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,211,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,211,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,211,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,211,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,211,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,211,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,212,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,212,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,213,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,213,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',3,0,0)
f(31,213,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',3,0,0)
f(32,214,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',2,0,0)
f(30,216,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,216,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,216,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,216,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,216,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,216,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,216,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,216,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,216,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,216,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,217,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,217,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,217,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,217,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,217,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,218,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,218,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,219,12,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,219,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,219,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,219,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,219,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,219,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,219,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,220,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,220,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,222,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,222,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,222,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,222,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,222,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,222,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,222,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,222,1,2,'scala/math/BigInt.<init>',1,0,0)
f(34,223,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,223,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,223,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,223,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,223,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,223,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,224,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,224,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,224,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,224,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,224,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,224,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,224,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,224,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,224,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,224,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,224,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,225,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,225,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,226,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(34,226,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(35,226,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(26,227,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,227,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,227,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,227,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,227,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,227,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,227,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,227,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,227,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(31,228,1,2,'scala/math/BigInt$.apply',1,0,0)
f(27,229,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,229,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,229,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,229,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,229,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(32,229,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(33,230,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(20,231,67,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,231,25,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(22,231,25,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(23,231,25,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,231,25,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,231,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,231,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,231,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,231,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,231,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,231,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,231,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,231,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,231,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,231,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(33,232,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,233,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,233,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,233,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,233,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,233,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,234,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,234,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,235,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,235,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,235,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,235,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,235,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,236,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,236,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,236,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,236,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(25,237,19,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,237,9,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,237,9,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,237,9,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,237,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,237,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,237,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,237,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,237,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,237,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,237,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(36,237,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(37,238,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(35,239,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,239,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,239,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,239,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(30,240,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,240,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,240,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,240,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,240,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,240,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,240,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,241,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,241,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,241,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,241,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,241,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,242,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,243,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,243,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,243,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(32,244,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,244,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,244,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,245,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,245,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,246,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,246,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,246,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,246,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,246,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,246,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,246,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,246,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,246,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,246,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,246,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,246,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,246,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,246,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,247,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,247,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,247,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,248,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,248,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,248,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,248,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,248,2,2,'scala/math/BigInt$.apply',2,0,0)
f(39,248,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(40,249,1,2,'scala/math/BigInt.<init>',1,0,0)
f(32,250,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,251,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,251,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,251,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(27,252,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,252,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,252,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,252,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,252,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,252,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,252,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,252,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,252,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,252,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,253,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,253,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,253,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,253,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,253,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,253,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,253,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,254,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,255,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,255,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(21,256,41,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,256,19,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,256,19,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(24,256,19,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,256,19,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,256,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,256,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,256,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,256,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,256,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,256,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,256,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(33,257,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,257,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,257,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,257,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,257,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,257,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(39,257,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,258,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,258,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,258,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,259,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,259,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,260,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,261,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,261,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,261,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,261,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,261,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,261,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,262,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,262,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,262,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,263,1,2,'scala/math/BigInt$.apply',1,0,0)
f(26,264,11,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,264,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,264,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,264,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,264,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,265,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,265,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,265,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,265,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,265,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,265,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,265,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,265,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(39,265,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(40,265,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(31,266,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,266,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,266,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,266,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,266,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,266,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,266,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,266,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(39,266,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(40,266,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(27,267,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,267,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,267,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,267,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,267,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,267,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,268,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,269,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,269,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(31,269,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(32,269,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(30,270,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,270,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,270,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,270,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,270,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,270,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,271,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,271,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(32,271,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(31,272,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,272,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,273,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,274,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,274,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(22,275,22,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,275,9,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,275,9,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(25,275,9,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,275,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,275,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(28,275,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(29,276,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,276,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,276,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,276,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,276,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,276,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,276,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,276,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,276,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,276,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,276,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,276,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,277,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,277,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,277,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,277,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,277,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,278,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,278,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,278,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,278,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,278,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,278,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(33,278,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(34,280,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,280,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,280,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,281,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,281,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,282,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,282,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,282,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,282,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,282,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,282,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,282,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,282,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,282,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,283,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,283,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(23,284,13,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,284,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,284,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(26,284,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,284,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,284,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,284,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,284,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,284,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,284,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,284,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,284,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,284,1,2,'scala/math/BigInt$.apply',1,0,0)
f(28,285,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,285,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,285,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,285,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,285,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,286,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,286,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,286,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,287,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,287,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,287,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,287,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,287,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,287,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,287,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,287,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,287,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,287,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,287,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,287,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,287,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,288,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,288,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,288,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,288,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,289,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,289,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(25,290,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,290,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(27,290,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(28,291,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,291,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,292,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,292,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,292,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,292,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,293,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,293,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,293,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,293,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,294,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,294,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,294,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(29,294,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(30,294,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',2,0,0)
f(27,296,1,2,'scala/math/BigInt$.apply',1,0,0)
f(28,296,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,296,1,2,'scala/math/BigInt.<init>',1,0,0)
f(21,297,1,2,'scala/math/BigInt$.apply',1,0,0)
f(22,297,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(23,297,1,2,'scala/math/BigInt.<init>',1,0,0)
f(19,298,1,2,'scala/math/BigInt$.apply',1,0,0)
f(20,298,1,2,'scala/math/BigInt$.getCached',1,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 560px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(35);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,2433,3,'all')
f(1,0,2429,1,'java/lang/Thread.run')
f(2,0,2429,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,2429,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,140,1,'java/util/concurrent/FutureTask.run')
f(5,0,140,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,140,1,'java/util/concurrent/FutureTask.run')
f(7,0,140,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,140,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,140,1,'java/lang/reflect/Method.invoke')
f(10,0,140,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,140,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,140,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,140,1,'kyo/bench/jmh_generated/ChainedForkBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,140,1,'kyo/bench/jmh_generated/ChainedForkBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,140,1,'kyo/bench/Bench.forkKyo')
f(16,0,17,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,17,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,17,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,17,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,0,17,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3f088')
f(16,17,8,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,17,8,2,'kyo.bench.Bench$$anon$1')
f(16,25,93,1,'kyo/bench/Bench.runLoop$2')
f(17,25,41,1,'kyo/bench/Bench$$anon$1.apply')
f(18,25,41,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,25,41,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,25,41,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(21,25,41,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,25,1,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,26,31,2,'kyo.concurrent.scheduler.IOTask')
f(22,57,6,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,57,6,2,'kyo.concurrent.fibers$Fiber')
f(22,63,3,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,63,3,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,63,3,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,63,3,1,'kyo/concurrent/scheduler/Queue.offer')
f(26,63,3,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(27,63,3,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(28,63,3,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(29,63,3,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(30,63,3,2,'kyo.concurrent.scheduler.Queue$$Lambda$54+0x0000000800d474b0')
f(17,66,52,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,66,52,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,66,52,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,66,52,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,66,25,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,66,25,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,66,12,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,78,13,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,78,13,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,91,20,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,111,7,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,111,7,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,111,7,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,118,22,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,118,4,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,118,4,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,118,4,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,118,4,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(17,122,17,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,122,17,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,139,1,1,'kyo/locals$Locals$.save')
f(18,139,1,2,'kyo.locals$Locals$$anon$3')
f(4,140,1,1,'java/util/concurrent/ThreadPoolExecutor.getTask')
f(5,140,1,1,'java/util/concurrent/LinkedBlockingQueue.take')
f(6,140,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject.await')
f(7,140,1,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode')
f(4,141,7,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f2b8.run')
f(5,141,7,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,141,7,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,141,6,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,141,6,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,141,6,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,141,6,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,141,6,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,147,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,147,1,2,'java.lang.String')
f(4,148,7,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f4e0.run')
f(5,148,7,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,148,7,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,148,7,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,148,7,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,148,7,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,148,7,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$70+0x0000000800d4eb70')
f(4,155,2274,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fda8.run')
f(5,155,2274,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,155,2274,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,155,2091,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,155,2091,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,155,801,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,155,801,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,155,801,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,155,801,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(13,155,801,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,155,117,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(14,272,533,2,'kyo.concurrent.scheduler.IOTask')
f(14,805,151,1,'kyo/concurrent/fibers$Fiber$.promise')
f(15,805,151,2,'kyo.concurrent.fibers$Fiber')
f(9,956,1290,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,956,1290,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,956,1,1,'kyo/bench/ChainedForkBench$$Lambda$57.0x0000000800d49800.apply')
f(12,956,1,1,'kyo/bench/ChainedForkBench.$anonfun$6')
f(13,956,1,1,'kyo/bench/ChainedForkBench.iterate$2')
f(14,956,1,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(15,956,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(16,956,1,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(11,957,1289,1,'kyo/bench/ChainedForkBench$$Lambda$61.0x0000000800d4a518.apply')
f(12,957,1289,1,'kyo/bench/ChainedForkBench.$anonfun$3')
f(13,957,1289,1,'kyo/bench/ChainedForkBench.iterate$2')
f(14,957,234,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4c800.linkToTargetMethod')
f(15,957,234,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(16,957,234,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,957,234,2,'kyo.bench.ChainedForkBench$$Lambda$61+0x0000000800d4a518')
f(14,1191,304,1,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2')
f(15,1191,304,2,'kyo.bench.ChainedForkBench$$anon$2')
f(14,1495,751,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(15,1495,206,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,1495,206,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,1495,206,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,1495,206,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(15,1701,293,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(16,1701,293,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(15,1994,252,1,'kyo/locals$Locals$.save')
f(16,1994,252,2,'kyo.locals$Locals$$anon$3')
f(7,2246,183,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,2246,183,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,2246,183,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,2246,183,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,2246,183,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d45000')
f(1,2429,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,2429,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,2429,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,2429,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,2429,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,2429,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,2429,1,1,'jdk/proxy1/$Proxy0.iterationResult')
f(8,2429,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient$$Lambda$8.0x0000000800c01c70.invoke')
f(9,2429,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.lambda$new$0')
f(10,2429,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushFrame')
f(11,2429,1,1,'java/io/ObjectOutputStream.writeObject')
f(12,2429,1,1,'java/io/ObjectOutputStream.writeObject0')
f(13,2429,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(14,2429,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(15,2429,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(16,2429,1,1,'java/io/ObjectOutputStream.writeObject0')
f(17,2429,1,1,'java/io/ObjectOutputStream.writeArray')
f(18,2429,1,1,'java/io/ObjectOutputStream.writeObject0')
f(19,2429,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(20,2429,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(21,2429,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(22,2429,1,1,'java/io/ObjectOutputStream.writeObject0')
f(23,2429,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(24,2429,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(25,2429,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(26,2429,1,1,'java/io/ObjectOutputStream.writeObject0')
f(27,2429,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(28,2429,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(29,2429,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(30,2429,1,1,'java/io/ObjectOutputStream.writeObject0')
f(31,2429,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(32,2429,1,1,'java/io/ObjectOutputStream$HandleTable.assign')
f(33,2429,1,1,'java/io/ObjectOutputStream$HandleTable.growEntries')
f(34,2429,1,2,'int[]')
f(7,2430,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,2430,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,2430,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,2430,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,2430,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,2430,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,2430,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 432px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(27);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,296,3,'all')
f(1,0,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,1,3,'thread_native_entry(Thread*)')
f(3,0,1,4,'Thread::call_run()')
f(4,0,1,4,'JavaThread::thread_main_inner()')
f(5,0,1,4,'CompileBroker::compiler_thread_loop()')
f(6,0,1,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,1,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,1,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,1,4,'Compile::Code_Gen()')
f(10,0,1,4,'PhaseOutput::fill_buffer(CodeBuffer*, unsigned int*)')
f(11,0,1,4,'NonSafepointEmitter::emit_non_safepoint()')
f(12,0,1,4,'DebugInformationRecorder::describe_scope(int, methodHandle const&, ciMethod*, int, bool, bool, bool, bool, bool, bool, bool, DebugToken*, DebugToken*, DebugToken*)')
f(13,0,1,4,'DebugInformationRecorder::find_sharable_decode_offset(int)')
f(1,1,1,3,'[unknown_Java]')
f(2,1,1,3,'nmethod')
f(1,2,294,1,'java/lang/Thread.run')
f(2,2,294,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,2,294,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,2,2,1,'java/util/concurrent/FutureTask.run')
f(5,2,2,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,2,2,1,'java/util/concurrent/FutureTask.run')
f(7,2,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,2,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,2,2,1,'java/lang/reflect/Method.invoke')
f(10,2,2,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,2,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,2,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,2,2,1,'kyo/bench/jmh_generated/ChainedForkBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,2,2,1,'kyo/bench/jmh_generated/ChainedForkBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,2,2,1,'kyo/bench/Bench.forkKyo')
f(16,2,2,1,'kyo/bench/Bench.runLoop$2')
f(17,2,2,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,2,2,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,2,2,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,2,2,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,2,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,2,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,2,2,1,'java/util/concurrent/locks/LockSupport.park')
f(24,2,2,1,'jdk/internal/misc/Unsafe.park')
f(25,2,2,3,'[unknown]')
f(26,2,2,3,'pthread_cond_wait')
f(4,4,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f2b8.run')
f(5,4,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,4,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,4,1,1,'java/lang/Thread.sleep')
f(8,4,1,3,'[unknown]')
f(9,4,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,4,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,4,1,5,'do_syscall_64')
f(12,4,1,5,'__x64_sys_futex')
f(13,4,1,5,'do_futex')
f(14,4,1,5,'futex_wait')
f(15,4,1,5,'futex_wait_queue_me')
f(16,4,1,5,'schedule')
f(17,4,1,5,'__schedule')
f(18,4,1,5,'finish_task_switch.isra.0')
f(4,5,291,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fda8.run')
f(5,5,291,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,5,291,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,25,3,2,'kyo/concurrent/scheduler/IOTask.reenqueue',3,0,0)
f(7,28,202,1,'kyo/concurrent/scheduler/IOTask.run',46,0,0)
f(8,29,201,1,'kyo/concurrent/scheduler/IOTask.eval',46,0,0)
f(9,42,2,1,'kyo/bench/ChainedForkBench$$anon$1.apply')
f(10,42,2,2,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply',1,0,0)
f(11,42,2,2,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply',1,0,0)
f(12,42,2,2,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$Promise$$anon$26$$_$loop$22',1,0,0)
f(13,42,2,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',1,0,0)
f(14,42,2,2,'kyo/concurrent/scheduler/IOPromise.complete',1,0,0)
f(15,42,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(16,42,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(17,42,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(15,43,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,43,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,43,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,43,1,3,'itable stub')
f(9,44,111,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,52,6,2,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2',6,0,0)
f(10,58,97,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',11,0,0)
f(11,64,91,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',5,0,0)
f(12,69,86,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(13,72,83,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',82,0,0)
f(14,108,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(15,108,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(16,108,1,4,'MemAllocator::allocate() const')
f(17,108,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(18,108,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(19,108,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(20,108,1,4,'G1AllocRegion::new_alloc_region_and_allocate(unsigned long, bool)')
f(21,108,1,4,'G1CollectedHeap::new_mutator_alloc_region(unsigned long, bool, unsigned int)')
f(22,108,1,4,'G1SurvivorRegions::length() const')
f(14,109,10,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',10,0,0)
f(14,119,26,2,'kyo/concurrent/scheduler/IOTask.<init>',26,0,0)
f(15,140,5,2,'kyo/concurrent/scheduler/IOPromise.<init>',5,0,0)
f(16,141,4,2,'kyo/concurrent/scheduler/IOPromise.<init>',4,0,0)
f(14,145,10,2,'kyo/concurrent/scheduler/Scheduler$.schedule',10,0,0)
f(15,152,3,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',3,0,0)
f(16,154,1,2,'kyo/concurrent/scheduler/Queue.offer',1,0,0)
f(17,154,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(18,154,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(19,154,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(9,155,33,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,157,31,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',22,0,0)
f(11,157,31,2,'kyo/bench/ChainedForkBench$$Lambda$61.0x0000000800d4a258.apply',22,0,0)
f(12,158,30,2,'kyo/bench/ChainedForkBench.$anonfun$3',21,0,0)
f(13,158,30,2,'kyo/bench/ChainedForkBench.iterate$2',21,0,0)
f(14,158,2,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d4c800.linkToTargetMethod',2,0,0)
f(15,158,2,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial',2,0,0)
f(16,158,2,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',2,0,0)
f(14,160,13,2,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2',13,0,0)
f(15,172,1,2,'kyo/bench/ChainedForkBench$$anon$2.<init>',1,0,0)
f(14,173,15,2,'kyo/concurrent/fibers$Fibers.forkFiber',6,0,0)
f(15,173,4,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',4,0,0)
f(16,173,4,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',4,0,0)
f(17,173,2,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',2,0,0)
f(17,175,2,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.<init>',2,0,0)
f(15,177,9,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(16,182,4,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',4,0,0)
f(17,185,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(15,186,2,2,'kyo/locals$Locals$.save',2,0,0)
f(9,188,15,2,'kyo/concurrent/scheduler/IOTask.loop$8',15,0,0)
f(10,197,2,2,'java/util/concurrent/atomic/AtomicReference.get',2,0,0)
f(10,199,4,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',4,0,0)
f(11,199,4,2,'kyo/concurrent/scheduler/IOPromise.complete',4,0,0)
f(12,199,3,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',3,0,0)
f(13,199,3,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',3,0,0)
f(14,199,3,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',3,0,0)
f(12,202,1,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',1,0,0)
f(13,202,1,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',1,0,0)
f(9,203,19,2,'kyo/core$internal$KyoCont.effect',15,4,0)
f(9,222,2,1,'kyo/ios$KyoIO.effect')
f(9,224,6,3,'vtable stub')
f(7,230,62,1,'kyo/concurrent/scheduler/Queue.poll',8,0,0)
f(8,231,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(9,231,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(10,232,1,1,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d45460.<init>')
f(8,233,6,2,'kyo/concurrent/scheduler/Queue.isEmpty',6,0,0)
f(9,233,6,2,'kyo/concurrent/scheduler/Queue.items',6,0,0)
f(8,239,53,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,239,22,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',22,0,0)
f(10,243,18,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',18,0,0)
f(11,250,2,2,'java/lang/invoke/VarForm.getMemberName',2,0,0)
f(12,250,2,2,'java/lang/invoke/VarForm.getMemberNameOrNull',2,0,0)
f(11,252,9,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',9,0,0)
f(12,255,6,2,'java/util/Objects.requireNonNull',6,0,0)
f(9,261,16,1,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d45460.apply')
f(10,261,16,1,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1')
f(11,261,16,1,'scala/collection/mutable/PriorityQueue.dequeue')
f(12,272,5,1,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array')
f(13,276,1,1,'scala/collection/mutable/ArrayBuffer.array')
f(9,277,15,2,'kyo/concurrent/scheduler/Queue$$Lambda$60.0x0000000800d49f98.apply',15,0,0)
f(10,277,15,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',15,0,0)
f(11,278,14,2,'scala/collection/mutable/PriorityQueue.dequeue',14,0,0)
f(12,286,5,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',5,0,0)
f(12,291,1,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',1,0,0)
f(7,292,4,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,292,4,1,'kyo/concurrent/scheduler/Worker.park')
f(9,292,4,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,292,4,1,'jdk/internal/misc/Unsafe.park')
f(11,292,1,3,'Unsafe_Park')
f(12,292,1,3,'pthread_cond_timedwait')
f(11,293,3,3,'[unknown]')
f(12,293,3,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,293,3,5,'entry_SYSCALL_64_after_hwframe')
f(14,293,3,5,'do_syscall_64')
f(15,293,1,5,'__x64_sys_futex')
f(16,293,1,5,'do_futex')
f(17,293,1,5,'futex_wait')
f(18,293,1,5,'futex_wait_queue_me')
f(19,293,1,5,'hrtimer_sleeper_start_expires')
f(20,293,1,5,'_raw_spin_unlock_irqrestore')
f(15,294,1,5,'syscall_exit_to_user_mode')
f(16,294,1,5,'exit_to_user_mode_prepare')
f(17,294,1,5,'exit_to_user_mode_loop')
f(18,294,1,5,'__rseq_handle_notify_resume')
f(15,295,1,5,'syscall_exit_to_user_mode_prepare')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 448px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(28);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,7966,3,'all')
f(1,0,7963,1,'java/lang/Thread.run')
f(2,0,7963,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,7963,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,860,1,'java/util/concurrent/FutureTask.run')
f(5,0,860,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,860,1,'java/util/concurrent/FutureTask.run')
f(7,0,860,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,860,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,860,1,'java/lang/reflect/Method.invoke')
f(10,0,860,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,860,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,860,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,860,1,'kyo/bench/jmh_generated/ChainedForkBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,860,1,'kyo/bench/jmh_generated/ChainedForkBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,860,1,'kyo/bench/Bench.syncKyo')
f(16,0,407,1,'kyo/bench/Bench.runLoop$1')
f(17,0,203,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,203,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,203,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,203,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,145,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,145,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,79,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,79,66,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,79,66,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,145,49,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,194,9,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,194,9,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,194,9,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,203,204,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,203,185,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,203,185,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,203,185,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,203,115,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,203,115,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,203,115,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(24,203,115,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,203,115,2,'kyo.concurrent.scheduler.IOTask')
f(21,318,70,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,318,70,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c83420.apply')
f(23,318,70,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,318,70,1,'kyo/concurrent/fibers$Fiber.join')
f(25,318,70,1,'kyo/concurrent/fibers$Fibers.get')
f(26,318,70,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,318,70,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,388,19,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,388,19,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c83c20.apply')
f(20,388,19,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,388,19,1,'kyo/concurrent/fibers$Fiber.block')
f(22,388,19,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,407,453,1,'kyo/bench/ChainedForkBench.kyoBench')
f(17,407,58,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,407,58,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,407,58,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,407,58,2,'kyo.bench.ChainedForkBench$$Lambda$37+0x0000000800c3f088')
f(17,465,220,1,'kyo/concurrent/fibers$Fibers.block')
f(18,465,62,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,465,62,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,527,108,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,527,108,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,635,50,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,635,50,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,685,175,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,685,60,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,685,60,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,685,60,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,685,60,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c83420')
f(18,745,63,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,745,56,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,745,56,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,745,56,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,745,56,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(19,801,7,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,801,7,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(18,808,52,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,808,52,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(4,860,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f2b8.run')
f(5,860,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,860,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,860,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,860,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,860,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,860,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,860,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,870,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,870,1,2,'java.lang.String')
f(4,871,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1f4e0.run')
f(5,871,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,871,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,871,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,871,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,871,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,871,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$69+0x0000000800d4e5f0')
f(4,882,7081,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d1fda8.run')
f(5,882,7081,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,882,7081,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,882,6623,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,882,6623,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,882,2598,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,882,2598,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,882,2598,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,882,2598,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(13,882,2598,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,882,343,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(14,1225,1614,2,'kyo.concurrent.scheduler.IOTask')
f(14,2839,641,1,'kyo/concurrent/fibers$Fiber$.promise')
f(15,2839,641,2,'kyo.concurrent.fibers$Fiber')
f(9,3480,1,1,'kyo/bench/ChainedForkBench$$anon$4.apply')
f(10,3480,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,3480,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,3480,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(13,3480,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,3480,1,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(9,3481,4024,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,3481,4024,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,3481,4024,1,'kyo/bench/ChainedForkBench$$Lambda$62.0x0000000800d4a518.apply')
f(12,3481,4024,1,'kyo/bench/ChainedForkBench.$anonfun$3')
f(13,3481,4024,1,'kyo/bench/ChainedForkBench.iterate$2')
f(14,3481,761,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4c800.linkToTargetMethod')
f(15,3481,761,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(16,3481,761,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,3481,761,2,'kyo.bench.ChainedForkBench$$Lambda$62+0x0000000800d4a518')
f(14,4242,961,1,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2')
f(15,4242,961,2,'kyo.bench.ChainedForkBench$$anon$2')
f(14,5203,2302,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(15,5203,674,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,5203,674,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,5203,674,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,5203,674,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(15,5877,876,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(16,5877,876,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(15,6753,752,1,'kyo/locals$Locals$.save')
f(16,6753,752,2,'kyo.locals$Locals$$anon$3')
f(7,7505,458,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,7505,458,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,7505,458,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,7505,458,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,7505,458,2,'kyo.concurrent.scheduler.Queue$$Lambda$56+0x0000000800d45000')
f(1,7963,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,7963,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,7963,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,7963,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,7963,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,7963,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,7963,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,7963,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,7963,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,7963,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,7963,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,7963,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,7963,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 576px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(36);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,296,3,'all')
f(1,0,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,1,3,'thread_native_entry(Thread*)')
f(3,0,1,4,'Thread::call_run()')
f(4,0,1,4,'JavaThread::thread_main_inner()')
f(5,0,1,4,'CompileBroker::compiler_thread_loop()')
f(6,0,1,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,1,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,1,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,1,4,'Compile::Code_Gen()')
f(10,0,1,4,'Matcher::match()')
f(11,0,1,4,'Matcher::xform(Node*, int)')
f(12,0,1,4,'Matcher::match_tree(Node const*)')
f(13,0,1,4,'Matcher::Label_Root(Node const*, State*, Node*, Node*&)')
f(14,0,1,4,'TypeKlassPtr::singleton() const')
f(1,1,295,1,'java/lang/Thread.run')
f(2,1,295,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,1,295,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,1,2,1,'java/util/concurrent/FutureTask.run')
f(5,1,2,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,1,2,1,'java/util/concurrent/FutureTask.run')
f(7,1,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,1,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,1,2,1,'java/lang/reflect/Method.invoke')
f(10,1,2,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,1,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,1,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,1,2,1,'kyo/bench/jmh_generated/ChainedForkBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,1,2,1,'kyo/bench/jmh_generated/ChainedForkBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,1,2,1,'kyo/bench/Bench.syncKyo')
f(16,1,2,1,'kyo/bench/Bench.runLoop$1')
f(17,1,2,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,1,2,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,1,2,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,1,2,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,1,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,1,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,1,2,1,'java/util/concurrent/locks/LockSupport.park')
f(24,1,2,1,'jdk/internal/misc/Unsafe.park')
f(25,1,1,3,'Unsafe_Park')
f(25,2,1,3,'[unknown]')
f(26,2,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,2,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,2,1,5,'do_syscall_64')
f(29,2,1,5,'__x64_sys_futex')
f(30,2,1,5,'do_futex')
f(31,2,1,5,'futex_wait')
f(32,2,1,5,'futex_wait_queue_me')
f(33,2,1,5,'schedule')
f(34,2,1,5,'__schedule')
f(35,2,1,5,'finish_task_switch.isra.0')
f(4,3,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f2b8.run')
f(5,3,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,3,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,3,1,1,'java/lang/Thread.sleep')
f(8,3,1,3,'[unknown]')
f(9,3,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,3,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,3,1,5,'do_syscall_64')
f(12,3,1,5,'__x64_sys_futex')
f(13,3,1,5,'do_futex')
f(14,3,1,5,'futex_wait')
f(15,3,1,5,'futex_wait_queue_me')
f(16,3,1,5,'schedule')
f(17,3,1,5,'__schedule')
f(18,3,1,5,'finish_task_switch.isra.0')
f(4,4,292,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d1fda8.run')
f(5,4,292,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,4,292,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,17,218,1,'kyo/concurrent/scheduler/IOTask.run',21,0,0)
f(8,17,218,1,'kyo/concurrent/scheduler/IOTask.eval',21,0,0)
f(9,50,123,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,62,3,2,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2',3,0,0)
f(10,65,108,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,72,101,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',5,0,0)
f(12,77,96,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(13,79,94,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',51,0,0)
f(14,116,7,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',7,0,0)
f(15,120,3,2,'kyo/ios$KyoIO.<init>',3,0,0)
f(16,121,2,2,'kyo/core$internal$Kyo.<init>',2,0,0)
f(14,123,34,2,'kyo/concurrent/scheduler/IOTask.<init>',34,0,0)
f(15,153,4,2,'kyo/concurrent/scheduler/IOPromise.<init>',4,0,0)
f(16,153,4,2,'kyo/concurrent/scheduler/IOPromise.<init>',4,0,0)
f(14,157,16,2,'kyo/concurrent/scheduler/Scheduler$.schedule',16,0,0)
f(15,166,7,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',7,0,0)
f(16,168,5,2,'kyo/concurrent/scheduler/Queue.offer',5,0,0)
f(17,168,4,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',4,0,0)
f(18,168,4,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',4,0,0)
f(19,168,3,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',3,0,0)
f(19,171,1,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d474b0.<init>',1,0,0)
f(17,172,1,2,'kyo/concurrent/scheduler/Queue.tryModify',1,0,0)
f(18,172,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(9,173,28,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,173,28,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',28,0,0)
f(11,178,23,2,'kyo/bench/ChainedForkBench$$Lambda$62.0x0000000800d4a518.apply',23,0,0)
f(12,179,22,2,'kyo/bench/ChainedForkBench.$anonfun$3',22,0,0)
f(13,179,22,2,'kyo/bench/ChainedForkBench.iterate$2',22,0,0)
f(14,179,1,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d4c800.linkToTargetMethod',1,0,0)
f(15,179,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial',1,0,0)
f(16,179,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(14,180,12,2,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2',12,0,0)
f(15,190,2,2,'kyo/bench/ChainedForkBench$$anon$2.<init>',2,0,0)
f(16,190,2,2,'kyo/core$internal$KyoCont.<init>',2,0,0)
f(14,192,9,2,'kyo/concurrent/fibers$Fibers.forkFiber',9,0,0)
f(15,192,3,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',3,0,0)
f(16,192,3,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',3,0,0)
f(17,192,2,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',2,0,0)
f(17,194,1,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.<init>',1,0,0)
f(15,195,4,2,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',4,0,0)
f(16,197,2,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',2,0,0)
f(17,198,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(15,199,2,2,'kyo/locals$Locals$.save',2,0,0)
f(9,201,9,1,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf')
f(9,210,14,1,'kyo/concurrent/scheduler/IOTask.loop$8',2,0,0)
f(10,222,2,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,222,2,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,222,1,1,'java/util/concurrent/atomic/AtomicReference.compareAndSet')
f(13,222,1,1,'java/lang/invoke/VarHandleGuards.guard_LLL_Z')
f(14,222,1,1,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet')
f(12,223,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,223,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,223,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,223,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,223,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,223,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,223,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,223,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,223,1,1,'jdk/internal/misc/Unsafe.unpark')
f(21,223,1,3,'pthread_cond_signal')
f(22,223,1,5,'entry_SYSCALL_64_after_hwframe')
f(23,223,1,5,'do_syscall_64')
f(24,223,1,5,'__x64_sys_futex')
f(25,223,1,5,'do_futex')
f(26,223,1,5,'futex_wake')
f(27,223,1,5,'wake_up_q')
f(28,223,1,5,'_raw_spin_unlock_irqrestore')
f(9,224,6,6,'kyo/core$internal$KyoCont.effect',0,6,0)
f(9,230,3,1,'kyo/ios$KyoIO.effect')
f(9,233,2,3,'vtable stub')
f(7,235,58,1,'kyo/concurrent/scheduler/Queue.poll',3,0,0)
f(8,247,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(9,247,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(8,248,5,1,'kyo/concurrent/scheduler/Queue.isEmpty',1,0,0)
f(9,251,2,1,'kyo/concurrent/scheduler/Queue.items')
f(8,253,40,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,253,18,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',18,0,0)
f(10,259,12,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',12,0,0)
f(11,264,1,2,'java/lang/invoke/VarForm.getMemberName',1,0,0)
f(12,264,1,2,'java/lang/invoke/VarForm.getMemberNameOrNull',1,0,0)
f(11,265,6,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',6,0,0)
f(12,265,6,2,'java/util/Objects.requireNonNull',6,0,0)
f(9,271,22,2,'kyo/concurrent/scheduler/Queue$$Lambda$61.0x0000000800d4a258.apply',22,0,0)
f(10,271,22,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',22,0,0)
f(11,273,20,2,'scala/collection/mutable/PriorityQueue.dequeue',20,0,0)
f(12,279,12,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',12,0,0)
f(12,291,2,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',2,0,0)
f(7,293,2,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,293,2,1,'kyo/concurrent/scheduler/Worker.park')
f(9,293,2,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,293,2,1,'jdk/internal/misc/Unsafe.park')
f(11,293,2,3,'[unknown]')
f(12,293,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,293,2,5,'entry_SYSCALL_64_after_hwframe')
f(14,293,2,5,'do_syscall_64')
f(15,293,2,5,'__x64_sys_futex')
f(16,293,2,5,'do_futex')
f(17,293,2,5,'futex_wait')
f(18,293,2,5,'futex_wait_queue_me')
f(19,293,1,5,'hrtimer_sleeper_start_expires')
f(20,293,1,5,'_raw_spin_unlock_irqrestore')
f(19,294,1,5,'schedule')
f(20,294,1,5,'__schedule')
f(21,294,1,5,'finish_task_switch.isra.0')
f(7,295,1,1,'kyo/concurrent/scheduler/Worker.stop$1')
f(8,295,1,1,'kyo/concurrent/scheduler/Scheduler$.stopWorker')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 448px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(28);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,12371,3,'all')
f(1,0,12368,1,'java/lang/Thread.run')
f(2,0,12368,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,12368,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,2105,1,'java/util/concurrent/FutureTask.run')
f(5,0,2105,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,2105,1,'java/util/concurrent/FutureTask.run')
f(7,0,2105,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,2105,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,2105,1,'java/lang/reflect/Method.invoke')
f(10,0,2105,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,2105,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,2105,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,2105,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,2105,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,2105,1,'kyo/bench/Bench.forkKyo')
f(16,0,88,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,88,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,88,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,19,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,0,19,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3fb00')
f(19,19,69,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3fb00')
f(16,88,182,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,88,182,2,'kyo.bench.Bench$$anon$1')
f(16,270,1339,1,'kyo/bench/Bench.runLoop$2')
f(17,270,581,1,'kyo/bench/Bench$$anon$1.apply')
f(18,270,111,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,270,111,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c81000.apply')
f(20,270,111,1,'kyo/bench/Bench.$anonfun$2')
f(21,270,111,1,'kyo/concurrent/fibers$Fiber.block')
f(22,270,111,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,381,470,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,381,470,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,381,470,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85290.apply')
f(21,381,470,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,381,22,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,403,345,2,'kyo.concurrent.scheduler.IOTask')
f(22,748,103,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,748,103,2,'kyo.concurrent.fibers$Fiber')
f(17,851,758,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,851,758,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,851,758,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,851,758,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,851,346,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,851,346,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,851,97,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,948,249,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,948,249,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,1197,182,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,1379,230,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,1379,230,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,1379,230,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,1609,496,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,1609,169,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1609,169,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1609,169,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1609,169,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c85290')
f(17,1778,206,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,1778,206,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,1984,121,1,'kyo/locals$Locals$.save')
f(18,1984,121,2,'kyo.locals$Locals$$anon$3')
f(4,2105,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f4b8.run')
f(5,2105,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,2105,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,2105,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,2105,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,2105,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,2105,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,2105,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,2115,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,2115,1,2,'java.lang.String')
f(4,2116,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f6e0.run')
f(5,2116,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,2116,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,2116,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,2116,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,2116,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,2116,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,2116,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$62+0x0000000800d55580')
f(4,2127,10241,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d243c0.run')
f(5,2127,10241,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,2127,10241,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,2127,10240,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,2127,10240,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,2127,6837,1,'kyo/bench/CollectAllBench$$anon$2.apply')
f(10,2127,2573,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(11,2127,1653,2,'kyo.bench.CollectAllBench$$anon$2')
f(11,3780,920,1,'kyo/bench/CollectAllBench$$Lambda$58.0x0000000800d56000.apply')
f(12,3780,920,1,'kyo/bench/CollectAllBench.$anonfun$2')
f(13,3780,918,1,'scala/collection/AbstractIterable.sum')
f(14,3780,918,1,'scala/collection/IterableOnceOps.sum$')
f(15,3780,918,1,'scala/collection/IterableOnceOps.sum')
f(16,3780,918,1,'scala/collection/AbstractIterable.reduce')
f(17,3780,918,1,'scala/collection/IterableOnceOps.reduce$')
f(18,3780,918,1,'scala/collection/IterableOnceOps.reduce')
f(19,3780,918,1,'scala/collection/AbstractIterable.reduceLeft')
f(20,3780,918,1,'scala/collection/IterableOnceOps.reduceLeft$')
f(21,3780,918,1,'scala/collection/IterableOnceOps.reduceLeft')
f(22,3780,918,1,'scala/collection/IterableOnceOps$$Lambda$59.0x0000000800d57638.apply')
f(23,3780,918,1,'scala/collection/IterableOnceOps.$anonfun$sum$1')
f(24,3780,918,1,'scala/math/Numeric$IntIsIntegral$.plus')
f(25,3780,918,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(26,3780,918,1,'java/lang/Integer.valueOf')
f(27,3780,918,2,'java.lang.Integer')
f(13,4698,2,1,'scala/runtime/BoxesRunTime.boxToLong')
f(14,4698,2,1,'java/lang/Long.valueOf')
f(15,4698,2,2,'java.lang.Long')
f(10,4700,4264,1,'kyo/lists$Lists$$anon$11.apply')
f(11,4700,4264,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(12,4700,4264,1,'kyo/lists$Lists$$Lambda$57.0x0000000800d53b78.apply')
f(13,4700,4264,1,'kyo/lists$Lists.$anonfun$5')
f(14,4700,2922,1,'kyo/lists$Lists.loop$2')
f(15,4700,1319,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,4700,1319,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,4700,1319,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,4700,1319,2,'kyo.lists$Lists$$Lambda$57+0x0000000800d53b78')
f(15,6019,1603,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(16,6019,1603,2,'kyo.lists$Lists$$anon$11')
f(14,7622,1342,1,'scala/collection/mutable/ListBuffer.addOne')
f(15,7622,1342,2,'scala.collection.immutable.$colon$colon')
f(9,8964,3403,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,8964,3403,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,8964,3403,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3fb00.apply')
f(12,8964,3403,1,'kyo/bench/Bench.$anonfun$1')
f(13,8964,3403,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,8964,3403,1,'kyo/bench/CollectAllBench.kyoBench')
f(15,8964,5,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(16,8964,5,2,'kyo.bench.CollectAllBench$$anon$2')
f(15,8969,12,1,'kyo/lists$Lists.collect')
f(16,8969,1,2,'java.lang.Object[]')
f(16,8970,5,1,'kyo/lists$Lists.loop$2')
f(17,8970,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,8970,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,8970,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,8970,2,2,'kyo.lists$Lists$$Lambda$57+0x0000000800d53b78')
f(17,8972,3,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(18,8972,3,2,'kyo.lists$Lists$$anon$11')
f(16,8975,6,1,'scala/collection/mutable/ListBuffer$.apply')
f(17,8975,6,1,'scala/collection/IterableFactory.apply$')
f(18,8975,6,1,'scala/collection/IterableFactory.apply')
f(19,8975,6,1,'scala/collection/mutable/ListBuffer$.from')
f(20,8975,6,1,'scala/collection/mutable/ListBuffer$.from')
f(21,8975,3,2,'scala.collection.mutable.ListBuffer')
f(21,8978,3,1,'scala/collection/mutable/ListBuffer.scala$collection$mutable$ListBuffer$$freshFrom')
f(22,8978,3,1,'scala/collection/immutable/ArraySeq$ofRef.iterator')
f(23,8978,3,2,'scala.collection.ArrayOps$ArrayIterator')
f(15,8981,1691,1,'scala/collection/AbstractIterable.toList')
f(16,8981,1691,1,'scala/collection/IterableOnceOps.toList$')
f(17,8981,1691,1,'scala/collection/IterableOnceOps.toList')
f(18,8981,1691,1,'scala/collection/immutable/List.prependedAll')
f(19,8981,1688,2,'scala.collection.immutable.$colon$colon')
f(19,10669,3,1,'scala/collection/immutable/Vector.iterator')
f(20,10669,3,2,'scala.collection.immutable.NewVectorIterator')
f(15,10672,1695,1,'scala/collection/immutable/Range.map')
f(16,10672,1229,1,'kyo/bench/CollectAllBench$$Lambda$56.0x0000000800d44800.apply')
f(17,10672,1229,1,'kyo/bench/CollectAllBench.$anonfun$adapted$1')
f(18,10672,1229,1,'kyo/bench/CollectAllBench.$anonfun$1')
f(19,10672,1229,2,'kyo.bench.CollectAllBench$$anon$1')
f(16,11901,119,1,'scala/collection/SeqFactory$Delegate.newBuilder')
f(17,11901,119,1,'scala/collection/immutable/Vector$.newBuilder')
f(18,11901,119,1,'scala/collection/immutable/Vector$.newBuilder')
f(19,11901,110,2,'scala.collection.immutable.VectorBuilder')
f(19,12011,9,1,'scala/collection/immutable/VectorBuilder.<init>')
f(20,12011,9,2,'java.lang.Object[]')
f(16,12020,336,1,'scala/collection/immutable/VectorBuilder.addOne')
f(17,12020,336,1,'scala/collection/immutable/VectorBuilder.addOne')
f(18,12020,336,1,'scala/collection/immutable/VectorBuilder.advance')
f(19,12020,336,1,'scala/collection/immutable/VectorBuilder.advance1')
f(20,12020,8,2,'java.lang.Object[][]')
f(20,12028,328,2,'java.lang.Object[]')
f(16,12356,11,1,'scala/collection/immutable/VectorBuilder.result')
f(17,12356,11,1,'scala/collection/immutable/VectorBuilder.result')
f(18,12356,2,1,'java/util/Arrays.copyOf')
f(19,12356,2,2,'java.lang.Object[]')
f(18,12358,7,1,'java/util/Arrays.copyOfRange')
f(19,12358,7,2,'java.lang.Object[][]')
f(18,12365,2,2,'scala.collection.immutable.Vector2')
f(7,12367,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,12367,1,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,12367,1,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,12367,1,1,'scala/runtime/ObjectRef.create')
f(11,12367,1,2,'scala.runtime.ObjectRef')
f(1,12368,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,12368,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,12368,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,12368,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,12368,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,12368,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,12368,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,12368,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,12368,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,12368,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,12368,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,12368,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,12368,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 816px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(51);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,262,3,'all')
f(1,0,10,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,10,3,'thread_native_entry(Thread*)')
f(3,0,10,4,'Thread::call_run()')
f(4,0,10,4,'JavaThread::thread_main_inner()')
f(5,0,10,4,'CompileBroker::compiler_thread_loop()')
f(6,0,10,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,10,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,10,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,5,4,'Compile::Code_Gen()')
f(10,0,1,4,'PhaseCFG::do_global_code_motion()')
f(11,0,1,4,'PhaseCFG::global_code_motion()')
f(12,0,1,4,'PhaseCFG::schedule_early(VectorSet&, Node_Stack&)')
f(10,1,3,4,'PhaseChaitin::Register_Allocate()')
f(11,1,1,4,'PhaseChaitin::post_allocate_copy_removal()')
f(12,1,1,4,'PhaseChaitin::elide_copy(Node*, int, Block*, Node_List&, Node_List&, bool)')
f(11,2,1,4,'PhaseIFG::Compute_Effective_Degree()')
f(12,2,1,4,'PhaseIFG::effective_degree(unsigned int) const')
f(13,2,1,4,'IndexSetIterator::advance_and_next()')
f(11,3,1,4,'PhaseLive::compute(unsigned int)')
f(10,4,1,4,'PhaseOutput::Output()')
f(11,4,1,4,'PhaseOutput::shorten_branches(unsigned int*)')
f(9,5,3,4,'Compile::Optimize()')
f(10,5,1,4,'PhaseCCP::analyze()')
f(10,6,1,4,'PhaseIdealLoop::build_and_optimize(LoopOptsMode)')
f(11,6,1,4,'PhaseIdealLoop::build_loop_tree()')
f(12,6,1,4,'PhaseIdealLoop::build_loop_tree_impl(Node*, int)')
f(13,6,1,4,'PhaseIdealLoop::sort(IdealLoopTree*, IdealLoopTree*)')
f(10,7,1,4,'PhaseIdealLoop::optimize(PhaseIterGVN&, LoopOptsMode)')
f(11,7,1,4,'PhaseIdealLoop::build_and_optimize(LoopOptsMode)')
f(12,7,1,4,'PhaseIdealLoop::build_loop_late(VectorSet&, Node_List&, Node_Stack&)')
f(13,7,1,4,'PhaseIdealLoop::build_loop_late_post_work(Node*, bool)')
f(14,7,1,4,'PhaseIdealLoop::get_late_ctrl_with_anti_dep(LoadNode*, Node*, Node*)')
f(9,8,1,4,'ParseGenerator::generate(JVMState*)')
f(10,8,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(11,8,1,4,'Parse::do_all_blocks()')
f(12,8,1,4,'Parse::do_one_block()')
f(13,8,1,4,'Parse::do_call()')
f(14,8,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(15,8,1,4,'ParseGenerator::generate(JVMState*)')
f(16,8,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(17,8,1,4,'Parse::do_all_blocks()')
f(18,8,1,4,'Parse::do_one_block()')
f(19,8,1,4,'Parse::do_call()')
f(20,8,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(21,8,1,4,'ParseGenerator::generate(JVMState*)')
f(22,8,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(23,8,1,4,'Parse::do_all_blocks()')
f(24,8,1,4,'Parse::do_one_block()')
f(25,8,1,4,'Parse::do_call()')
f(26,8,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(27,8,1,4,'ParseGenerator::generate(JVMState*)')
f(28,8,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(29,8,1,4,'Parse::do_all_blocks()')
f(30,8,1,4,'Parse::do_one_block()')
f(31,8,1,4,'Parse::do_call()')
f(32,8,1,4,'ParseGenerator::generate(JVMState*)')
f(33,8,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(34,8,1,4,'Parse::do_all_blocks()')
f(35,8,1,4,'Parse::do_one_block()')
f(36,8,1,4,'Parse::do_call()')
f(37,8,1,4,'Compile::call_generator(ciMethod*, int, bool, JVMState*, bool, float, ciKlass*, bool)')
f(38,8,1,4,'InlineTree::ok_to_inline(ciMethod*, JVMState*, ciCallProfile&, bool&)')
f(39,8,1,4,'ciMethod::get_flow_analysis()')
f(40,8,1,4,'ciTypeFlow::do_flow()')
f(41,8,1,4,'ciTypeFlow::flow_types()')
f(42,8,1,4,'ciTypeFlow::df_flow_types(ciTypeFlow::Block*, bool, ciTypeFlow::StateVector*, ciTypeFlow::JsrSet*)')
f(43,8,1,4,'ciTypeFlow::flow_block(ciTypeFlow::Block*, ciTypeFlow::StateVector*, ciTypeFlow::JsrSet*)')
f(44,8,1,4,'ciTypeFlow::StateVector::apply_one_bytecode(ciBytecodeStream*)')
f(45,8,1,4,'ciTypeFlow::StateVector::do_invoke(ciBytecodeStream*, bool)')
f(46,8,1,4,'ciBytecodeStream::get_method(bool&, ciSignature**)')
f(47,8,1,4,'ciEnv::get_method_by_index_impl(constantPoolHandle const&, int, Bytecodes::Code, ciInstanceKlass*)')
f(48,8,1,4,'ciObjectFactory::get_metadata(Metadata*)')
f(49,8,1,4,'ciObjectFactory::create_new_metadata(Metadata*)')
f(50,8,1,4,'Dependencies::check_evol_method(Method*)')
f(9,9,1,4,'PhaseRemoveUseless::PhaseRemoveUseless(PhaseGVN*, Unique_Node_List*, Phase::PhaseNumber)')
f(10,9,1,4,'Compile::identify_useful_nodes(Unique_Node_List&)')
f(1,10,4,3,'[unknown_Java]')
f(2,10,4,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(1,14,248,1,'java/lang/Thread.run')
f(2,14,248,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,14,248,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,14,31,1,'java/util/concurrent/FutureTask.run')
f(5,14,31,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,14,31,1,'java/util/concurrent/FutureTask.run')
f(7,14,31,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,14,31,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,14,31,1,'java/lang/reflect/Method.invoke')
f(10,14,31,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,14,31,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,14,31,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,14,31,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,14,31,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,14,31,1,'kyo/bench/Bench.forkKyo',1,0,0)
f(16,14,1,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,14,1,1,'kyo/bench/Bench$$anon$1.<init>')
f(18,14,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(19,14,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(20,14,1,4,'MemAllocator::Allocation::notify_allocation_jfr_sampler()')
f(16,15,30,1,'kyo/bench/Bench.runLoop$2',1,0,0)
f(17,15,10,1,'kyo/bench/Bench$$anon$1.apply')
f(18,15,1,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,15,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(20,15,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(21,15,1,4,'MemAllocator::allocate() const')
f(22,15,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(23,15,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(24,15,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(25,15,1,4,'G1CollectedHeap::new_mutator_alloc_region(unsigned long, bool, unsigned int)')
f(18,16,9,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,16,9,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,16,9,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85290.apply',1,0,0)
f(21,16,9,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',1,0,0)
f(22,16,1,2,'kyo/concurrent/scheduler/IOTask.<init>',1,0,0)
f(22,17,8,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,17,8,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,17,8,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,17,8,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,17,8,1,'jdk/internal/misc/Unsafe.unpark')
f(27,17,1,3,'Unsafe_Unpark')
f(28,17,1,3,'pthread_mutex_unlock')
f(27,18,7,3,'pthread_cond_signal')
f(28,19,6,5,'entry_SYSCALL_64_after_hwframe')
f(29,19,6,5,'do_syscall_64')
f(30,19,6,5,'__x64_sys_futex')
f(31,19,6,5,'do_futex')
f(32,19,6,5,'futex_wake')
f(33,19,6,5,'wake_up_q')
f(34,19,6,5,'_raw_spin_unlock_irqrestore')
f(17,25,20,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply',1,0,0)
f(18,25,20,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply',1,0,0)
f(19,25,20,1,'kyo/concurrent/scheduler/IOPromise.block',1,0,0)
f(20,25,20,1,'kyo/concurrent/scheduler/IOPromise.loop$4',1,0,0)
f(21,25,19,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,25,19,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,27,16,1,'java/util/concurrent/locks/LockSupport.park')
f(24,27,16,1,'jdk/internal/misc/Unsafe.park')
f(25,27,16,3,'[unknown]')
f(26,27,16,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,29,14,5,'entry_SYSCALL_64_after_hwframe')
f(28,29,14,5,'do_syscall_64')
f(29,29,13,5,'__x64_sys_futex')
f(30,30,12,5,'do_futex')
f(31,30,12,5,'futex_wait')
f(32,31,1,5,'__get_user_nocheck_4')
f(32,32,10,5,'futex_wait_queue_me')
f(33,32,10,5,'schedule')
f(34,32,10,5,'__schedule')
f(35,32,10,5,'finish_task_switch.isra.0')
f(29,42,1,5,'syscall_exit_to_user_mode')
f(30,42,1,5,'exit_to_user_mode_prepare')
f(31,42,1,5,'exit_to_user_mode_loop')
f(32,42,1,5,'__rseq_handle_notify_resume')
f(33,42,1,5,'rseq_ip_fixup')
f(34,42,1,5,'__get_user_8')
f(23,43,1,2,'kyo/concurrent/scheduler/IOPromise$$anon$1.tryAcquireShared',1,0,0)
f(21,44,1,2,'kyo/concurrent/scheduler/IOPromise.loop$5',1,0,0)
f(22,44,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(23,44,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(24,44,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(25,44,1,2,'java/util/Objects.requireNonNull',1,0,0)
f(4,45,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f4b8.run')
f(5,45,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,45,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,45,1,1,'java/lang/Thread.sleep')
f(8,45,1,3,'JVM_Sleep')
f(9,45,1,4,'JavaThread::sleep(long)')
f(10,45,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(11,45,1,5,'entry_SYSCALL_64_after_hwframe')
f(12,45,1,5,'do_syscall_64')
f(13,45,1,5,'syscall_enter_from_user_mode')
f(4,46,216,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d243c0.run')
f(5,46,216,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,46,216,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,46,188,1,'kyo/concurrent/scheduler/IOTask.run',12,0,0)
f(8,46,188,1,'kyo/concurrent/scheduler/IOTask.eval',27,0,0)
f(9,51,110,1,'kyo/bench/CollectAllBench$$anon$2.apply',22,0,0)
f(10,52,32,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(11,52,32,1,'kyo/bench/CollectAllBench$$Lambda$58.0x0000000800d563d0.apply')
f(12,52,32,2,'kyo/bench/CollectAllBench.$anonfun$2',19,0,0)
f(13,52,32,2,'scala/collection/AbstractIterable.sum',19,0,0)
f(14,52,32,2,'scala/collection/IterableOnceOps.sum$',19,0,0)
f(15,52,32,2,'scala/collection/IterableOnceOps.sum',19,0,0)
f(16,52,32,2,'scala/collection/AbstractIterable.reduce',19,0,0)
f(17,52,32,2,'scala/collection/IterableOnceOps.reduce$',19,0,0)
f(18,52,32,2,'scala/collection/IterableOnceOps.reduce',19,0,0)
f(19,52,32,2,'scala/collection/AbstractIterable.reduceLeft',19,0,0)
f(20,52,32,2,'scala/collection/IterableOnceOps.reduceLeft$',19,0,0)
f(21,52,32,2,'scala/collection/IterableOnceOps.reduceLeft',19,0,0)
f(22,53,25,2,'scala/collection/IterableOnceOps$$Lambda$59.0x0000000800d57808.apply',12,0,0)
f(23,53,25,2,'scala/collection/IterableOnceOps.$anonfun$sum$1',12,0,0)
f(24,53,25,2,'scala/math/Numeric$IntIsIntegral$.plus',12,0,0)
f(25,53,25,2,'scala/runtime/BoxesRunTime.boxToInteger',12,0,0)
f(26,64,14,1,'java/lang/Integer.valueOf',1,0,0)
f(27,65,13,1,'java/lang/Integer.<init>')
f(28,65,13,1,'java/lang/Number.<init>')
f(22,78,6,2,'scala/collection/StrictOptimizedLinearSeqOps$$anon$1.next',6,0,0)
f(23,83,1,2,'scala/collection/immutable/$colon$colon.tail',1,0,0)
f(24,83,1,2,'scala/collection/immutable/$colon$colon.tail',1,0,0)
f(25,83,1,2,'scala/collection/immutable/$colon$colon.next',1,0,0)
f(10,84,77,1,'kyo/lists$Lists$$anon$11.apply',21,0,0)
f(11,86,24,2,'kyo/bench/CollectAllBench$$anon$1.apply',19,0,0)
f(12,86,24,2,'kyo/bench/CollectAllBench$$anon$1.apply',19,0,0)
f(13,86,24,2,'scala/runtime/BoxesRunTime.boxToInteger',19,0,0)
f(11,110,51,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(12,112,42,2,'kyo/lists$Lists$$Lambda$57.0x0000000800d56000.apply',41,0,0)
f(13,112,42,2,'kyo/lists$Lists.$anonfun$5',41,0,0)
f(14,113,13,2,'kyo/lists$Lists.loop$2',12,0,0)
f(15,120,5,2,'scala/collection/immutable/List.equals',5,0,0)
f(16,120,5,2,'scala/collection/immutable/List.listEq$1',5,0,0)
f(17,122,3,2,'scala/collection/immutable/List.isEmpty',3,0,0)
f(15,125,1,1,'scala/collection/mutable/ListBuffer.toList')
f(14,126,28,2,'scala/collection/mutable/ListBuffer.addOne',28,0,0)
f(15,129,5,2,'scala/collection/immutable/$colon$colon.<init>',5,0,0)
f(16,130,4,2,'scala/runtime/Statics.releaseFence',4,0,0)
f(17,130,4,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d1c400.invoke_MT',4,0,0)
f(18,133,1,2,'java/lang/invoke/Invokers.checkGenericType',1,0,0)
f(19,133,1,2,'java/lang/invoke/MethodHandle.asType',1,0,0)
f(15,134,1,2,'scala/collection/mutable/ListBuffer.ensureUnaliased',1,0,0)
f(15,135,5,2,'scala/collection/mutable/ListBuffer.first_$eq',5,0,0)
f(15,140,14,2,'scala/collection/mutable/ListBuffer.last0_$eq',14,0,0)
f(12,154,7,2,'kyo/lists$Lists$$anon$11.<init>',7,0,0)
f(13,154,7,2,'kyo/core$internal$KyoCont.<init>',7,0,0)
f(14,155,2,2,'kyo/core$internal$Kyo.<init>',2,0,0)
f(14,157,4,2,'kyo/ios$KyoIO.effect',4,0,0)
f(9,161,59,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,161,59,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',26,0,0)
f(11,161,59,2,'kyo/bench/Bench$$Lambda$37.0x0000000800c3fb00.apply',26,0,0)
f(12,161,59,2,'kyo/bench/Bench.$anonfun$1',26,0,0)
f(13,161,59,2,'kyo/bench/Bench.kyoBenchFiber',26,0,0)
f(14,161,59,2,'kyo/bench/CollectAllBench.kyoBench',26,0,0)
f(15,161,16,2,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1',16,0,0)
f(16,161,16,2,'kyo/bench/CollectAllBench$$Lambda$58.0x0000000800d563d0.apply',16,0,0)
f(17,161,16,2,'kyo/bench/CollectAllBench.$anonfun$2',16,0,0)
f(18,161,16,2,'scala/runtime/BoxesRunTime.boxToLong',16,0,0)
f(15,177,32,1,'scala/collection/AbstractIterable.toList')
f(16,177,32,1,'scala/collection/IterableOnceOps.toList$')
f(17,177,32,1,'scala/collection/IterableOnceOps.toList')
f(18,177,32,1,'scala/collection/immutable/List.prependedAll')
f(19,182,18,2,'scala/collection/immutable/$colon$colon.<init>',17,0,0)
f(20,185,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(21,185,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(22,185,1,4,'MemAllocator::allocate() const')
f(23,185,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(24,185,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(25,185,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(26,185,1,4,'MutatorAllocRegion::retire(bool)')
f(27,185,1,4,'G1CollectedHeap::retire_mutator_alloc_region(HeapRegion*, unsigned long)')
f(20,186,14,2,'scala/runtime/Statics.releaseFence',14,0,0)
f(21,186,14,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d1c400.invoke_MT',14,0,0)
f(22,186,14,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d54000.invokeStatic',14,0,0)
f(19,200,9,2,'scala/collection/immutable/NewVectorIterator.next',9,0,0)
f(20,200,9,2,'scala/collection/immutable/NewVectorIterator.advance',9,0,0)
f(21,200,9,2,'scala/collection/immutable/NewVectorIterator.advanceSlice',9,0,0)
f(15,209,6,2,'scala/collection/immutable/Range.map',5,0,0)
f(16,209,3,2,'scala/collection/SeqFactory$Delegate.newBuilder',3,0,0)
f(17,209,3,2,'scala/collection/immutable/Vector$.newBuilder',3,0,0)
f(18,209,3,2,'scala/collection/immutable/Vector$.newBuilder',3,0,0)
f(19,209,3,2,'scala/collection/immutable/VectorBuilder.<init>',3,0,0)
f(16,212,3,2,'scala/collection/immutable/VectorBuilder.addOne',2,0,0)
f(17,212,3,2,'scala/collection/immutable/VectorBuilder.addOne',2,0,0)
f(18,212,3,2,'scala/collection/immutable/VectorBuilder.advance',2,0,0)
f(19,214,1,1,'scala/collection/immutable/VectorBuilder.advance1')
f(15,215,5,2,'scala/runtime/RichInt$.until$extension',5,0,0)
f(16,218,2,2,'scala/collection/immutable/Range$Exclusive.<init>',2,0,0)
f(17,218,2,2,'scala/collection/immutable/Range.<init>',2,0,0)
f(18,218,2,2,'scala/collection/immutable/Range.longLength',2,0,0)
f(19,218,2,2,'scala/collection/immutable/Range.hasStub',2,0,0)
f(20,219,1,2,'scala/collection/immutable/Range.isExact',1,0,0)
f(21,219,1,2,'scala/collection/immutable/Range.gap',1,0,0)
f(9,220,14,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,220,14,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',1,0,0)
f(11,220,14,1,'kyo/concurrent/scheduler/IOPromise.complete',1,0,0)
f(12,220,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(13,220,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(14,220,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(12,221,13,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,221,13,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,221,13,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,221,13,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,221,13,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,221,13,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,221,13,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,221,13,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,221,13,1,'jdk/internal/misc/Unsafe.unpark')
f(21,221,13,3,'pthread_cond_signal')
f(22,221,13,5,'entry_SYSCALL_64_after_hwframe')
f(23,221,13,5,'do_syscall_64')
f(24,223,9,5,'__x64_sys_futex')
f(25,223,9,5,'do_futex')
f(26,223,9,5,'futex_wake')
f(27,223,9,5,'wake_up_q')
f(28,223,9,5,'_raw_spin_unlock_irqrestore')
f(24,232,2,5,'syscall_enter_from_user_mode')
f(7,234,10,2,'kyo/concurrent/scheduler/Queue.poll',5,0,0)
f(8,234,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(9,234,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(10,234,1,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d45230.<init>',1,0,0)
f(11,234,1,2,'java/lang/Object.<init>',1,0,0)
f(8,235,9,2,'kyo/concurrent/scheduler/Queue.modify',4,0,0)
f(9,235,9,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d45230.apply',4,0,0)
f(10,235,9,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',4,0,0)
f(11,240,4,2,'scala/collection/mutable/PriorityQueue.dequeue',3,0,0)
f(12,242,2,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_size0',1,0,0)
f(7,244,18,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,244,18,1,'kyo/concurrent/scheduler/Worker.park')
f(9,244,18,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,244,18,1,'jdk/internal/misc/Unsafe.park')
f(11,245,1,3,'Unsafe_Park')
f(12,245,1,3,'pthread_mutex_unlock')
f(11,246,16,3,'[unknown]')
f(12,246,13,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,247,12,5,'entry_SYSCALL_64_after_hwframe')
f(14,247,1,5,'__x64_sys_futex')
f(14,248,11,5,'do_syscall_64')
f(15,248,11,5,'__x64_sys_futex')
f(16,248,11,5,'do_futex')
f(17,248,11,5,'futex_wait')
f(18,249,8,5,'futex_wait_queue_me')
f(19,249,8,5,'schedule')
f(20,249,8,5,'__schedule')
f(21,249,8,5,'finish_task_switch.isra.0')
f(18,257,1,5,'futex_wait_setup')
f(18,258,1,5,'hrtimer_active')
f(12,259,3,3,'pthread_cond_timedwait')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 576px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(36);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,13650,3,'all')
f(1,0,13645,1,'java/lang/Thread.run')
f(2,0,13645,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,13645,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,13645,1,'java/util/concurrent/FutureTask.run')
f(5,0,13645,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,13645,1,'java/util/concurrent/FutureTask.run')
f(7,0,13645,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,13645,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,13645,1,'java/lang/reflect/Method.invoke')
f(10,0,13645,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,13645,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,13645,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,13645,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,13645,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,13645,1,'kyo/bench/Bench.syncKyo')
f(16,0,10027,1,'kyo/bench/Bench.runLoop$1')
f(17,0,10027,1,'kyo/bench/CollectAllBench$$anon$2.apply')
f(18,0,3221,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(19,0,2084,2,'kyo.bench.CollectAllBench$$anon$2')
f(19,2084,1137,1,'kyo/bench/CollectAllBench$$Lambda$41.0x0000000800d24940.apply')
f(20,2084,1137,1,'kyo/bench/CollectAllBench.$anonfun$2')
f(21,2084,1137,1,'scala/collection/AbstractIterable.sum')
f(22,2084,1137,1,'scala/collection/IterableOnceOps.sum$')
f(23,2084,1137,1,'scala/collection/IterableOnceOps.sum')
f(24,2084,1137,1,'scala/collection/AbstractIterable.reduce')
f(25,2084,1137,1,'scala/collection/IterableOnceOps.reduce$')
f(26,2084,1137,1,'scala/collection/IterableOnceOps.reduce')
f(27,2084,1137,1,'scala/collection/AbstractIterable.reduceLeft')
f(28,2084,1137,1,'scala/collection/IterableOnceOps.reduceLeft$')
f(29,2084,1137,1,'scala/collection/IterableOnceOps.reduceLeft')
f(30,2084,1137,1,'scala/collection/IterableOnceOps$$Lambda$42.0x0000000800d2a090.apply')
f(31,2084,1137,1,'scala/collection/IterableOnceOps.$anonfun$sum$1')
f(32,2084,1137,1,'scala/math/Numeric$IntIsIntegral$.plus')
f(33,2084,1137,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(34,2084,1137,1,'java/lang/Integer.valueOf')
f(35,2084,1137,2,'java.lang.Integer')
f(18,3221,6806,1,'kyo/lists$Lists$$anon$11.apply')
f(19,3221,6806,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(20,3221,6806,1,'kyo/lists$Lists$$Lambda$40.0x0000000800d0fb38.apply')
f(21,3221,6806,1,'kyo/lists$Lists.$anonfun$5')
f(22,3221,4299,1,'kyo/lists$Lists.loop$2')
f(23,3221,1664,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(24,3221,1664,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(25,3221,1664,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(26,3221,1664,2,'kyo.lists$Lists$$Lambda$40+0x0000000800d0fb38')
f(23,4885,2635,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(24,4885,2635,2,'kyo.lists$Lists$$anon$11')
f(22,7520,2507,1,'scala/collection/mutable/ListBuffer.addOne')
f(23,7520,2507,2,'scala.collection.immutable.$colon$colon')
f(16,10027,3618,1,'kyo/bench/CollectAllBench.kyoBench')
f(17,10027,9,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(18,10027,9,2,'kyo.bench.CollectAllBench$$anon$2')
f(17,10036,9,1,'kyo/lists$Lists.collect')
f(18,10036,9,1,'scala/collection/mutable/ListBuffer$.apply')
f(19,10036,9,1,'scala/collection/IterableFactory.apply$')
f(20,10036,9,1,'scala/collection/IterableFactory.apply')
f(21,10036,9,1,'scala/collection/mutable/ListBuffer$.from')
f(22,10036,9,1,'scala/collection/mutable/ListBuffer$.from')
f(23,10036,9,2,'scala.collection.mutable.ListBuffer')
f(17,10045,1951,1,'scala/collection/AbstractIterable.toList')
f(18,10045,1951,1,'scala/collection/IterableOnceOps.toList$')
f(19,10045,1951,1,'scala/collection/IterableOnceOps.toList')
f(20,10045,1951,1,'scala/collection/immutable/List.prependedAll')
f(21,10045,1942,2,'scala.collection.immutable.$colon$colon')
f(21,11987,9,1,'scala/collection/immutable/Vector.iterator')
f(22,11987,9,2,'scala.collection.immutable.NewVectorIterator')
f(17,11996,1649,1,'scala/collection/immutable/Range.map')
f(18,11996,1107,1,'kyo/bench/CollectAllBench$$Lambda$39.0x0000000800cbeb88.apply')
f(19,11996,1107,1,'kyo/bench/CollectAllBench.$anonfun$adapted$1')
f(20,11996,1107,1,'kyo/bench/CollectAllBench.$anonfun$1')
f(21,11996,1107,2,'kyo.bench.CollectAllBench$$anon$1')
f(18,13103,8,1,'scala/collection/SeqFactory$Delegate.newBuilder')
f(19,13103,8,1,'scala/collection/immutable/Vector$.newBuilder')
f(20,13103,8,1,'scala/collection/immutable/Vector$.newBuilder')
f(21,13103,8,1,'scala/collection/immutable/VectorBuilder.<init>')
f(22,13103,8,2,'java.lang.Object[]')
f(18,13111,518,1,'scala/collection/immutable/VectorBuilder.addOne')
f(19,13111,518,1,'scala/collection/immutable/VectorBuilder.addOne')
f(20,13111,518,1,'scala/collection/immutable/VectorBuilder.advance')
f(21,13111,518,1,'scala/collection/immutable/VectorBuilder.advance1')
f(22,13111,8,2,'java.lang.Object[][]')
f(22,13119,510,2,'java.lang.Object[]')
f(18,13629,16,1,'scala/collection/immutable/VectorBuilder.result')
f(19,13629,16,1,'scala/collection/immutable/VectorBuilder.result')
f(20,13629,16,1,'java/util/Arrays.copyOfRange')
f(21,13629,16,2,'java.lang.Object[][]')
f(1,13645,5,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,13645,5,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,13645,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,13645,5,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,13645,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,13645,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,13645,1,1,'jdk/proxy1/$Proxy0.iterationResult')
f(8,13645,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient$$Lambda$8.0x0000000800c01c70.invoke')
f(9,13645,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.lambda$new$0')
f(10,13645,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushFrame')
f(11,13645,1,1,'java/io/ObjectOutputStream.writeObject')
f(12,13645,1,1,'java/io/ObjectOutputStream.writeObject0')
f(13,13645,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(14,13645,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(15,13645,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(16,13645,1,1,'java/io/ObjectOutputStream.writeObject0')
f(17,13645,1,1,'java/io/ObjectOutputStream.writeArray')
f(18,13645,1,1,'java/io/ObjectOutputStream.writeObject0')
f(19,13645,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(20,13645,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(21,13645,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(22,13645,1,1,'java/io/ObjectOutputStream.writeObject0')
f(23,13645,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(24,13645,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(25,13645,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(26,13645,1,1,'java/io/ObjectOutputStream.writeObject0')
f(27,13645,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(28,13645,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(29,13645,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(30,13645,1,1,'java/io/ObjectOutputStream.writeObject0')
f(31,13645,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(32,13645,1,1,'java/io/ObjectOutputStream$HandleTable.assign')
f(33,13645,1,1,'java/io/ObjectOutputStream$HandleTable.growEntries')
f(34,13645,1,2,'int[]')
f(7,13646,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,13646,1,2,'org.openjdk.jmh.infra.Control')
f(8,13647,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,13647,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,13647,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,13647,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,13647,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,13647,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 592px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(37);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,298,3,'all')
f(1,0,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,1,3,'thread_native_entry(Thread*)')
f(3,0,1,4,'Thread::call_run()')
f(4,0,1,4,'VMThread::run()')
f(5,0,1,4,'VMThread::inner_execute(VM_Operation*)')
f(6,0,1,4,'VMThread::evaluate_operation(VM_Operation*)')
f(7,0,1,4,'VM_Operation::evaluate()')
f(8,0,1,4,'VM_G1CollectForAllocation::doit()')
f(9,0,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint(double)')
f(10,0,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint_helper(double)')
f(11,0,1,4,'G1GCPhaseTimes::print()')
f(12,0,1,4,'G1GCPhaseTimes::print_post_evacuate_collection_set() const')
f(13,0,1,4,'ReferenceProcessorPhaseTimes::print_all_references(unsigned int, bool) const')
f(14,0,1,4,'ReferenceProcessorPhaseTimes::print_phase(ReferenceProcessor::RefProcPhases, unsigned int) const')
f(1,1,5,3,'[unknown_Java]')
f(2,1,5,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(1,6,292,1,'java/lang/Thread.run')
f(2,6,292,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,6,292,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,6,292,1,'java/util/concurrent/FutureTask.run')
f(5,6,292,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,6,292,1,'java/util/concurrent/FutureTask.run')
f(7,6,292,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,6,292,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,6,292,1,'java/lang/reflect/Method.invoke')
f(10,6,292,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,6,292,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,6,292,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,6,292,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,6,292,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,6,292,1,'kyo/bench/Bench.syncKyo',53,0,0)
f(16,6,211,1,'kyo/bench/Bench.runLoop$1',53,0,0)
f(17,25,192,1,'kyo/bench/CollectAllBench$$anon$2.apply',34,0,0)
f(18,34,60,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1',2,0,0)
f(19,35,58,1,'kyo/bench/CollectAllBench$$Lambda$41.0x0000000800d24940.apply')
f(20,35,58,2,'kyo/bench/CollectAllBench.$anonfun$2',49,0,0)
f(21,35,58,2,'scala/collection/AbstractIterable.sum',49,0,0)
f(22,35,58,2,'scala/collection/IterableOnceOps.sum$',49,0,0)
f(23,35,58,2,'scala/collection/IterableOnceOps.sum',49,0,0)
f(24,35,58,2,'scala/collection/AbstractIterable.reduce',49,0,0)
f(25,35,58,2,'scala/collection/IterableOnceOps.reduce$',49,0,0)
f(26,35,58,2,'scala/collection/IterableOnceOps.reduce',49,0,0)
f(27,35,58,2,'scala/collection/AbstractIterable.reduceLeft',49,0,0)
f(28,35,58,2,'scala/collection/IterableOnceOps.reduceLeft$',49,0,0)
f(29,35,58,2,'scala/collection/IterableOnceOps.reduceLeft',49,0,0)
f(30,36,43,2,'scala/collection/IterableOnceOps$$Lambda$42.0x0000000800d2a090.apply',34,0,0)
f(31,36,43,2,'scala/collection/IterableOnceOps.$anonfun$sum$1',34,0,0)
f(32,36,43,2,'scala/math/Numeric$IntIsIntegral$.plus',34,0,0)
f(33,36,40,2,'scala/runtime/BoxesRunTime.boxToInteger',31,0,0)
f(34,65,11,1,'java/lang/Integer.valueOf',2,0,0)
f(35,67,9,1,'java/lang/Integer.<init>')
f(36,67,9,1,'java/lang/Number.<init>')
f(33,76,3,2,'scala/runtime/BoxesRunTime.unboxToInt',3,0,0)
f(30,79,14,2,'scala/collection/StrictOptimizedLinearSeqOps$$anon$1.next',14,0,0)
f(31,92,1,2,'scala/collection/immutable/$colon$colon.head',1,0,0)
f(19,93,1,2,'kyo/bench/CollectAllBench$$anon$2.<init>',1,0,0)
f(20,93,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(18,94,123,1,'kyo/lists$Lists$$anon$11.apply',23,0,0)
f(19,99,18,2,'kyo/bench/CollectAllBench$$anon$1.apply',18,0,0)
f(20,99,18,2,'kyo/bench/CollectAllBench$$anon$1.apply',18,0,0)
f(21,99,18,2,'scala/runtime/BoxesRunTime.boxToInteger',18,0,0)
f(22,113,4,2,'java/lang/Integer.valueOf',4,0,0)
f(19,117,100,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(20,118,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(20,119,1,4,'SharedRuntime::on_slowpath_allocation_exit(JavaThread*)')
f(20,120,84,2,'kyo/lists$Lists$$Lambda$40.0x0000000800d0fb38.apply',84,0,0)
f(21,120,84,2,'kyo/lists$Lists.$anonfun$5',84,0,0)
f(22,123,26,2,'kyo/lists$Lists.loop$2',26,0,0)
f(23,139,10,2,'scala/collection/immutable/List.equals',10,0,0)
f(24,139,10,2,'scala/collection/immutable/List.listEq$1',10,0,0)
f(25,145,4,2,'scala/collection/immutable/List.isEmpty',4,0,0)
f(22,149,55,2,'scala/collection/mutable/ListBuffer.addOne',55,0,0)
f(23,153,10,2,'scala/collection/immutable/$colon$colon.<init>',10,0,0)
f(24,155,1,2,'scala/collection/immutable/List.<init>',1,0,0)
f(25,155,1,2,'scala/collection/immutable/AbstractSeq.<init>',1,0,0)
f(26,155,1,2,'scala/collection/AbstractSeq.<init>',1,0,0)
f(27,155,1,2,'scala/collection/AbstractIterable.<init>',1,0,0)
f(24,156,7,2,'scala/runtime/Statics.releaseFence',7,0,0)
f(25,156,7,2,'java/lang/invoke/LambdaForm$MH.0x0000000800ca0400.invoke_MT',7,0,0)
f(23,163,5,2,'scala/collection/immutable/$colon$colon.next_$eq',5,0,0)
f(23,168,5,2,'scala/collection/mutable/ListBuffer.first_$eq',5,0,0)
f(23,173,31,2,'scala/collection/mutable/ListBuffer.last0_$eq',31,0,0)
f(20,204,13,2,'kyo/lists$Lists$$anon$11.<init>',13,0,0)
f(21,204,13,2,'kyo/core$internal$KyoCont.<init>',13,0,0)
f(22,206,5,2,'kyo/core$internal$Kyo.<init>',5,0,0)
f(22,211,5,2,'kyo/ios$KyoIO.effect',5,0,0)
f(22,216,1,2,'kyo/ios$KyoIO.value',1,0,0)
f(16,217,81,1,'kyo/bench/CollectAllBench.kyoBench')
f(17,217,47,2,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1',47,0,0)
f(18,217,47,2,'kyo/bench/CollectAllBench$$Lambda$41.0x0000000800d24940.apply',47,0,0)
f(19,217,47,2,'kyo/bench/CollectAllBench.$anonfun$2',47,0,0)
f(20,217,47,2,'scala/runtime/BoxesRunTime.boxToLong',47,0,0)
f(17,264,3,1,'scala/collection/AbstractIterable.toList')
f(18,264,3,1,'scala/collection/IterableOnceOps.toList$')
f(19,264,3,1,'scala/collection/IterableOnceOps.toList')
f(20,264,3,1,'scala/collection/immutable/List.prependedAll')
f(21,264,3,1,'scala/collection/immutable/NewVectorIterator.next')
f(22,264,3,1,'scala/collection/immutable/NewVectorIterator.advance')
f(23,264,2,1,'scala/collection/immutable/NewVectorIterator.advanceA')
f(23,266,1,1,'scala/collection/immutable/NewVectorIterator.advanceSlice')
f(17,267,22,2,'scala/collection/immutable/Range.map',18,0,0)
f(18,280,2,2,'scala/collection/SeqFactory$Delegate.newBuilder',2,0,0)
f(19,281,1,2,'scala/collection/immutable/Vector$.newBuilder',1,0,0)
f(20,281,1,2,'scala/collection/immutable/Vector$.newBuilder',1,0,0)
f(21,281,1,2,'scala/collection/immutable/VectorBuilder.<init>',1,0,0)
f(18,282,7,2,'scala/collection/immutable/VectorBuilder.addOne',3,0,0)
f(19,283,6,2,'scala/collection/immutable/VectorBuilder.addOne',2,0,0)
f(20,285,4,1,'scala/collection/immutable/VectorBuilder.advance')
f(21,285,4,1,'scala/collection/immutable/VectorBuilder.advance1')
f(22,288,1,4,'OptoRuntime::new_array_C(Klass*, int, JavaThread*)')
f(23,288,1,4,'InstanceKlass::allocate_objArray(int, int, JavaThread*)')
f(24,288,1,4,'MemAllocator::allocate() const')
f(25,288,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(26,288,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(27,288,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(28,288,1,4,'G1Policy::preventive_collection_required(unsigned int)')
f(17,289,9,2,'scala/runtime/RichInt$.until$extension',9,0,0)
f(18,289,9,2,'scala/collection/immutable/Range$Exclusive.<init>',9,0,0)
f(19,289,9,2,'scala/collection/immutable/Range.<init>',9,0,0)
f(20,289,9,2,'scala/collection/immutable/Range.longLength',9,0,0)
f(21,296,2,2,'scala/collection/immutable/Range.hasStub',2,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 560px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(35);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,19392,3,'all')
f(1,0,19388,1,'java/lang/Thread.run')
f(2,0,19388,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,19388,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,3136,1,'java/util/concurrent/FutureTask.run')
f(5,0,3136,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,3136,1,'java/util/concurrent/FutureTask.run')
f(7,0,3136,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,3136,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,3136,1,'java/lang/reflect/Method.invoke')
f(10,0,3136,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,3136,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,3136,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,3136,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,3135,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,3135,1,'kyo/bench/Bench.forkKyo')
f(16,0,270,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,270,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,270,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,133,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,0,133,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c81148')
f(19,133,137,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c81148')
f(16,270,357,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,270,357,2,'kyo.bench.Bench$$anon$1')
f(16,627,1941,1,'kyo/bench/Bench.runLoop$2')
f(17,627,808,1,'kyo/bench/Bench$$anon$1.apply')
f(18,627,29,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,627,29,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c88000.apply')
f(20,627,29,1,'kyo/bench/Bench.$anonfun$2')
f(21,627,29,1,'kyo/concurrent/fibers$Fiber.block')
f(22,627,29,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,656,779,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,656,779,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,656,779,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(21,656,779,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,656,216,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,872,395,2,'kyo.concurrent.scheduler.IOTask')
f(22,1267,166,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,1267,166,2,'kyo.concurrent.fibers$Fiber')
f(22,1433,2,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,1433,2,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,1433,2,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,1433,2,1,'kyo/concurrent/scheduler/Queue.offer')
f(26,1433,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(27,1433,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(28,1433,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(29,1433,2,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(30,1433,2,2,'kyo.concurrent.scheduler.Queue$$Lambda$54+0x0000000800d478c8')
f(17,1435,1133,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,1435,1133,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,1435,1133,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,1435,1133,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,1435,519,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,1435,519,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,1435,274,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,1709,245,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,1709,245,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,1954,303,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,2257,311,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,2257,311,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,2257,311,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,2568,567,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,2568,177,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,2568,177,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,2568,177,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,2568,177,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c828a0')
f(17,2745,264,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,2745,264,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,3009,126,1,'kyo/locals$Locals$.save')
f(18,3009,126,2,'kyo.locals$Locals$$anon$3')
f(14,3135,1,1,'org/openjdk/jmh/results/ThroughputResult.<init>')
f(15,3135,1,1,'java/lang/StringBuilder.<init>')
f(16,3135,1,1,'java/lang/AbstractStringBuilder.<init>')
f(17,3135,1,2,'byte[]')
f(4,3136,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ec30.run')
f(5,3136,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,3136,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,3136,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,3136,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,3136,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,3136,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,3136,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,3146,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,3146,1,2,'java.lang.String')
f(4,3147,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ee58.run')
f(5,3147,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,3147,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,3147,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,3147,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,3147,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,3147,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,3147,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$67+0x0000000800d4ea60')
f(4,3158,16230,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23480.run')
f(5,3158,16230,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,3158,16230,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,3158,16154,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,3158,16154,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,3158,16067,1,'kyo/bench/CountdownLatchBench$$anon$1.apply')
f(10,3158,16065,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(11,3158,16065,1,'kyo/bench/CountdownLatchBench$$Lambda$62.0x0000000800d4d100.apply')
f(12,3158,16065,1,'kyo/bench/CountdownLatchBench.$anonfun$1')
f(13,3158,16065,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(14,3158,6699,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod')
f(15,3158,6699,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial')
f(16,3158,6699,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,3158,6699,2,'kyo.bench.CountdownLatchBench$$Lambda$62+0x0000000800d4d100')
f(14,9857,9366,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(15,9857,9366,2,'kyo.bench.CountdownLatchBench$$anon$1')
f(10,19223,2,1,'kyo/concurrent/latches$$anon$4.apply')
f(11,19223,2,1,'kyo/concurrent/latches$$anon$4.apply')
f(12,19223,2,1,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete')
f(13,19223,2,1,'kyo/concurrent/fibers$Fiber$Promise.loop$23')
f(14,19223,2,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(15,19223,2,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(16,19223,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(17,19223,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(18,19223,2,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(19,19223,2,1,'scala/runtime/function/JProcedure1.apply')
f(20,19223,2,1,'scala/runtime/function/JProcedure1.apply')
f(21,19223,2,1,'kyo/concurrent/scheduler/IOTask$$Lambda$64.0x0000000800d4dad8.applyVoid')
f(22,19223,2,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(23,19223,1,2,'kyo.concurrent.scheduler.IOTask')
f(23,19224,1,1,'kyo/concurrent/scheduler/IOPromise.become')
f(24,19224,1,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(25,19224,1,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(26,19224,1,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(27,19224,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(28,19224,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(9,19225,1,1,'kyo/bench/CountdownLatchBench$$anon$3.apply')
f(10,19225,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,19225,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,19225,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(13,19225,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,19225,1,2,'kyo.concurrent.scheduler.IOTask')
f(9,19226,9,1,'kyo/bench/CountdownLatchBench$$anon$4.apply')
f(10,19226,5,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$4')
f(11,19226,5,1,'kyo/bench/CountdownLatchBench$$Lambda$57.0x0000000800d4a930.apply')
f(12,19226,5,1,'kyo/bench/CountdownLatchBench.$anonfun$2')
f(13,19226,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(14,19226,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(15,19226,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,19226,1,2,'kyo.bench.CountdownLatchBench$$Lambda$58+0x0000000800d4c3e8')
f(16,19227,1,2,'kyo.bench.CountdownLatchBench$$Lambda$59+0x0000000800d4c6a8')
f(13,19228,1,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$3')
f(14,19228,1,2,'kyo.bench.CountdownLatchBench$$anon$3')
f(13,19229,2,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(14,19229,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(15,19229,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(16,19229,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,19229,1,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c828a0')
f(14,19230,1,1,'kyo/locals$Locals$.save')
f(15,19230,1,2,'kyo.locals$Locals$$anon$3')
f(10,19231,4,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(11,19231,4,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(12,19231,1,2,'kyo.concurrent.latches$$anon$3')
f(12,19232,3,1,'kyo/concurrent/latches$$anon$3.<init>')
f(13,19232,1,2,'kyo.concurrent.latches$$anon$4')
f(13,19233,2,1,'kyo/concurrent/fibers$Fibers.unsafePromise')
f(14,19233,1,2,'kyo.concurrent.fibers$Fiber$Promise')
f(14,19234,1,2,'kyo.concurrent.scheduler.IOPromise')
f(9,19235,73,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,19235,73,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,19235,72,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c81148.apply')
f(12,19235,72,1,'kyo/bench/Bench.$anonfun$1')
f(13,19235,72,1,'kyo/bench/CountdownLatchBench.kyoBenchFiber')
f(14,19235,2,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$4')
f(15,19235,2,2,'kyo.bench.CountdownLatchBench$$anon$4')
f(14,19237,70,1,'kyo/concurrent/latches$Latches$.init')
f(15,19237,70,1,'kyo/concurrent/latches$Latches$.kyo$concurrent$latches$Latches$$$_$transformLoop$1')
f(16,19237,70,1,'kyo/concurrent/latches$Latches$$$Lambda$56.0x0000000800d49870.apply')
f(17,19237,70,1,'kyo/concurrent/latches$Latches$.$anonfun$adapted$1')
f(18,19237,70,1,'kyo/concurrent/latches$Latches$.$anonfun$1')
f(19,19237,70,2,'kyo.concurrent.latches$Latches$$anon$2')
f(11,19307,1,1,'kyo/bench/CountdownLatchBench$$Lambda$58.0x0000000800d4c3e8.apply')
f(12,19307,1,1,'kyo/bench/CountdownLatchBench.$anonfun$3')
f(13,19307,1,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(14,19307,1,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(15,19307,1,2,'kyo.bench.CountdownLatchBench$$anon$1')
f(9,19308,3,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,19308,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,19308,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,19308,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,19308,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$63+0x0000000800d4d6d0')
f(10,19309,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,19309,2,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(9,19311,1,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,19311,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,19311,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,19312,74,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,19312,74,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,19312,74,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,19312,74,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,19312,74,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(12,19312,74,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d48230')
f(7,19386,2,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,19386,2,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,19386,2,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,19386,2,1,'scala/runtime/ObjectRef.create')
f(11,19386,2,2,'scala.runtime.ObjectRef')
f(1,19388,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,19388,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,19388,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,19388,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,19388,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,19388,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,19388,1,1,'jdk/proxy1/$Proxy0.iterationResult')
f(8,19388,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient$$Lambda$8.0x0000000800c01c70.invoke')
f(9,19388,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.lambda$new$0')
f(10,19388,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushFrame')
f(11,19388,1,1,'java/io/ObjectOutputStream.writeObject')
f(12,19388,1,1,'java/io/ObjectOutputStream.writeObject0')
f(13,19388,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(14,19388,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(15,19388,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(16,19388,1,1,'java/io/ObjectOutputStream.writeObject0')
f(17,19388,1,1,'java/io/ObjectOutputStream.writeArray')
f(18,19388,1,1,'java/io/ObjectOutputStream.writeObject0')
f(19,19388,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(20,19388,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(21,19388,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(22,19388,1,1,'java/io/ObjectOutputStream.writeObject0')
f(23,19388,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(24,19388,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(25,19388,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(26,19388,1,1,'java/io/ObjectOutputStream.writeObject0')
f(27,19388,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(28,19388,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(29,19388,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(30,19388,1,1,'java/io/ObjectOutputStream.writeObject0')
f(31,19388,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(32,19388,1,1,'java/io/ObjectOutputStream$HandleTable.assign')
f(33,19388,1,1,'java/io/ObjectOutputStream$HandleTable.growEntries')
f(34,19388,1,2,'int[]')
f(7,19389,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,19389,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,19389,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,19389,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,19389,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,19389,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,19389,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 1168px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(73);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,275,3,'all')
f(1,0,3,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,3,3,'thread_native_entry(Thread*)')
f(3,0,3,4,'Thread::call_run()')
f(4,0,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(5,0,1,5,'entry_SYSCALL_64_after_hwframe')
f(6,0,1,5,'do_syscall_64')
f(7,0,1,5,'__x64_sys_futex')
f(8,0,1,5,'do_futex')
f(9,0,1,5,'hash_futex')
f(4,1,2,4,'JavaThread::thread_main_inner()')
f(5,1,2,4,'CompileBroker::compiler_thread_loop()')
f(6,1,2,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,1,2,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,1,2,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,1,2,4,'ParseGenerator::generate(JVMState*)')
f(10,1,2,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(11,1,2,4,'Parse::do_all_blocks()')
f(12,1,2,4,'Parse::do_one_block()')
f(13,1,2,4,'Parse::do_call()')
f(14,1,2,4,'PredictedCallGenerator::generate(JVMState*)')
f(15,1,1,4,'ParseGenerator::generate(JVMState*)')
f(16,1,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(17,1,1,4,'Parse::do_all_blocks()')
f(18,1,1,4,'Parse::do_one_block()')
f(19,1,1,4,'Parse::do_call()')
f(20,1,1,4,'LibraryIntrinsic::generate(JVMState*)')
f(21,1,1,4,'LibraryCallKit::inline_unsafe_access(bool, BasicType, LibraryCallKit::AccessKind, bool) [clone .part.0]')
f(22,1,1,4,'GraphKit::access_store_at(Node*, Node*, TypePtr const*, Node*, Type const*, BasicType, unsigned long)')
f(23,1,1,4,'BarrierSetC2::store_at(C2Access&, C2AccessValue&) const')
f(24,1,1,4,'ModRefBarrierSetC2::store_at_resolved(C2Access&, C2AccessValue&) const')
f(25,1,1,4,'G1BarrierSetC2::post_barrier(GraphKit*, Node*, Node*, Node*, Node*, unsigned int, Node*, BasicType, bool) const')
f(26,1,1,4,'G1BarrierSetC2::g1_mark_card(GraphKit*, IdealKit&, Node*, Node*, unsigned int, Node*, Node*, Node*, TypeFunc const*) const')
f(27,1,1,4,'Node::Node(Node*, Node*, Node*)')
f(15,2,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(16,2,1,4,'ParseGenerator::generate(JVMState*)')
f(17,2,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(18,2,1,4,'Parse::do_all_blocks()')
f(19,2,1,4,'Parse::do_one_block()')
f(20,2,1,4,'Parse::do_call()')
f(21,2,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(22,2,1,4,'ParseGenerator::generate(JVMState*)')
f(23,2,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(24,2,1,4,'Parse::do_all_blocks()')
f(25,2,1,4,'Parse::do_one_block()')
f(26,2,1,4,'Parse::do_call()')
f(27,2,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(28,2,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(29,2,1,4,'ParseGenerator::generate(JVMState*)')
f(30,2,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(31,2,1,4,'Parse::do_all_blocks()')
f(32,2,1,4,'Parse::do_one_block()')
f(33,2,1,4,'Parse::do_call()')
f(34,2,1,4,'ParseGenerator::generate(JVMState*)')
f(35,2,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(36,2,1,4,'Parse::do_all_blocks()')
f(37,2,1,4,'Parse::do_one_block()')
f(38,2,1,4,'Parse::do_call()')
f(39,2,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(40,2,1,4,'ParseGenerator::generate(JVMState*)')
f(41,2,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(42,2,1,4,'Parse::do_all_blocks()')
f(43,2,1,4,'Parse::do_one_block()')
f(44,2,1,4,'Parse::do_call()')
f(45,2,1,4,'ParseGenerator::generate(JVMState*)')
f(46,2,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(47,2,1,4,'Parse::do_all_blocks()')
f(48,2,1,4,'Parse::do_one_block()')
f(49,2,1,4,'Parse::do_call()')
f(50,2,1,4,'ParseGenerator::generate(JVMState*)')
f(51,2,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(52,2,1,4,'Parse::do_all_blocks()')
f(53,2,1,4,'Parse::do_one_block()')
f(54,2,1,4,'Parse::do_call()')
f(55,2,1,4,'ParseGenerator::generate(JVMState*)')
f(56,2,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(57,2,1,4,'Parse::do_all_blocks()')
f(58,2,1,4,'Parse::do_one_block()')
f(59,2,1,4,'Parse::do_call()')
f(60,2,1,4,'ParseGenerator::generate(JVMState*)')
f(61,2,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(62,2,1,4,'Parse::do_all_blocks()')
f(63,2,1,4,'Parse::do_one_block()')
f(64,2,1,4,'Parse::return_current(Node*)')
f(65,2,1,4,'Parse::call_register_finalizer()')
f(66,2,1,4,'GraphKit::make_load(Node*, Node*, Type const*, BasicType, int, MemNode::MemOrd, LoadNode::ControlDependency, bool, bool, bool, bool, unsigned char)')
f(67,2,1,4,'PhaseGVN::transform_no_reclaim(Node*)')
f(68,2,1,4,'LoadNode::Ideal(PhaseGVN*, bool)')
f(69,2,1,4,'MemNode::Ideal_common(PhaseGVN*, bool)')
f(70,2,1,4,'Type::hashcons()')
f(71,2,1,4,'Dict::Insert(void*, void*, bool)')
f(72,2,1,4,'Dict::doubhash()')
f(1,3,272,1,'java/lang/Thread.run')
f(2,3,272,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,3,272,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,3,15,1,'java/util/concurrent/FutureTask.run')
f(5,3,15,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,3,15,1,'java/util/concurrent/FutureTask.run')
f(7,3,15,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,3,15,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,3,15,1,'java/lang/reflect/Method.invoke')
f(10,3,15,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,3,15,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,3,15,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,3,15,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,3,15,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,3,15,1,'kyo/bench/Bench.forkKyo')
f(16,3,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,3,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,3,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,3,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(16,4,14,1,'kyo/bench/Bench.runLoop$2')
f(17,4,5,1,'kyo/bench/Bench$$anon$1.apply')
f(18,4,5,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,4,5,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,4,5,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(21,4,5,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,4,5,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,4,5,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,4,5,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,4,5,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,4,5,1,'jdk/internal/misc/Unsafe.unpark')
f(27,4,2,3,'Unsafe_Unpark')
f(28,4,1,4,'SafeThreadsListPtr::release_stable_list()')
f(28,5,1,3,'pthread_mutex_unlock')
f(27,6,3,3,'pthread_cond_signal')
f(28,6,3,5,'entry_SYSCALL_64_after_hwframe')
f(29,6,3,5,'do_syscall_64')
f(30,6,3,5,'__x64_sys_futex')
f(31,6,3,5,'do_futex')
f(32,7,2,5,'futex_wake')
f(33,7,2,5,'wake_up_q')
f(34,7,2,5,'_raw_spin_unlock_irqrestore')
f(17,9,9,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,9,9,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,9,9,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,9,9,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,9,9,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,9,9,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,9,9,1,'java/util/concurrent/locks/LockSupport.park')
f(24,9,9,1,'jdk/internal/misc/Unsafe.park')
f(25,10,1,3,'Unsafe_Park')
f(26,10,1,4,'Parker::park(bool, long)')
f(25,11,7,3,'[unknown]')
f(26,11,7,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,12,6,5,'entry_SYSCALL_64_after_hwframe')
f(28,12,6,5,'do_syscall_64')
f(29,12,6,5,'__x64_sys_futex')
f(30,12,6,5,'do_futex')
f(31,12,6,5,'futex_wait')
f(32,12,5,5,'futex_wait_queue_me')
f(33,12,5,5,'schedule')
f(34,12,5,5,'__schedule')
f(35,12,5,5,'finish_task_switch.isra.0')
f(32,17,1,5,'schedule')
f(4,18,257,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23480.run')
f(5,18,257,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,18,257,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,19,251,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,58,212,2,'kyo/concurrent/scheduler/IOTask.eval',201,0,0)
f(9,143,110,2,'kyo/bench/CountdownLatchBench$$anon$1.apply',106,0,0)
f(10,144,49,2,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1',49,0,0)
f(11,145,48,2,'kyo/bench/CountdownLatchBench$$Lambda$62.0x0000000800d4d100.apply',48,0,0)
f(12,150,43,2,'kyo/bench/CountdownLatchBench.$anonfun$1',43,0,0)
f(13,150,43,2,'kyo/bench/CountdownLatchBench.iterate$2',43,0,0)
f(14,162,12,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod',12,0,0)
f(15,162,12,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial',12,0,0)
f(16,162,12,2,'kyo/bench/CountdownLatchBench$$Lambda$62.0x0000000800d4d100.<init>',12,0,0)
f(14,174,19,2,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1',19,0,0)
f(15,174,19,2,'kyo/bench/CountdownLatchBench$$anon$1.<init>',19,0,0)
f(16,179,14,2,'kyo/core$internal$KyoCont.<init>',14,0,0)
f(17,179,13,2,'kyo/core$internal$Kyo.<init>',13,0,0)
f(18,189,3,2,'java/lang/Object.<init>',3,0,0)
f(17,192,1,2,'kyo/ios$KyoIO.value',1,0,0)
f(10,193,36,2,'kyo/concurrent/latches$$anon$4.apply',32,0,0)
f(11,203,26,2,'kyo/concurrent/latches$$anon$4.apply',22,0,0)
f(12,218,3,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(13,218,3,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(14,218,1,4,'MemAllocator::Allocation::notify_allocation_jfr_sampler()')
f(14,219,2,4,'MemAllocator::allocate() const')
f(15,219,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(15,220,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(16,220,1,4,'G1NUMA::index_of_current_thread() const')
f(12,221,4,2,'java/util/concurrent/atomic/AtomicInteger.decrementAndGet',4,0,0)
f(12,225,1,1,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete')
f(13,225,1,1,'kyo/concurrent/fibers$Fiber$Promise.loop$23')
f(14,225,1,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(15,225,1,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(16,225,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(17,225,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(18,225,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(19,225,1,1,'scala/runtime/function/JProcedure1.apply')
f(20,225,1,2,'scala/runtime/function/JProcedure1.apply',1,0,0)
f(21,225,1,2,'kyo/concurrent/scheduler/IOTask$$Lambda$64.0x0000000800d4dad8.applyVoid',1,0,0)
f(22,225,1,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',1,0,0)
f(23,225,1,2,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1',1,0,0)
f(24,225,1,2,'kyo/concurrent/scheduler/IOTask$$Lambda$65.0x0000000800d4dee0.apply',1,0,0)
f(25,225,1,2,'kyo/concurrent/scheduler/IOTask.$anonfun$1',1,0,0)
f(26,225,1,2,'kyo/bench/CountdownLatchBench$$anon$2.apply',1,0,0)
f(27,225,1,2,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$2',1,0,0)
f(28,225,1,2,'kyo/bench/CountdownLatchBench$$Lambda$60.0x0000000800d4ca78.apply',1,0,0)
f(29,225,1,2,'kyo/bench/CountdownLatchBench.$anonfun$5',1,0,0)
f(30,225,1,2,'scala/runtime/BoxesRunTime.boxToInteger',1,0,0)
f(12,226,3,2,'kyo/concurrent/latches$$anon$3.count',3,0,0)
f(10,229,24,2,'kyo/concurrent/scheduler/IOTask.apply',24,0,0)
f(9,253,10,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',10,0,0)
f(9,263,7,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,263,7,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,263,7,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,263,7,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,263,7,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,263,7,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,263,7,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,263,7,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,263,7,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,263,7,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,263,7,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,263,7,1,'jdk/internal/misc/Unsafe.unpark')
f(21,263,7,3,'pthread_cond_signal')
f(22,266,4,5,'entry_SYSCALL_64_after_hwframe')
f(23,266,4,5,'do_syscall_64')
f(24,266,4,5,'__x64_sys_futex')
f(25,266,4,5,'do_futex')
f(26,266,4,5,'futex_wake')
f(27,266,4,5,'wake_up_q')
f(28,266,4,5,'_raw_spin_unlock_irqrestore')
f(7,270,1,2,'kyo/concurrent/scheduler/Queue.poll',1,0,0)
f(8,270,1,2,'kyo/concurrent/scheduler/Queue.modify',1,0,0)
f(9,270,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(10,270,1,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',1,0,0)
f(7,271,4,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,271,4,1,'kyo/concurrent/scheduler/Worker.park')
f(9,271,4,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,271,4,1,'jdk/internal/misc/Unsafe.park')
f(11,271,4,3,'[unknown]')
f(12,271,4,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,271,4,5,'entry_SYSCALL_64_after_hwframe')
f(14,271,4,5,'do_syscall_64')
f(15,271,3,5,'__x64_sys_futex')
f(16,271,3,5,'do_futex')
f(17,271,3,5,'futex_wait')
f(18,271,2,5,'futex_wait_queue_me')
f(19,271,2,5,'schedule')
f(20,271,2,5,'__schedule')
f(21,271,2,5,'finish_task_switch.isra.0')
f(18,273,1,5,'hash_futex')
f(15,274,1,5,'syscall_enter_from_user_mode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 448px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(28);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,19544,3,'all')
f(1,0,19541,1,'java/lang/Thread.run')
f(2,0,19541,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,19541,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,3256,1,'java/util/concurrent/FutureTask.run')
f(5,0,3256,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,3256,1,'java/util/concurrent/FutureTask.run')
f(7,0,3256,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,3256,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,3256,1,'java/lang/reflect/Method.invoke')
f(10,0,3256,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,3256,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,3256,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,3256,1,'kyo/bench/jmh_generated/CountdownLatchBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,3256,1,'kyo/bench/jmh_generated/CountdownLatchBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,3256,1,'kyo/bench/Bench.syncKyo')
f(16,0,1626,1,'kyo/bench/Bench.runLoop$1')
f(17,0,755,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,755,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,755,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,755,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,442,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,442,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,191,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,191,251,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,191,251,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,442,153,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,595,160,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,595,160,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,595,160,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,755,871,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,755,671,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,755,671,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,755,671,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,755,541,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,755,541,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,755,541,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply')
f(24,755,541,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,755,50,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(25,805,436,2,'kyo.concurrent.scheduler.IOTask')
f(25,1241,55,1,'kyo/concurrent/fibers$Fiber$.promise')
f(26,1241,55,2,'kyo.concurrent.fibers$Fiber')
f(21,1296,130,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,1296,130,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c88000.apply')
f(23,1296,130,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,1296,130,1,'kyo/concurrent/fibers$Fiber.join')
f(25,1296,130,1,'kyo/concurrent/fibers$Fibers.get')
f(26,1296,130,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,1296,130,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,1426,200,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,1426,200,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c88800.apply')
f(20,1426,200,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,1426,200,1,'kyo/concurrent/fibers$Fiber.block')
f(22,1426,200,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,1626,1630,1,'kyo/bench/CountdownLatchBench.kyoBench')
f(17,1626,163,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1626,163,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1626,163,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1626,88,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(21,1626,88,2,'kyo.bench.CountdownLatchBench$$Lambda$37+0x0000000800c81350')
f(20,1714,75,2,'kyo.bench.CountdownLatchBench$$Lambda$37+0x0000000800c81350')
f(17,1789,730,1,'kyo/concurrent/fibers$Fibers.block')
f(18,1789,61,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,1789,61,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,1789,61,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,1789,61,2,'kyo.concurrent.fibers$Fibers$$Lambda$40+0x0000000800c88800')
f(18,1850,95,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,1850,95,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,1945,408,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,1945,408,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,2353,166,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,2353,166,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,2519,737,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,2519,119,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,2519,119,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,2519,119,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,2519,119,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c88000')
f(18,2638,474,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,2638,210,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,2638,210,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,2638,210,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,2638,210,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c82aa8')
f(19,2848,188,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,2848,188,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(19,3036,76,1,'kyo/locals$Locals$.save')
f(20,3036,76,2,'kyo.locals$Locals$$anon$3')
f(18,3112,144,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,3112,144,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(4,3256,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f088.run')
f(5,3256,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,3256,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,3256,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,3256,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,3256,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,3256,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,3256,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,3266,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,3266,1,2,'java.lang.String')
f(4,3267,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1f2b0.run')
f(5,3267,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,3267,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,3267,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,3267,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,3267,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,3267,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$69+0x0000000800d4ed20')
f(4,3278,16263,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23688.run')
f(5,3278,16263,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,3278,16263,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,3278,16262,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,3278,16262,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,3278,16084,1,'kyo/bench/CountdownLatchBench$$anon$1.apply')
f(10,3278,16083,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(11,3278,16083,1,'kyo/bench/CountdownLatchBench$$Lambda$63.0x0000000800d4d100.apply')
f(12,3278,16083,1,'kyo/bench/CountdownLatchBench.$anonfun$1')
f(13,3278,16083,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(14,3278,6742,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod')
f(15,3278,6742,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial')
f(16,3278,6742,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,3278,6742,2,'kyo.bench.CountdownLatchBench$$Lambda$63+0x0000000800d4d100')
f(14,10020,9341,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(15,10020,9341,2,'kyo.bench.CountdownLatchBench$$anon$1')
f(10,19361,1,1,'kyo/concurrent/latches$$anon$4.apply')
f(11,19361,1,1,'kyo/concurrent/latches$$anon$4.apply')
f(12,19361,1,1,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete')
f(13,19361,1,1,'kyo/concurrent/fibers$Fiber$Promise.loop$23')
f(14,19361,1,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(15,19361,1,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(16,19361,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(17,19361,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(18,19361,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(19,19361,1,1,'scala/runtime/function/JProcedure1.apply')
f(20,19361,1,1,'scala/runtime/function/JProcedure1.apply')
f(21,19361,1,1,'kyo/concurrent/scheduler/IOTask$$Lambda$65.0x0000000800d4dad8.applyVoid')
f(22,19361,1,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(23,19361,1,2,'kyo.concurrent.scheduler.IOTask')
f(9,19362,7,1,'kyo/bench/CountdownLatchBench$$anon$3.apply')
f(10,19362,3,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$3')
f(11,19362,3,1,'kyo/bench/CountdownLatchBench$$Lambda$60.0x0000000800d4c6a8.apply')
f(12,19362,3,1,'kyo/bench/CountdownLatchBench.$anonfun$4')
f(13,19362,3,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$2')
f(14,19362,3,2,'kyo.bench.CountdownLatchBench$$anon$2')
f(10,19365,4,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,19365,4,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,19365,4,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply')
f(13,19365,4,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,19365,1,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(14,19366,3,2,'kyo.concurrent.scheduler.IOTask')
f(9,19369,15,1,'kyo/bench/CountdownLatchBench$$anon$4.apply')
f(10,19369,8,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$4')
f(11,19369,8,1,'kyo/bench/CountdownLatchBench$$Lambda$58.0x0000000800d4b410.apply')
f(12,19369,8,1,'kyo/bench/CountdownLatchBench.$anonfun$2')
f(13,19369,3,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(14,19369,3,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(15,19369,3,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,19369,1,2,'kyo.bench.CountdownLatchBench$$Lambda$59+0x0000000800d4c3e8')
f(16,19370,2,2,'kyo.bench.CountdownLatchBench$$Lambda$60+0x0000000800d4c6a8')
f(13,19372,5,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(14,19372,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(15,19372,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(16,19372,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,19372,1,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c82aa8')
f(14,19373,3,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(15,19373,3,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(14,19376,1,1,'kyo/locals$Locals$.save')
f(15,19376,1,2,'kyo.locals$Locals$$anon$3')
f(10,19377,7,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(11,19377,7,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(12,19377,1,2,'kyo.concurrent.latches$$anon$3')
f(12,19378,6,1,'kyo/concurrent/latches$$anon$3.<init>')
f(13,19378,1,2,'java.util.concurrent.atomic.AtomicInteger')
f(13,19379,2,2,'kyo.concurrent.latches$$anon$5')
f(13,19381,3,1,'kyo/concurrent/fibers$Fibers.unsafePromise')
f(14,19381,3,2,'kyo.concurrent.scheduler.IOPromise')
f(9,19384,151,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,19384,151,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,19384,149,1,'kyo/bench/CountdownLatchBench$$Lambda$37.0x0000000800c81350.apply')
f(12,19384,149,1,'kyo/bench/CountdownLatchBench.kyoBench$$anonfun$1')
f(13,19384,149,1,'kyo/bench/CountdownLatchBench.kyoBenchFiber')
f(14,19384,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(15,19384,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(16,19384,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,19384,1,2,'kyo.bench.CountdownLatchBench$$Lambda$58+0x0000000800d4b410')
f(14,19385,3,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$4')
f(15,19385,3,2,'kyo.bench.CountdownLatchBench$$anon$4')
f(14,19388,145,1,'kyo/concurrent/latches$Latches$.init')
f(15,19388,145,1,'kyo/concurrent/latches$Latches$.kyo$concurrent$latches$Latches$$$_$transformLoop$1')
f(16,19388,145,1,'kyo/concurrent/latches$Latches$$$Lambda$57.0x0000000800d4a7b0.apply')
f(17,19388,145,1,'kyo/concurrent/latches$Latches$.$anonfun$adapted$1')
f(18,19388,145,1,'kyo/concurrent/latches$Latches$.$anonfun$1')
f(19,19388,145,2,'kyo.concurrent.latches$Latches$$anon$2')
f(11,19533,2,1,'kyo/bench/CountdownLatchBench$$Lambda$59.0x0000000800d4c3e8.apply')
f(12,19533,2,1,'kyo/bench/CountdownLatchBench.$anonfun$3')
f(13,19533,2,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(14,19533,1,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod')
f(15,19533,1,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial')
f(16,19533,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,19533,1,2,'kyo.bench.CountdownLatchBench$$Lambda$63+0x0000000800d4d100')
f(14,19534,1,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(15,19534,1,2,'kyo.bench.CountdownLatchBench$$anon$1')
f(9,19535,2,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,19535,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,19535,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,19535,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,19535,2,2,'kyo.concurrent.scheduler.IOTask$$Lambda$64+0x0000000800d4d6d0')
f(9,19537,3,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,19537,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,19537,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,19537,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,19537,2,2,'kyo.concurrent.scheduler.IOTask$$Lambda$65+0x0000000800d4dad8')
f(10,19539,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,19539,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,19540,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,19540,1,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,19540,1,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,19540,1,1,'scala/runtime/ObjectRef.create')
f(11,19540,1,2,'scala.runtime.ObjectRef')
f(1,19541,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,19541,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,19541,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,19541,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,19541,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,19541,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,19541,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,19541,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,19541,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,19541,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,19541,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,19541,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,19541,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 608px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(38);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,278,3,'all')
f(1,0,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,2,3,'thread_native_entry(Thread*)')
f(3,0,2,4,'Thread::call_run()')
f(4,0,2,4,'JavaThread::thread_main_inner()')
f(5,0,2,4,'CompileBroker::compiler_thread_loop()')
f(6,0,2,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,2,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,2,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,1,4,'Compile::Code_Gen()')
f(10,0,1,4,'PhaseCFG::do_global_code_motion()')
f(11,0,1,4,'PhaseCFG::global_code_motion()')
f(12,0,1,4,'PhaseLive::compute(unsigned int)')
f(9,1,1,4,'Compile::Optimize()')
f(10,1,1,4,'PhaseMacroExpand::expand_macro_nodes()')
f(11,1,1,4,'PhaseIterGVN::optimize()')
f(12,1,1,4,'PhaseIterGVN::transform_old(Node*)')
f(13,1,1,4,'PhiNode::Identity(PhaseGVN*)')
f(14,1,1,4,'PhiNode::unique_input(PhaseTransform*, bool)')
f(1,2,2,3,'[unknown]')
f(2,2,1,3,'/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2')
f(2,3,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(1,4,274,1,'java/lang/Thread.run')
f(2,4,274,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,4,274,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,4,19,1,'java/util/concurrent/FutureTask.run')
f(5,4,19,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,4,19,1,'java/util/concurrent/FutureTask.run')
f(7,4,19,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,4,19,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,4,19,1,'java/lang/reflect/Method.invoke')
f(10,4,19,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,4,19,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,4,19,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,4,19,1,'kyo/bench/jmh_generated/CountdownLatchBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,4,19,1,'kyo/bench/jmh_generated/CountdownLatchBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub',0,1,0)
f(15,5,18,1,'kyo/bench/Bench.syncKyo')
f(16,5,17,1,'kyo/bench/Bench.runLoop$1')
f(17,5,6,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,5,6,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,5,6,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,5,6,1,'kyo/concurrent/scheduler/IOPromise.loop$4',0,1,0)
f(21,5,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,5,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,6,4,1,'java/util/concurrent/locks/LockSupport.park')
f(24,6,4,1,'jdk/internal/misc/Unsafe.park')
f(25,6,2,3,'Unsafe_Park')
f(26,6,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,6,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,6,1,5,'__x64_sys_futex')
f(26,7,1,3,'pthread_mutex_unlock')
f(25,8,2,3,'[unknown]')
f(26,8,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,9,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,9,1,5,'do_syscall_64')
f(29,9,1,5,'__x64_sys_futex')
f(30,9,1,5,'do_futex')
f(31,9,1,5,'futex_wait')
f(32,9,1,5,'futex_wait_queue_me')
f(21,10,1,2,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply',1,0,0)
f(17,11,11,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,11,11,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,11,11,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,11,11,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,11,11,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,11,11,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,11,10,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply')
f(24,11,10,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,11,10,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,11,10,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,11,10,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(28,11,10,1,'java/util/concurrent/locks/LockSupport.unpark')
f(29,11,10,1,'jdk/internal/misc/Unsafe.unpark')
f(30,11,10,3,'pthread_cond_signal')
f(31,12,9,5,'entry_SYSCALL_64_after_hwframe')
f(32,12,9,5,'do_syscall_64')
f(33,12,9,5,'__x64_sys_futex')
f(34,12,9,5,'do_futex')
f(35,12,9,5,'futex_wake')
f(36,14,7,5,'wake_up_q')
f(37,14,7,5,'_raw_spin_unlock_irqrestore')
f(23,21,1,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',1,0,0)
f(24,21,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(25,21,1,2,'kyo/ios$KyoIO.effect',1,0,0)
f(26,21,1,2,'kyo/ios$KyoIO.effect',1,0,0)
f(16,22,1,2,'kyo/bench/CountdownLatchBench.kyoBench',1,0,0)
f(17,22,1,2,'kyo/concurrent/fibers$Fibers.fork',1,0,0)
f(18,22,1,2,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3',1,0,0)
f(19,22,1,2,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c88000.apply',1,0,0)
f(20,22,1,2,'kyo/concurrent/fibers$Fibers.$anonfun$5',1,0,0)
f(21,22,1,2,'kyo/concurrent/fibers$Fiber.join',1,0,0)
f(22,22,1,2,'kyo/concurrent/fibers$Fibers.get',1,0,0)
f(23,22,1,2,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1',1,0,0)
f(4,23,255,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23688.run')
f(5,23,255,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,23,255,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,23,250,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,23,250,2,'kyo/concurrent/scheduler/IOTask.eval',232,0,0)
f(9,77,181,2,'kyo/bench/CountdownLatchBench$$anon$1.apply',177,0,0)
f(10,141,117,2,'kyo/concurrent/latches$$anon$4.apply',113,0,0)
f(11,153,105,2,'kyo/concurrent/latches$$anon$4.apply',101,0,0)
f(12,156,5,2,'java/util/concurrent/atomic/AtomicInteger.decrementAndGet',5,0,0)
f(12,161,97,2,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete',93,0,0)
f(13,172,86,2,'kyo/concurrent/fibers$Fiber$Promise.loop$23',82,0,0)
f(14,182,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(14,183,75,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',72,0,0)
f(15,183,75,2,'kyo/concurrent/scheduler/IOPromise.complete',72,0,0)
f(16,183,44,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',43,0,0)
f(17,184,1,4,'SharedRuntime::on_slowpath_allocation_exit(JavaThread*)')
f(17,185,42,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',42,0,0)
f(18,189,26,2,'java/lang/invoke/VarForm.getMemberName',26,0,0)
f(18,215,12,2,'java/lang/invoke/VarHandle.checkExactAccessMode',12,0,0)
f(16,227,31,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',29,0,0)
f(17,227,31,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',29,0,0)
f(18,234,13,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run',11,0,0)
f(19,245,2,1,'scala/runtime/function/JProcedure1.apply')
f(20,245,2,1,'scala/runtime/function/JProcedure1.apply')
f(21,245,2,2,'kyo/concurrent/scheduler/IOTask$$Lambda$65.0x0000000800d4dad8.applyVoid',2,0,0)
f(22,245,2,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',2,0,0)
f(23,245,2,2,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1',2,0,0)
f(24,245,2,2,'kyo/concurrent/scheduler/IOTask$$Lambda$66.0x0000000800d4dee0.apply',2,0,0)
f(25,245,2,2,'kyo/concurrent/scheduler/IOTask.$anonfun$1',2,0,0)
f(26,245,2,2,'kyo/bench/CountdownLatchBench$$anon$2.apply',2,0,0)
f(27,245,2,2,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$2',2,0,0)
f(28,245,2,2,'kyo/bench/CountdownLatchBench$$Lambda$61.0x0000000800d4ca78.apply',2,0,0)
f(29,245,2,2,'kyo/bench/CountdownLatchBench.$anonfun$5',2,0,0)
f(30,245,2,2,'scala/runtime/BoxesRunTime.boxToInteger',2,0,0)
f(18,247,11,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$5.run',11,0,0)
f(9,258,1,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',1,0,0)
f(9,259,14,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,259,14,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,259,14,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,259,14,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,259,14,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,259,14,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,259,14,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,259,14,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,259,14,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,259,14,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,259,14,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,259,14,1,'jdk/internal/misc/Unsafe.unpark')
f(21,259,14,3,'pthread_cond_signal')
f(22,260,13,5,'entry_SYSCALL_64_after_hwframe')
f(23,260,13,5,'do_syscall_64')
f(24,260,13,5,'__x64_sys_futex')
f(25,260,13,5,'do_futex')
f(26,260,13,5,'futex_wake')
f(27,261,12,5,'wake_up_q')
f(28,261,12,5,'_raw_spin_unlock_irqrestore')
f(7,273,1,2,'kyo/concurrent/scheduler/Queue.poll',1,0,0)
f(8,273,1,2,'kyo/concurrent/scheduler/Queue.modify',1,0,0)
f(9,273,1,2,'kyo/concurrent/scheduler/Queue$$Lambda$56.0x0000000800d48230.apply',1,0,0)
f(10,273,1,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',1,0,0)
f(11,273,1,2,'scala/collection/mutable/PriorityQueue.dequeue',1,0,0)
f(7,274,4,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,274,4,1,'kyo/concurrent/scheduler/Worker.park')
f(9,274,4,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,274,4,1,'jdk/internal/misc/Unsafe.park')
f(11,274,4,3,'[unknown]')
f(12,274,4,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,274,4,5,'entry_SYSCALL_64_after_hwframe')
f(14,274,4,5,'do_syscall_64')
f(15,274,3,5,'__x64_sys_futex')
f(16,274,3,5,'do_futex')
f(17,275,2,5,'futex_wait')
f(18,275,2,5,'futex_wait_queue_me')
f(19,275,2,5,'schedule')
f(20,275,2,5,'__schedule')
f(21,275,2,5,'finish_task_switch.isra.0')
f(15,277,1,5,'get_timespec64')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 560px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(35);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,11036,3,'all')
f(1,0,11031,1,'java/lang/Thread.run')
f(2,0,11031,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,11031,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,1233,1,'java/util/concurrent/FutureTask.run')
f(5,0,1233,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,1233,1,'java/util/concurrent/FutureTask.run')
f(7,0,1233,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,1233,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1233,1,'java/lang/reflect/Method.invoke')
f(10,0,1233,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,1233,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,1233,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,1233,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,1233,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,1233,1,'kyo/bench/Bench.forkKyo')
f(16,0,82,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,82,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,82,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,19,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,0,19,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3e760')
f(19,19,63,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3e760')
f(16,82,88,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,82,88,2,'kyo.bench.Bench$$anon$1')
f(16,170,781,1,'kyo/bench/Bench.runLoop$2')
f(17,170,347,1,'kyo/bench/Bench$$anon$1.apply')
f(18,170,35,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,170,35,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c82ba8.apply')
f(20,170,35,1,'kyo/bench/Bench.$anonfun$2')
f(21,170,35,1,'kyo/concurrent/fibers$Fiber.block')
f(22,170,35,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,205,312,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,205,312,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,205,312,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply')
f(21,205,312,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,205,8,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,213,243,2,'kyo.concurrent.scheduler.IOTask')
f(22,456,55,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,456,55,2,'kyo.concurrent.fibers$Fiber')
f(22,511,6,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,511,6,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,511,6,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,511,6,1,'kyo/concurrent/scheduler/Queue.offer')
f(26,511,6,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(27,511,6,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(28,511,6,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(29,511,6,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(30,511,6,2,'kyo.concurrent.scheduler.Queue$$Lambda$54+0x0000000800d43cd0')
f(17,517,434,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,517,434,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,517,434,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,517,434,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,517,144,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,517,144,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,517,37,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,554,107,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,554,107,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,661,110,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,771,180,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,771,180,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,771,180,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,951,282,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,951,148,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,951,148,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,951,148,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,951,148,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84000')
f(17,1099,100,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,1099,100,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,1199,34,1,'kyo/locals$Locals$.save')
f(18,1199,34,2,'kyo.locals$Locals$$anon$3')
f(4,1233,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,1233,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,1233,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,1233,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,1233,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,1233,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,1233,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,1233,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,1243,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,1243,1,2,'java.lang.String')
f(4,1244,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e5f8.run')
f(5,1244,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,1244,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,1244,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,1244,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,1244,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,1244,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,1244,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$58+0x0000000800d4c580')
f(4,1255,9776,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,1255,9776,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,1255,9776,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,1255,9775,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,1255,9775,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,1255,9724,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(10,1255,9724,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(11,1255,9724,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(12,1255,9724,2,'kyo.bench.DeepBindBench$$anon$1')
f(9,10979,51,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,10979,51,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,10979,51,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e760.apply')
f(12,10979,51,1,'kyo/bench/Bench.$anonfun$1')
f(13,10979,51,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,10979,51,1,'kyo/bench/DeepBindBench.kyoBench')
f(15,10979,51,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(16,10979,51,2,'kyo.bench.DeepBindBench$$anon$1')
f(7,11030,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,11030,1,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,11030,1,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,11030,1,1,'scala/runtime/ObjectRef.create')
f(11,11030,1,2,'scala.runtime.ObjectRef')
f(1,11031,5,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,11031,5,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,11031,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,11031,5,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,11031,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,11031,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,11031,1,1,'jdk/proxy1/$Proxy0.iterationResult')
f(8,11031,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient$$Lambda$8.0x0000000800c01c70.invoke')
f(9,11031,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.lambda$new$0')
f(10,11031,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushFrame')
f(11,11031,1,1,'java/io/ObjectOutputStream.writeObject')
f(12,11031,1,1,'java/io/ObjectOutputStream.writeObject0')
f(13,11031,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(14,11031,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(15,11031,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(16,11031,1,1,'java/io/ObjectOutputStream.writeObject0')
f(17,11031,1,1,'java/io/ObjectOutputStream.writeArray')
f(18,11031,1,1,'java/io/ObjectOutputStream.writeObject0')
f(19,11031,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(20,11031,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(21,11031,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(22,11031,1,1,'java/io/ObjectOutputStream.writeObject0')
f(23,11031,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(24,11031,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(25,11031,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(26,11031,1,1,'java/io/ObjectOutputStream.writeObject0')
f(27,11031,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(28,11031,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(29,11031,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(30,11031,1,1,'java/io/ObjectOutputStream.writeObject0')
f(31,11031,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(32,11031,1,1,'java/io/ObjectOutputStream$HandleTable.assign')
f(33,11031,1,1,'java/io/ObjectOutputStream$HandleTable.growEntries')
f(34,11031,1,2,'int[]')
f(7,11032,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,11032,1,2,'org.openjdk.jmh.infra.Control')
f(8,11033,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,11033,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,11033,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,11033,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,11033,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,11033,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 1280px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(80);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,275,3,'all')
f(1,0,10,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,10,3,'thread_native_entry(Thread*)')
f(3,0,10,4,'Thread::call_run()')
f(4,0,10,4,'JavaThread::thread_main_inner()')
f(5,0,10,4,'CompileBroker::compiler_thread_loop()')
f(6,0,10,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,10,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,10,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,6,4,'Compile::Code_Gen()')
f(10,0,1,4,'Matcher::match()')
f(11,0,1,4,'Matcher::xform(Node*, int)')
f(12,0,1,4,'Matcher::match_sfpt(SafePointNode*)')
f(13,0,1,4,'Matcher::match_tree(Node const*)')
f(10,1,2,4,'PhaseCFG::do_global_code_motion()')
f(11,1,1,4,'PhaseCFG::estimate_block_frequency()')
f(12,1,1,4,'Block::update_uncommon_branch(Block*)')
f(11,2,1,4,'PhaseCFG::global_code_motion()')
f(12,2,1,4,'PhaseCFG::schedule_late(VectorSet&, Node_Stack&)')
f(13,2,1,4,'PhaseCFG::hoist_to_cheaper_block(Block*, Block*, Node*)')
f(10,3,3,4,'PhaseChaitin::Register_Allocate()')
f(11,3,1,4,'PhaseChaitin::Split(unsigned int, ResourceArea*)')
f(12,3,1,4,'PhaseChaitin::split_USE(MachSpillCopyNode::SpillType, Node*, Block*, Node*, unsigned int, unsigned int, bool, bool, GrowableArray<unsigned int>, int)')
f(13,3,1,4,'RegMask::is_aligned_pairs() const')
f(11,4,1,4,'PhaseLive::compute(unsigned int)')
f(11,5,1,4,'addL_rReg_immNode::ideal_Opcode() const')
f(9,6,1,4,'Compile::Optimize()')
f(10,6,1,4,'Compile::remove_speculative_types(PhaseIterGVN&) [clone .part.0]')
f(9,7,3,4,'ParseGenerator::generate(JVMState*)')
f(10,7,3,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(11,7,3,4,'Parse::do_all_blocks()')
f(12,7,3,4,'Parse::do_one_block()')
f(13,7,3,4,'Parse::do_call()')
f(14,7,3,4,'PredictedCallGenerator::generate(JVMState*)')
f(15,7,3,4,'ParseGenerator::generate(JVMState*)')
f(16,7,3,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(17,7,3,4,'Parse::do_all_blocks()')
f(18,7,3,4,'Parse::do_one_block()')
f(19,7,3,4,'Parse::do_call()')
f(20,7,1,4,'ParseGenerator::generate(JVMState*)')
f(21,7,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(22,7,1,4,'Parse::do_all_blocks()')
f(23,7,1,4,'Parse::do_one_block()')
f(24,7,1,4,'Parse::do_call()')
f(25,7,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(26,7,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(27,7,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(28,7,1,4,'ParseGenerator::generate(JVMState*)')
f(29,7,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(30,7,1,4,'Parse::do_all_blocks()')
f(31,7,1,4,'Parse::do_one_block()')
f(32,7,1,4,'Parse::do_call()')
f(33,7,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(34,7,1,4,'ParseGenerator::generate(JVMState*)')
f(35,7,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(36,7,1,4,'Parse::do_all_blocks()')
f(37,7,1,4,'Parse::do_one_block()')
f(38,7,1,4,'Parse::do_call()')
f(39,7,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(40,7,1,4,'ParseGenerator::generate(JVMState*)')
f(41,7,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(42,7,1,4,'Parse::do_all_blocks()')
f(43,7,1,4,'Parse::do_one_block()')
f(44,7,1,4,'Parse::do_call()')
f(45,7,1,4,'ParseGenerator::generate(JVMState*)')
f(46,7,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(47,7,1,4,'Parse::do_all_blocks()')
f(48,7,1,4,'Parse::do_one_block()')
f(49,7,1,4,'Parse::do_call()')
f(50,7,1,4,'ParseGenerator::generate(JVMState*)')
f(51,7,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(52,7,1,4,'Parse::do_all_blocks()')
f(53,7,1,4,'Parse::do_one_block()')
f(54,7,1,4,'Parse::do_call()')
f(55,7,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(56,7,1,4,'ParseGenerator::generate(JVMState*)')
f(57,7,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(58,7,1,4,'Parse::do_all_blocks()')
f(59,7,1,4,'Parse::do_one_block()')
f(60,7,1,4,'Parse::do_call()')
f(61,7,1,4,'ParseGenerator::generate(JVMState*)')
f(62,7,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(63,7,1,4,'Parse::do_all_blocks()')
f(64,7,1,4,'Parse::do_one_block()')
f(65,7,1,4,'Parse::do_call()')
f(66,7,1,4,'ParseGenerator::generate(JVMState*)')
f(67,7,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(68,7,1,4,'Parse::do_all_blocks()')
f(69,7,1,4,'Parse::do_one_block()')
f(70,7,1,4,'Parse::do_call()')
f(71,7,1,4,'LibraryIntrinsic::generate(JVMState*)')
f(72,7,1,4,'LibraryCallKit::inline_unsafe_load_store(BasicType, LibraryCallKit::LoadStoreKind, LibraryCallKit::AccessKind) [clone .part.0]')
f(73,7,1,4,'GraphKit::access_atomic_cmpxchg_bool_at(Node*, Node*, TypePtr const*, int, Node*, Node*, Type const*, BasicType, unsigned long)')
f(74,7,1,4,'BarrierSetC2::atomic_cmpxchg_bool_at(C2AtomicParseAccess&, Node*, Node*, Type const*) const')
f(75,7,1,4,'ModRefBarrierSetC2::atomic_cmpxchg_bool_at_resolved(C2AtomicParseAccess&, Node*, Node*, Type const*) const')
f(76,7,1,4,'G1BarrierSetC2::post_barrier(GraphKit*, Node*, Node*, Node*, Node*, unsigned int, Node*, BasicType, bool) const')
f(20,8,2,4,'PredictedCallGenerator::generate(JVMState*)')
f(21,8,2,4,'ParseGenerator::generate(JVMState*)')
f(22,8,2,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(23,8,2,4,'Parse::do_all_blocks()')
f(24,8,2,4,'Parse::do_one_block()')
f(25,8,2,4,'Parse::do_call()')
f(26,8,1,4,'ParseGenerator::generate(JVMState*)')
f(27,8,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(28,8,1,4,'Parse::do_all_blocks()')
f(29,8,1,4,'Parse::do_one_block()')
f(30,8,1,4,'Parse::do_call()')
f(31,8,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(32,8,1,4,'ParseGenerator::generate(JVMState*)')
f(33,8,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(34,8,1,4,'Parse::do_all_blocks()')
f(35,8,1,4,'Parse::do_one_block()')
f(36,8,1,4,'Parse::do_call()')
f(37,8,1,4,'GraphKit::kill_dead_locals()')
f(38,8,1,4,'ciMethod::liveness_at_bci(int)')
f(39,8,1,4,'MethodLiveness::compute_liveness()')
f(40,8,1,4,'MethodLiveness::init_basic_blocks()')
f(41,8,1,4,'MethodLiveness::BasicBlock::BasicBlock(MethodLiveness*, int, int)')
f(26,9,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(27,9,1,4,'ParseGenerator::generate(JVMState*)')
f(28,9,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(29,9,1,4,'Parse::do_all_blocks()')
f(30,9,1,4,'Parse::do_one_block()')
f(31,9,1,4,'Parse::do_call()')
f(32,9,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(33,9,1,4,'ParseGenerator::generate(JVMState*)')
f(34,9,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(35,9,1,4,'Parse::do_all_blocks()')
f(36,9,1,4,'Parse::do_one_block()')
f(37,9,1,4,'Parse::do_call()')
f(38,9,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(39,9,1,4,'ParseGenerator::generate(JVMState*)')
f(40,9,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(41,9,1,4,'Parse::do_all_blocks()')
f(42,9,1,4,'Parse::do_one_block()')
f(43,9,1,4,'Parse::do_call()')
f(44,9,1,4,'ParseGenerator::generate(JVMState*)')
f(45,9,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(46,9,1,4,'Parse::do_all_blocks()')
f(47,9,1,4,'Parse::do_one_block()')
f(48,9,1,4,'Parse::do_call()')
f(49,9,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(50,9,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(51,9,1,4,'ParseGenerator::generate(JVMState*)')
f(52,9,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(53,9,1,4,'Parse::do_all_blocks()')
f(54,9,1,4,'Parse::do_one_block()')
f(55,9,1,4,'Parse::do_call()')
f(56,9,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(57,9,1,4,'ParseGenerator::generate(JVMState*)')
f(58,9,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(59,9,1,4,'Parse::do_all_blocks()')
f(60,9,1,4,'Parse::do_one_block()')
f(61,9,1,4,'Parse::do_call()')
f(62,9,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(63,9,1,4,'ParseGenerator::generate(JVMState*)')
f(64,9,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(65,9,1,4,'Parse::do_all_blocks()')
f(66,9,1,4,'Parse::do_one_block()')
f(67,9,1,4,'Parse::do_call()')
f(68,9,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(69,9,1,4,'ParseGenerator::generate(JVMState*)')
f(70,9,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(71,9,1,4,'Parse::do_all_blocks()')
f(72,9,1,4,'Parse::do_one_block()')
f(73,9,1,4,'Parse::do_call()')
f(74,9,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(75,9,1,4,'ParseGenerator::generate(JVMState*)')
f(76,9,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(77,9,1,4,'Parse::do_exits()')
f(78,9,1,4,'PhaseGVN::transform_no_reclaim(Node*)')
f(79,9,1,4,'RegionNode::Ideal(PhaseGVN*, bool)')
f(1,10,1,3,'[unknown]')
f(2,10,1,3,'/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2')
f(1,11,264,1,'java/lang/Thread.run')
f(2,11,264,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,11,264,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,11,23,1,'java/util/concurrent/FutureTask.run')
f(5,11,23,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,11,23,1,'java/util/concurrent/FutureTask.run')
f(7,11,23,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,11,23,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,11,23,1,'java/lang/reflect/Method.invoke')
f(10,11,23,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,11,23,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,11,23,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,11,23,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,11,23,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub',0,0,1)
f(15,12,22,1,'kyo/bench/Bench.forkKyo')
f(16,12,22,1,'kyo/bench/Bench.runLoop$2')
f(17,12,13,1,'kyo/bench/Bench$$anon$1.apply')
f(18,12,13,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,12,13,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,12,13,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply')
f(21,12,13,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',1,0,0)
f(22,12,1,2,'kyo/concurrent/scheduler/IOTask.<init>',1,0,0)
f(23,12,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(24,12,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(25,12,1,2,'java/util/concurrent/atomic/AtomicReference.<init>',1,0,0)
f(22,13,12,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,13,12,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,13,12,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,13,12,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,13,12,1,'jdk/internal/misc/Unsafe.unpark')
f(27,14,11,3,'pthread_cond_signal')
f(28,14,11,5,'entry_SYSCALL_64_after_hwframe')
f(29,14,11,5,'do_syscall_64')
f(30,14,11,5,'__x64_sys_futex')
f(31,14,11,5,'do_futex')
f(32,14,11,5,'futex_wake')
f(33,14,11,5,'wake_up_q')
f(34,14,11,5,'_raw_spin_unlock_irqrestore')
f(17,25,9,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,25,9,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,25,9,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,25,9,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,25,9,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,25,9,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,25,8,1,'java/util/concurrent/locks/LockSupport.park')
f(24,25,8,1,'jdk/internal/misc/Unsafe.park')
f(25,26,1,3,'Unsafe_Park')
f(26,26,1,3,'pthread_cond_wait')
f(25,27,6,3,'[unknown]')
f(26,27,5,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,29,3,5,'entry_SYSCALL_64_after_hwframe')
f(28,29,3,5,'do_syscall_64')
f(29,29,2,5,'__x64_sys_futex')
f(30,29,2,5,'do_futex')
f(31,29,2,5,'futex_wait')
f(32,29,1,5,'futex_wait_queue_me')
f(33,29,1,5,'schedule')
f(34,29,1,5,'__schedule')
f(35,29,1,5,'finish_task_switch.isra.0')
f(32,30,1,5,'futex_wait_setup')
f(29,31,1,5,'syscall_exit_to_user_mode')
f(30,31,1,5,'exit_to_user_mode_prepare')
f(31,31,1,5,'exit_to_user_mode_loop')
f(32,31,1,5,'__rseq_handle_notify_resume')
f(33,31,1,5,'__put_user_nocheck_8')
f(26,32,1,3,'pthread_cond_wait')
f(23,33,1,2,'kyo/concurrent/scheduler/IOPromise$$anon$1.tryAcquireShared',1,0,0)
f(4,34,241,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,34,241,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,34,241,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,34,80,2,'kyo/concurrent/scheduler/IOTask.run',62,0,0)
f(8,40,74,2,'kyo/concurrent/scheduler/IOTask.eval',56,0,0)
f(9,62,28,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',28,0,0)
f(10,62,28,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',28,0,0)
f(11,62,28,2,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e760.apply',28,0,0)
f(12,62,28,2,'kyo/bench/Bench.$anonfun$1',28,0,0)
f(13,62,28,2,'kyo/bench/Bench.kyoBenchFiber',28,0,0)
f(14,62,28,2,'kyo/bench/DeepBindBench.kyoBench',28,0,0)
f(15,62,28,2,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1',28,0,0)
f(16,62,28,2,'kyo/bench/DeepBindBench$$anon$1.<init>',28,0,0)
f(9,90,1,1,'kyo/concurrent/scheduler/IOTask.finalize$1')
f(9,91,17,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,91,17,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',2,0,0)
f(11,91,17,1,'kyo/concurrent/scheduler/IOPromise.complete',2,0,0)
f(12,91,2,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',2,0,0)
f(13,91,2,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',2,0,0)
f(14,91,2,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',2,0,0)
f(12,93,15,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,93,15,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,93,15,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,93,15,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,93,15,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,93,15,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,93,15,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,93,15,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,93,15,1,'jdk/internal/misc/Unsafe.unpark')
f(21,93,1,3,'Unsafe_Unpark')
f(22,93,1,4,'oopDesc::address_field(int) const')
f(21,94,14,3,'pthread_cond_signal')
f(22,94,14,5,'entry_SYSCALL_64_after_hwframe')
f(23,94,14,5,'do_syscall_64')
f(24,94,12,5,'__x64_sys_futex')
f(25,94,12,5,'do_futex')
f(26,94,12,5,'futex_wake')
f(27,94,1,5,'mark_wake_futex')
f(28,94,1,5,'plist_del')
f(27,95,11,5,'wake_up_q')
f(28,95,11,5,'_raw_spin_unlock_irqrestore')
f(24,106,2,5,'syscall_enter_from_user_mode')
f(9,108,1,2,'kyo/concurrent/scheduler/IOTask.st',1,0,0)
f(9,109,5,2,'kyo/ios$KyoIO.effect',5,0,0)
f(7,114,154,2,'kyo/concurrent/scheduler/Queue.poll',154,0,0)
f(8,114,14,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',14,0,0)
f(9,114,14,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',14,0,0)
f(10,126,2,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',2,0,0)
f(8,128,140,2,'kyo/concurrent/scheduler/Queue.modify',140,0,0)
f(9,128,77,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',77,0,0)
f(10,140,65,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',65,0,0)
f(11,150,55,2,'java/lang/invoke/VarForm.getMemberName',55,0,0)
f(9,205,63,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47148.apply',63,0,0)
f(10,205,63,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',63,0,0)
f(11,207,61,2,'scala/collection/mutable/PriorityQueue.dequeue',61,0,0)
f(7,268,7,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,268,7,1,'kyo/concurrent/scheduler/Worker.park')
f(9,268,7,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,268,7,1,'jdk/internal/misc/Unsafe.park')
f(11,269,1,3,'Unsafe_Park')
f(12,269,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,269,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,269,1,5,'do_syscall_64')
f(15,269,1,5,'__x64_sys_futex')
f(16,269,1,5,'do_futex')
f(17,269,1,5,'futex_wake')
f(11,270,5,3,'[unknown]')
f(12,270,5,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,270,5,5,'entry_SYSCALL_64_after_hwframe')
f(14,270,5,5,'do_syscall_64')
f(15,270,5,5,'__x64_sys_futex')
f(16,270,5,5,'do_futex')
f(17,270,5,5,'futex_wait')
f(18,270,5,5,'futex_wait_queue_me')
f(19,270,5,5,'schedule')
f(20,270,5,5,'__schedule')
f(21,270,5,5,'finish_task_switch.isra.0')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 400px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(25);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,20069,3,'all')
f(1,0,20064,1,'java/lang/Thread.run')
f(2,0,20064,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,20064,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,20064,1,'java/util/concurrent/FutureTask.run')
f(5,0,20064,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,20064,1,'java/util/concurrent/FutureTask.run')
f(7,0,20064,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,20064,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,20064,1,'java/lang/reflect/Method.invoke')
f(10,0,20064,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,20064,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,20064,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,20064,1,'kyo/bench/jmh_generated/DeepBindBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,20064,1,'kyo/bench/jmh_generated/DeepBindBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,20064,1,'kyo/bench/Bench.syncKyo')
f(16,0,20061,1,'kyo/bench/Bench.runLoop$1')
f(17,0,20061,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(18,0,20061,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(19,0,20061,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(20,0,20061,2,'kyo.bench.DeepBindBench$$anon$1')
f(16,20061,3,1,'kyo/bench/DeepBindBench.kyoBench')
f(17,20061,3,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(18,20061,3,2,'kyo.bench.DeepBindBench$$anon$1')
f(1,20064,5,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,20064,5,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,20064,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,20064,5,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,20064,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,20064,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,20064,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,20064,1,2,'org.openjdk.jmh.infra.Control')
f(8,20065,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,20065,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,20065,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,20065,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,20065,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,20065,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,20068,1,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,20068,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,20068,1,1,'java/lang/ClassLoader.loadClass')
f(10,20068,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,20068,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,20068,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,20068,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,20068,1,1,'jdk/internal/loader/URLClassPath.getResource')
f(15,20068,1,1,'jdk/internal/loader/URLClassPath$JarLoader.getResource')
f(16,20068,1,1,'java/util/jar/JarFile.getJarEntry')
f(17,20068,1,1,'java/util/jar/JarFile.getEntry')
f(18,20068,1,1,'java/util/zip/ZipFile.getEntry')
f(19,20068,1,1,'java/util/zip/ZipFile$Source.getEntryPos')
f(20,20068,1,1,'java/util/zip/ZipCoder$UTF8ZipCoder.toString')
f(21,20068,1,1,'java/lang/System$2.newStringUTF8NoRepl')
f(22,20068,1,1,'java/lang/String.newStringUTF8NoRepl')
f(23,20068,1,1,'java/util/Arrays.copyOfRange')
f(24,20068,1,2,'byte[]')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 336px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(21);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,298,3,'all')
f(1,0,298,1,'java/lang/Thread.run')
f(2,0,298,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,298,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,298,1,'java/util/concurrent/FutureTask.run')
f(5,0,298,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,298,1,'java/util/concurrent/FutureTask.run')
f(7,0,298,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,298,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,298,1,'java/lang/reflect/Method.invoke')
f(10,0,298,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,298,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,298,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,298,1,'kyo/bench/jmh_generated/DeepBindBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,298,1,'kyo/bench/jmh_generated/DeepBindBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(16,0,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(17,0,1,4,'MemAllocator::allocate() const')
f(18,0,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(19,0,1,4,'G1CardTable::g1_mark_as_young(MemRegion const&)')
f(15,1,164,2,'kyo/bench/Bench.syncKyo',164,0,0)
f(16,1,164,2,'kyo/bench/Bench.runLoop$1',164,0,0)
f(17,112,53,2,'kyo/bench/DeepBindBench$$anon$1.apply',53,0,0)
f(18,112,53,2,'kyo/bench/DeepBindBench$$anon$1.apply',53,0,0)
f(19,154,11,2,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1',11,0,0)
f(20,163,2,2,'kyo/bench/DeepBindBench$$anon$1.<init>',2,0,0)
f(15,165,133,2,'org/openjdk/jmh/infra/Blackhole.consume',133,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 400px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(25);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,12373,3,'all')
f(1,0,12370,1,'java/lang/Thread.run')
f(2,0,12370,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,12370,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,802,1,'java/util/concurrent/FutureTask.run')
f(5,0,802,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,802,1,'java/util/concurrent/FutureTask.run')
f(7,0,802,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,802,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,802,1,'java/lang/reflect/Method.invoke')
f(10,0,802,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,802,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,802,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,802,1,'kyo/bench/jmh_generated/DeepBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,802,1,'kyo/bench/jmh_generated/DeepBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,802,1,'kyo/bench/Bench.forkKyo')
f(16,0,46,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,46,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,46,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,0,1,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3e730')
f(19,1,45,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3e730')
f(16,46,83,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,46,83,2,'kyo.bench.Bench$$anon$1')
f(16,129,497,1,'kyo/bench/Bench.runLoop$2')
f(17,129,241,1,'kyo/bench/Bench$$anon$1.apply')
f(18,129,58,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,129,58,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c82ba8.apply')
f(20,129,58,1,'kyo/bench/Bench.$anonfun$2')
f(21,129,58,1,'kyo/concurrent/fibers$Fiber.block')
f(22,129,58,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,187,183,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,187,183,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,187,183,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply')
f(21,187,183,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,187,182,2,'kyo.concurrent.scheduler.IOTask')
f(22,369,1,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,369,1,2,'kyo.concurrent.fibers$Fiber')
f(17,370,256,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,370,256,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,370,256,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,370,256,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,370,61,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,370,61,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,370,2,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,372,59,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,372,59,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,431,22,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,453,173,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,453,173,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,453,173,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,626,176,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,626,174,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,626,174,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,626,174,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,626,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(21,626,1,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84000')
f(20,627,173,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84000')
f(17,800,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,800,2,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(4,802,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,802,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,802,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,802,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,802,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,802,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,802,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,802,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,812,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,812,1,2,'java.lang.String')
f(4,813,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e5f8.run')
f(5,813,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,813,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,813,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,813,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,813,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,813,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,813,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$69+0x0000000800d4e950')
f(4,824,11546,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,824,11546,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,824,11546,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,824,11546,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,824,11546,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,824,10872,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(10,824,10872,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(11,824,419,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(12,824,419,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(13,824,419,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(14,824,419,2,'kyo.bench.DeepBindMapBench$$anon$1$$Lambda$66+0x0000000800d4e000')
f(11,1243,536,2,'kyo.bench.DeepBindMapBench$$anon$1$$anon$2')
f(11,1779,699,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(12,1779,699,2,'kyo.bench.DeepBindMapBench$$anon$3')
f(11,2478,969,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$transformLoop$2')
f(12,2478,969,2,'kyo.bench.DeepBindMapBench$$anon$4')
f(11,3447,1147,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$transformLoop$3')
f(12,3447,1147,2,'kyo.bench.DeepBindMapBench$$anon$5')
f(11,4594,668,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$transformLoop$4')
f(12,4594,668,2,'kyo.bench.DeepBindMapBench$$anon$6')
f(11,5262,908,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$transformLoop$5')
f(12,5262,908,2,'kyo.bench.DeepBindMapBench$$anon$7')
f(11,6170,932,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$transformLoop$6')
f(12,6170,932,2,'kyo.bench.DeepBindMapBench$$anon$8')
f(11,7102,807,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$transformLoop$7')
f(12,7102,807,2,'kyo.bench.DeepBindMapBench$$anon$9')
f(11,7909,1064,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$transformLoop$8')
f(12,7909,1064,2,'kyo.bench.DeepBindMapBench$$anon$10')
f(11,8973,806,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$transformLoop$9')
f(12,8973,806,2,'kyo.bench.DeepBindMapBench$$anon$11')
f(11,9779,1026,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$transformLoop$10')
f(12,9779,1026,2,'kyo.bench.DeepBindMapBench$$anon$12')
f(11,10805,891,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(12,10805,891,2,'kyo.bench.DeepBindMapBench$$anon$13')
f(9,11696,580,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(10,11696,580,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(11,11696,580,1,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$66.0x0000000800d4e000.apply')
f(12,11696,580,1,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$$anonfun$adapted$11')
f(13,11696,580,1,'kyo/bench/DeepBindMapBench.$anonfun$11')
f(14,11696,580,1,'kyo/bench/DeepBindMapBench.loop$1')
f(15,11696,580,2,'kyo.bench.DeepBindMapBench$$anon$1')
f(9,12276,94,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,12276,94,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,12276,94,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e730.apply')
f(12,12276,94,1,'kyo/bench/Bench.$anonfun$1')
f(13,12276,94,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,12276,94,1,'kyo/bench/DeepBindMapBench.kyoBench')
f(15,12276,94,1,'kyo/bench/DeepBindMapBench.loop$1')
f(16,12276,94,2,'kyo.bench.DeepBindMapBench$$anon$1')
f(1,12370,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,12370,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,12370,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,12370,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,12370,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,12370,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,12370,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,12370,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,12370,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,12370,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,12370,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,12370,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,12370,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 448px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(28);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,299,3,'all')
f(1,0,4,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,4,3,'thread_native_entry(Thread*)')
f(3,0,4,4,'Thread::call_run()')
f(4,0,4,4,'JavaThread::thread_main_inner()')
f(5,0,4,4,'CompileBroker::compiler_thread_loop()')
f(6,0,4,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,4,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,4,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,4,4,'Compile::Code_Gen()')
f(10,0,4,4,'PhaseChaitin::Register_Allocate()')
f(11,0,1,4,'PhaseChaitin::Select()')
f(12,0,1,4,'PhaseIFG::re_insert(unsigned int)')
f(11,1,1,4,'PhaseChaitin::gather_lrg_masks(bool)')
f(11,2,1,4,'PhaseChaitin::post_allocate_copy_removal()')
f(12,2,1,4,'PhaseChaitin::elide_copy(Node*, int, Block*, Node_List&, Node_List&, bool)')
f(11,3,1,4,'PhaseLive::compute(unsigned int)')
f(1,4,1,3,'[unknown_Java]')
f(2,4,1,1,'kyo/ios$KyoIO.effect')
f(1,5,294,1,'java/lang/Thread.run')
f(2,5,294,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,5,294,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,5,2,1,'java/util/concurrent/FutureTask.run')
f(5,5,2,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,5,2,1,'java/util/concurrent/FutureTask.run')
f(7,5,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,5,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,5,2,1,'java/lang/reflect/Method.invoke')
f(10,5,2,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,5,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,5,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,5,2,1,'kyo/bench/jmh_generated/DeepBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,5,2,1,'kyo/bench/jmh_generated/DeepBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,5,2,1,'kyo/bench/Bench.forkKyo')
f(16,5,1,1,'kyo/bench/Bench.runLoop$2')
f(17,5,1,1,'kyo/bench/Bench$$anon$1.apply')
f(18,5,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,5,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,5,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply')
f(21,5,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,5,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,5,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,5,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,5,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,5,1,1,'jdk/internal/misc/Unsafe.unpark')
f(27,5,1,4,'ThreadsListHandle::~ThreadsListHandle()')
f(16,6,1,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,6,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,6,1,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply',1,0,0)
f(19,6,1,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',1,0,0)
f(20,6,1,2,'kyo/concurrent/scheduler/Scheduler$.schedule',1,0,0)
f(4,7,292,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,7,292,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,7,292,1,'kyo/concurrent/scheduler/Worker.runWorker',0,0,1)
f(7,8,290,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,8,290,1,'kyo/concurrent/scheduler/IOTask.eval',36,0,0)
f(9,35,146,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(10,37,144,2,'kyo/bench/DeepBindMapBench$$anon$1.apply',143,0,0)
f(11,44,4,2,'kyo/bench/DeepBindMapBench$$anon$1$$anon$2.<init>',4,0,0)
f(12,44,4,2,'kyo/ios$KyoIO.<init>',4,0,0)
f(13,47,1,2,'kyo/core$internal$Kyo.<init>',1,0,0)
f(14,47,1,2,'java/lang/Object.<init>',1,0,0)
f(11,48,61,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1',61,0,0)
f(12,48,61,2,'kyo/bench/DeepBindMapBench$$anon$3.<init>',61,0,0)
f(13,65,44,2,'kyo/core$internal$KyoCont.<init>',44,0,0)
f(14,70,36,2,'kyo/core$internal$Kyo.<init>',36,0,0)
f(15,92,14,2,'java/lang/Object.<init>',14,0,0)
f(14,106,3,2,'kyo/ios$KyoIO.effect',3,0,0)
f(15,107,2,2,'kyo/ios$KyoIO.effect',2,0,0)
f(11,109,72,2,'scala/runtime/BoxesRunTime.boxToInteger',71,0,0)
f(12,180,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(13,180,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(14,180,1,4,'MemAllocator::allocate() const')
f(15,180,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(16,180,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(17,180,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(18,180,1,4,'G1AllocRegion::new_alloc_region_and_allocate(unsigned long, bool)')
f(19,180,1,4,'G1CollectedHeap::new_mutator_alloc_region(unsigned long, bool, unsigned int)')
f(20,180,1,4,'G1CollectedHeap::new_region(unsigned long, HeapRegionType, bool, unsigned int)')
f(21,180,1,4,'HeapRegionManager::allocate_free_region(HeapRegionType, unsigned int)')
f(9,181,96,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(10,183,1,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11',1,0,0)
f(11,183,1,2,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$66.0x0000000800d4e000.apply',1,0,0)
f(12,183,1,2,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$$anonfun$adapted$11',1,0,0)
f(13,183,1,2,'kyo/bench/DeepBindMapBench.$anonfun$11',1,0,0)
f(14,183,1,2,'kyo/bench/DeepBindMapBench.loop$1',1,0,0)
f(10,184,93,1,'kyo/bench/DeepBindMapBench$$anon$12.apply',21,0,0)
f(11,184,1,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$transformLoop$10',1,0,0)
f(12,184,1,2,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$65.0x0000000800d4bc38.apply',1,0,0)
f(13,184,1,2,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$$anonfun$adapted$10',1,0,0)
f(14,184,1,2,'kyo/bench/DeepBindMapBench.$anonfun$10',1,0,0)
f(15,184,1,2,'scala/runtime/BoxesRunTime.boxToInteger',1,0,0)
f(16,184,1,2,'java/lang/Integer.valueOf',1,0,0)
f(11,185,92,1,'kyo/bench/DeepBindMapBench$$anon$11.apply',20,0,0)
f(12,187,18,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$transformLoop$9',18,0,0)
f(13,187,18,2,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$64.0x0000000800d4b870.apply',18,0,0)
f(14,187,18,2,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$$anonfun$adapted$9',18,0,0)
f(15,187,18,2,'kyo/bench/DeepBindMapBench.$anonfun$9',18,0,0)
f(16,187,18,2,'scala/runtime/BoxesRunTime.boxToInteger',18,0,0)
f(17,202,3,2,'java/lang/Integer.valueOf',3,0,0)
f(12,205,72,1,'kyo/bench/DeepBindMapBench$$anon$10.apply')
f(13,208,62,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$transformLoop$8',62,0,0)
f(14,208,62,2,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$63.0x0000000800d4b4a8.apply',62,0,0)
f(15,208,62,2,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$$anonfun$adapted$8',62,0,0)
f(16,208,62,2,'kyo/bench/DeepBindMapBench.$anonfun$8',62,0,0)
f(17,208,62,2,'scala/runtime/BoxesRunTime.boxToInteger',62,0,0)
f(13,270,7,2,'kyo/bench/DeepBindMapBench$$anon$9.apply',7,0,0)
f(14,270,7,2,'kyo/bench/DeepBindMapBench$$anon$8.apply',7,0,0)
f(15,270,7,2,'kyo/bench/DeepBindMapBench$$anon$7.apply',7,0,0)
f(9,277,3,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',3,0,0)
f(9,280,1,2,'kyo/concurrent/scheduler/IOTask.st',1,0,0)
f(9,281,6,6,'kyo/core$internal$KyoCont.effect',0,6,0)
f(9,287,6,1,'kyo/ios$KyoIO.effect')
f(9,293,5,3,'vtable stub')
f(7,298,1,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,298,1,2,'kyo/concurrent/scheduler/Queue.modify',1,0,0)
f(9,298,1,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47378.apply',1,0,0)
f(10,298,1,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',1,0,0)
f(11,298,1,2,'scala/collection/mutable/PriorityQueue.dequeue',1,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 560px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(35);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,14562,3,'all')
f(1,0,14558,1,'java/lang/Thread.run')
f(2,0,14558,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,14558,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,14558,1,'java/util/concurrent/FutureTask.run')
f(5,0,14558,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,14558,1,'java/util/concurrent/FutureTask.run')
f(7,0,14558,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,14558,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,14558,1,'java/lang/reflect/Method.invoke')
f(10,0,14558,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,14558,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,14558,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,14558,1,'kyo/bench/jmh_generated/DeepBindMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,14558,1,'kyo/bench/jmh_generated/DeepBindMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,14558,1,'kyo/bench/Bench.syncKyo')
f(16,0,14558,1,'kyo/bench/Bench.runLoop$1')
f(17,0,13932,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(18,0,13932,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(19,0,542,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,0,542,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,0,542,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,0,542,2,'kyo.bench.DeepBindMapBench$$anon$1$$Lambda$49+0x0000000800d07778')
f(19,542,614,2,'kyo.bench.DeepBindMapBench$$anon$1$$anon$2')
f(19,1156,912,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(20,1156,912,2,'kyo.bench.DeepBindMapBench$$anon$3')
f(19,2068,1485,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$transformLoop$2')
f(20,2068,1485,2,'kyo.bench.DeepBindMapBench$$anon$4')
f(19,3553,1241,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$transformLoop$3')
f(20,3553,1241,2,'kyo.bench.DeepBindMapBench$$anon$5')
f(19,4794,878,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$transformLoop$4')
f(20,4794,878,2,'kyo.bench.DeepBindMapBench$$anon$6')
f(19,5672,1228,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$transformLoop$5')
f(20,5672,1228,2,'kyo.bench.DeepBindMapBench$$anon$7')
f(19,6900,937,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$transformLoop$6')
f(20,6900,937,2,'kyo.bench.DeepBindMapBench$$anon$8')
f(19,7837,1234,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$transformLoop$7')
f(20,7837,1234,2,'kyo.bench.DeepBindMapBench$$anon$9')
f(19,9071,1439,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$transformLoop$8')
f(20,9071,1439,2,'kyo.bench.DeepBindMapBench$$anon$10')
f(19,10510,934,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$transformLoop$9')
f(20,10510,934,2,'kyo.bench.DeepBindMapBench$$anon$11')
f(19,11444,1264,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$transformLoop$10')
f(20,11444,1264,2,'kyo.bench.DeepBindMapBench$$anon$12')
f(19,12708,1224,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(20,12708,1224,2,'kyo.bench.DeepBindMapBench$$anon$13')
f(17,13932,626,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(18,13932,626,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(19,13932,626,1,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$49.0x0000000800d07778.apply')
f(20,13932,626,1,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$$anonfun$adapted$11')
f(21,13932,626,1,'kyo/bench/DeepBindMapBench.$anonfun$11')
f(22,13932,626,1,'kyo/bench/DeepBindMapBench.loop$1')
f(23,13932,626,2,'kyo.bench.DeepBindMapBench$$anon$1')
f(1,14558,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,14558,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,14558,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,14558,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,14558,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,14558,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,14558,1,1,'jdk/proxy1/$Proxy0.iterationResult')
f(8,14558,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient$$Lambda$8.0x0000000800c01c70.invoke')
f(9,14558,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.lambda$new$0')
f(10,14558,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushFrame')
f(11,14558,1,1,'java/io/ObjectOutputStream.writeObject')
f(12,14558,1,1,'java/io/ObjectOutputStream.writeObject0')
f(13,14558,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(14,14558,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(15,14558,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(16,14558,1,1,'java/io/ObjectOutputStream.writeObject0')
f(17,14558,1,1,'java/io/ObjectOutputStream.writeArray')
f(18,14558,1,1,'java/io/ObjectOutputStream.writeObject0')
f(19,14558,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(20,14558,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(21,14558,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(22,14558,1,1,'java/io/ObjectOutputStream.writeObject0')
f(23,14558,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(24,14558,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(25,14558,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(26,14558,1,1,'java/io/ObjectOutputStream.writeObject0')
f(27,14558,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(28,14558,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(29,14558,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(30,14558,1,1,'java/io/ObjectOutputStream.writeObject0')
f(31,14558,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(32,14558,1,1,'java/io/ObjectOutputStream$HandleTable.assign')
f(33,14558,1,1,'java/io/ObjectOutputStream$HandleTable.growEntries')
f(34,14558,1,2,'int[]')
f(7,14559,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,14559,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,14559,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,14559,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,14559,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,14559,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,14559,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 448px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(28);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,298,3,'all')
f(1,0,298,1,'java/lang/Thread.run')
f(2,0,298,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,298,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,298,1,'java/util/concurrent/FutureTask.run')
f(5,0,298,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,298,1,'java/util/concurrent/FutureTask.run')
f(7,0,298,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,298,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,298,1,'java/lang/reflect/Method.invoke')
f(10,0,298,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,298,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,298,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,298,1,'kyo/bench/jmh_generated/DeepBindMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,298,1,'kyo/bench/jmh_generated/DeepBindMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,298,1,'kyo/bench/Bench.syncKyo')
f(16,0,298,1,'kyo/bench/Bench.runLoop$1')
f(17,4,294,2,'kyo/bench/DeepBindMapBench$$anon$13.apply',203,0,0)
f(18,14,7,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11',7,0,0)
f(18,21,277,2,'kyo/bench/DeepBindMapBench$$anon$12.apply',186,0,0)
f(19,39,168,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$transformLoop$10',168,0,0)
f(20,42,157,2,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$48.0x0000000800d073b0.apply',157,0,0)
f(21,46,153,2,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$$anonfun$adapted$10',153,0,0)
f(22,74,97,2,'kyo/bench/DeepBindMapBench.$anonfun$10',97,0,0)
f(23,87,84,2,'scala/runtime/BoxesRunTime.boxToInteger',84,0,0)
f(22,171,28,2,'scala/runtime/BoxesRunTime.unboxToInt',28,0,0)
f(23,190,9,2,'java/lang/Integer.intValue',9,0,0)
f(20,199,8,2,'kyo/bench/DeepBindMapBench$$anon$12.<init>',8,0,0)
f(21,205,2,2,'kyo/core$internal$KyoCont.<init>',2,0,0)
f(19,207,91,1,'kyo/bench/DeepBindMapBench$$anon$11.apply')
f(20,209,59,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$transformLoop$9',59,0,0)
f(21,209,59,2,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$47.0x0000000800d06fe8.apply',59,0,0)
f(22,209,59,2,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$$anonfun$adapted$9',59,0,0)
f(23,209,59,2,'kyo/bench/DeepBindMapBench.$anonfun$9',59,0,0)
f(24,209,59,2,'scala/runtime/BoxesRunTime.boxToInteger',59,0,0)
f(20,268,30,2,'kyo/bench/DeepBindMapBench$$anon$10.apply',30,0,0)
f(21,268,30,2,'kyo/bench/DeepBindMapBench$$anon$9.apply',30,0,0)
f(22,270,28,2,'kyo/bench/DeepBindMapBench$$anon$8.apply',28,0,0)
f(23,294,4,2,'kyo/bench/DeepBindMapBench$$anon$7.apply',4,0,0)
f(24,294,4,2,'kyo/bench/DeepBindMapBench$$anon$6.apply',4,0,0)
f(25,294,4,2,'kyo/bench/DeepBindMapBench$$anon$5.apply',4,0,0)
f(26,295,3,2,'kyo/bench/DeepBindMapBench$$anon$4.apply',3,0,0)
f(27,295,3,2,'kyo/bench/DeepBindMapBench$$anon$3.apply',3,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 400px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(25);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,12965,3,'all')
f(1,0,12962,1,'java/lang/Thread.run')
f(2,0,12962,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,12962,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,984,1,'java/util/concurrent/FutureTask.run')
f(5,0,984,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,984,1,'java/util/concurrent/FutureTask.run')
f(7,0,984,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,984,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,984,1,'java/lang/reflect/Method.invoke')
f(10,0,984,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,984,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,984,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,984,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,984,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,984,1,'kyo/bench/Bench.forkKyo')
f(16,0,74,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,74,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,74,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,74,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c81148')
f(16,74,150,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,74,150,2,'kyo.bench.Bench$$anon$1')
f(16,224,577,1,'kyo/bench/Bench.runLoop$2')
f(17,224,266,1,'kyo/bench/Bench$$anon$1.apply')
f(18,224,105,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,224,105,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c88000.apply')
f(20,224,105,1,'kyo/bench/Bench.$anonfun$2')
f(21,224,105,1,'kyo/concurrent/fibers$Fiber.block')
f(22,224,105,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,329,161,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,329,161,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,329,161,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(21,329,161,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,329,161,2,'kyo.concurrent.scheduler.IOTask')
f(17,490,311,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,490,311,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,490,311,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,490,311,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,490,131,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,490,131,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,490,23,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,513,108,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,513,108,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,621,40,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,661,140,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,661,140,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,661,140,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,801,183,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,801,181,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,801,181,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,801,181,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,801,181,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c828a0')
f(17,982,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,982,2,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(4,984,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ea20.run')
f(5,984,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,984,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,984,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,984,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,984,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,984,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,984,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,994,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,994,1,2,'java.lang.String')
f(4,995,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec48.run')
f(5,995,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,995,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,995,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,995,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,995,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,995,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$65+0x0000000800d551f8')
f(4,1006,11956,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d230f8.run')
f(5,1006,11956,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,1006,11956,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,1006,11956,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,1006,11956,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,1006,6568,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,1006,6568,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(11,1006,6568,1,'kyo/bench/EnqueueDequeueBench$$Lambda$62.0x0000000800d548a8.apply')
f(12,1006,6568,1,'kyo/bench/EnqueueDequeueBench.$anonfun$2')
f(13,1006,6568,1,'kyo/bench/EnqueueDequeueBench.loop$2')
f(14,1006,1227,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(15,1006,1227,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(16,1006,1227,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,1006,1227,2,'kyo.bench.EnqueueDequeueBench$$Lambda$60+0x0000000800d4fc00')
f(14,2233,1827,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(15,2233,1827,2,'kyo.bench.EnqueueDequeueBench$$anon$2')
f(14,4060,3514,1,'kyo/concurrent/channels$Channels$$anon$14.put')
f(15,4060,3514,1,'kyo/concurrent/channels$Channels$Blocking.put$')
f(16,4060,3514,1,'kyo/concurrent/channels$Channels$Blocking.put')
f(17,4060,894,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,4060,894,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,4060,894,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,4060,894,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$59+0x0000000800d4f830')
f(17,4954,998,1,'kyo/concurrent/channels$Channels$$anon$14.putFiber')
f(18,4954,998,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$_$transformLoop$10')
f(19,4954,998,1,'kyo/concurrent/channels$Channels$$anon$14$$Lambda$58.0x0000000800d4f460.apply')
f(20,4954,998,1,'kyo/concurrent/channels$Channels$$anon$14.$anonfun$11')
f(21,4954,998,2,'kyo.concurrent.channels$$anon$19')
f(17,5952,1622,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1')
f(18,5952,1622,2,'kyo.concurrent.channels$Channels$Blocking$$anon$1')
f(9,7574,5213,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,7574,5213,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(11,7574,5213,1,'kyo/bench/EnqueueDequeueBench$$Lambda$60.0x0000000800d4fc00.apply')
f(12,7574,5213,1,'kyo/bench/EnqueueDequeueBench.$anonfun$1')
f(13,7574,1238,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(14,7574,1238,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(15,7574,1238,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,7574,1238,2,'kyo.bench.EnqueueDequeueBench$$Lambda$62+0x0000000800d548a8')
f(13,8812,1828,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(14,8812,1828,2,'kyo.bench.EnqueueDequeueBench$$anon$1')
f(13,10640,2147,1,'kyo/concurrent/channels$Channels$$anon$14.take')
f(14,10640,2147,1,'kyo/concurrent/channels$Channels$Blocking.take$')
f(15,10640,2147,1,'kyo/concurrent/channels$Channels$Blocking.take')
f(16,10640,685,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,10640,685,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,10640,685,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,10640,685,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$61+0x0000000800d544d8')
f(16,11325,1462,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2')
f(17,11325,1462,2,'kyo.concurrent.channels$Channels$Blocking$$anon$2')
f(9,12787,48,1,'kyo/bench/EnqueueDequeueBench$$anon$3.apply')
f(10,12787,1,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$3')
f(11,12787,1,1,'kyo/bench/EnqueueDequeueBench$$Lambda$57.0x0000000800d4c768.apply')
f(12,12787,1,1,'kyo/bench/EnqueueDequeueBench.$anonfun$3')
f(13,12787,1,1,'kyo/bench/EnqueueDequeueBench.loop$2')
f(14,12787,1,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(15,12787,1,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(16,12787,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,12787,1,2,'kyo.bench.EnqueueDequeueBench$$Lambda$60+0x0000000800d4fc00')
f(10,12788,47,1,'kyo/concurrent/channels$Channels$$anon$21.apply')
f(11,12788,47,1,'kyo/concurrent/channels$Channels$.kyo$concurrent$channels$Channels$$$_$transformLoop$11')
f(12,12788,47,1,'kyo/concurrent/channels$Channels$$$Lambda$56.0x0000000800d4bd68.apply')
f(13,12788,47,1,'kyo/concurrent/channels$Channels$.$anonfun$9')
f(14,12788,2,2,'kyo.concurrent.channels$Channels$$anon$14')
f(14,12790,45,1,'kyo/concurrent/channels$Channels$$anon$14.<init>')
f(15,12790,4,2,'org.jctools.queues.MpmcUnboundedXaddArrayQueue')
f(15,12794,41,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(16,12794,41,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(17,12794,41,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.<init>')
f(18,12794,3,2,'org.jctools.queues.SpscArrayQueue')
f(18,12797,38,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(19,12797,38,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(20,12797,38,1,'org/jctools/queues/MpmcUnboundedXaddChunk.<init>')
f(21,12797,1,1,'org/jctools/queues/MpUnboundedXaddChunk.<init>')
f(22,12797,1,1,'org/jctools/util/UnsafeRefArrayAccess.allocateRefArray')
f(23,12797,1,2,'java.lang.Object[]')
f(21,12798,37,1,'org/jctools/util/UnsafeLongArrayAccess.allocateLongArray')
f(22,12798,37,2,'long[]')
f(9,12835,127,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,12835,127,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,12835,127,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c81148.apply')
f(12,12835,127,1,'kyo/bench/Bench.$anonfun$1')
f(13,12835,127,1,'kyo/bench/EnqueueDequeueBench.kyoBenchFiber')
f(14,12835,127,1,'kyo/concurrent/channels$Channels$.blocking')
f(15,12835,127,1,'kyo/concurrent/queues$Queues$.bounded')
f(16,12835,127,2,'kyo.concurrent.queues$Queues$$anon$11')
f(1,12962,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,12962,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,12962,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,12962,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,12962,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,12962,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,12962,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,12962,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,12962,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,12962,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,12962,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,12962,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,12962,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 560px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(35);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,293,3,'all')
f(1,0,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,1,3,'thread_native_entry(Thread*)')
f(3,0,1,4,'Thread::call_run()')
f(4,0,1,4,'VMThread::run()')
f(5,0,1,4,'VMThread::inner_execute(VM_Operation*)')
f(6,0,1,4,'SafepointSynchronize::begin()')
f(7,0,1,4,'LinuxWaitBarrier::arm(int)')
f(1,1,2,3,'[unknown_Java]')
f(2,1,1,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(2,2,1,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(1,3,290,1,'java/lang/Thread.run')
f(2,3,290,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,3,290,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,3,3,1,'java/util/concurrent/FutureTask.run')
f(5,3,3,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,3,3,1,'java/util/concurrent/FutureTask.run')
f(7,3,3,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,3,3,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,3,3,1,'java/lang/reflect/Method.invoke')
f(10,3,3,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,3,3,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,3,3,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,3,3,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,3,3,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,3,3,1,'kyo/bench/Bench.forkKyo')
f(16,3,2,1,'kyo/bench/Bench.runLoop$2')
f(17,3,2,1,'kyo/bench/Bench$$anon$1.apply')
f(18,3,2,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,3,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,3,2,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(21,3,2,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,3,2,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,3,2,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,3,2,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,3,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,3,2,1,'jdk/internal/misc/Unsafe.unpark')
f(27,3,2,3,'pthread_cond_signal')
f(28,3,2,5,'entry_SYSCALL_64_after_hwframe')
f(29,3,2,5,'do_syscall_64')
f(30,3,2,5,'__x64_sys_futex')
f(31,3,2,5,'do_futex')
f(32,3,2,5,'futex_wake')
f(33,3,2,5,'wake_up_q')
f(34,3,2,5,'_raw_spin_unlock_irqrestore')
f(16,5,1,2,'kyo/concurrent/fibers$Fibers.forkFiber',1,0,0)
f(17,5,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(18,5,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(4,6,287,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d230f8.run')
f(5,6,287,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,6,287,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,6,282,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,6,282,1,'kyo/concurrent/scheduler/IOTask.eval',34,0,0)
f(9,35,127,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,41,121,2,'kyo/concurrent/channels$Channels$Blocking$$anon$2.apply',112,0,0)
f(11,54,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(12,54,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(13,54,1,4,'MemAllocator::allocate() const')
f(14,54,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(15,54,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(16,54,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(17,54,1,4,'MutatorAllocRegion::retire(bool)')
f(18,54,1,4,'G1CollectedHeap::retire_mutator_alloc_region(HeapRegion*, unsigned long)')
f(19,54,1,4,'G1CollectionSet::add_eden_region(HeapRegion*)')
f(20,54,1,4,'G1Policy::predict_region_non_copy_time_ms(HeapRegion*, bool) const')
f(21,54,1,4,'G1Analytics::predict_scan_card_num(unsigned long, bool) const')
f(11,55,99,2,'kyo/concurrent/channels$$anon$16.apply',91,0,0)
f(12,72,82,2,'kyo/concurrent/channels$$anon$16.apply',74,0,0)
f(13,86,8,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(14,92,1,2,'kyo/concurrent/channels$Channels$$anon$14.q',1,0,0)
f(14,93,1,2,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.isEmpty',1,0,0)
f(15,93,1,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.isEmpty',1,0,0)
f(16,93,1,2,'org/jctools/queues/IndexedQueueSizeUtil.isEmpty',1,0,0)
f(13,94,22,2,'kyo/concurrent/fibers$Fibers.value',22,0,0)
f(14,94,22,2,'kyo/concurrent/fibers$Fiber$.done',22,0,0)
f(15,94,22,2,'kyo/concurrent/fibers$Fiber.<init>',22,0,0)
f(13,116,38,2,'kyo/concurrent/queues$$anon$12.poll',38,0,0)
f(14,129,21,2,'java/util/concurrent/atomic/AtomicReference.getAndSet',21,0,0)
f(15,129,21,2,'java/lang/invoke/VarHandleGuards.guard_LL_L',21,0,0)
f(16,133,2,2,'java/lang/invoke/VarForm.getMemberName',2,0,0)
f(16,135,2,2,'java/lang/invoke/VarHandle.isDirect',2,0,0)
f(16,137,13,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.getAndSet',13,0,0)
f(14,150,4,2,'scala/Option$.apply',4,0,0)
f(15,150,4,2,'scala/Some.<init>',4,0,0)
f(16,150,4,2,'scala/Option.<init>',4,0,0)
f(17,150,4,2,'java/lang/Object.<init>',4,0,0)
f(11,154,8,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2',8,0,0)
f(12,161,1,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$61.0x0000000800d544d8.apply',1,0,0)
f(9,162,107,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,175,20,2,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2',20,0,0)
f(11,182,11,2,'kyo/bench/EnqueueDequeueBench$$Lambda$60.0x0000000800d4fc00.apply',11,0,0)
f(12,184,9,2,'kyo/bench/EnqueueDequeueBench.$anonfun$1',9,0,0)
f(13,186,7,2,'kyo/concurrent/channels$Channels$$anon$14.take',7,0,0)
f(14,186,7,2,'kyo/concurrent/channels$Channels$Blocking.take$',7,0,0)
f(15,192,1,2,'kyo/concurrent/channels$Channels$Blocking.take',1,0,0)
f(11,193,2,2,'kyo/bench/EnqueueDequeueBench$$anon$2.<init>',2,0,0)
f(10,195,74,2,'kyo/concurrent/channels$Channels$Blocking$$anon$1.apply',68,0,0)
f(11,202,39,2,'kyo/concurrent/channels$$anon$19.apply',33,0,0)
f(12,202,39,2,'kyo/concurrent/channels$$anon$19.apply',33,0,0)
f(13,209,6,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(14,212,1,2,'kyo/concurrent/channels$Channels$$anon$14.q',1,0,0)
f(14,213,2,2,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.isEmpty',2,0,0)
f(15,213,2,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.isEmpty',2,0,0)
f(16,213,2,2,'org/jctools/queues/IndexedQueueSizeUtil.isEmpty',2,0,0)
f(13,215,1,2,'kyo/concurrent/channels$Channels$$anon$14.q',1,0,0)
f(13,216,25,2,'kyo/concurrent/queues$$anon$12.offer',25,0,0)
f(14,216,25,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',25,0,0)
f(15,216,25,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',25,0,0)
f(16,231,7,2,'java/lang/invoke/VarForm.getMemberName',7,0,0)
f(17,235,3,2,'java/lang/invoke/VarForm.getMemberNameOrNull',3,0,0)
f(16,238,1,2,'java/lang/invoke/VarHandle.checkExactAccessMode',1,0,0)
f(16,239,2,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',2,0,0)
f(11,241,28,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1',28,0,0)
f(12,244,25,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$59.0x0000000800d4f830.apply',25,0,0)
f(13,264,5,2,'kyo/concurrent/channels$Channels$Blocking.$anonfun$1',5,0,0)
f(9,269,3,2,'kyo/concurrent/scheduler/IOTask.st',3,0,0)
f(9,272,14,6,'kyo/core$internal$KyoCont.effect',0,14,0)
f(9,286,2,3,'vtable stub')
f(7,288,5,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,288,5,1,'kyo/concurrent/scheduler/Worker.park')
f(9,288,5,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,288,5,1,'jdk/internal/misc/Unsafe.park')
f(11,288,2,3,'Unsafe_Park')
f(12,288,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,288,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,288,1,5,'do_syscall_64')
f(12,289,1,4,'Parker::park(bool, long)')
f(11,290,3,3,'[unknown]')
f(12,290,3,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,290,3,5,'entry_SYSCALL_64_after_hwframe')
f(14,290,3,5,'do_syscall_64')
f(15,290,3,5,'__x64_sys_futex')
f(16,290,3,5,'do_futex')
f(17,290,3,5,'futex_wait')
f(18,290,2,5,'futex_wait_queue_me')
f(19,290,2,5,'schedule')
f(20,290,2,5,'__schedule')
f(21,290,2,5,'finish_task_switch.isra.0')
f(18,292,1,5,'hrtimer_init_sleeper')
f(19,292,1,5,'__hrtimer_init')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 448px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(28);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,14461,3,'all')
f(1,0,14458,1,'java/lang/Thread.run')
f(2,0,14458,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,14458,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,1261,1,'java/util/concurrent/FutureTask.run')
f(5,0,1261,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,1261,1,'java/util/concurrent/FutureTask.run')
f(7,0,1261,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,1261,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1261,1,'java/lang/reflect/Method.invoke')
f(10,0,1261,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,1261,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,1261,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,1261,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,1261,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,1261,1,'kyo/bench/Bench.syncKyo')
f(16,0,598,1,'kyo/bench/Bench.runLoop$1')
f(17,0,347,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,347,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,347,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,347,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,210,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,210,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,128,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,128,82,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,128,82,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,210,120,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,330,17,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,330,17,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,330,17,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,347,251,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,347,237,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,347,237,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,347,237,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,347,149,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,347,149,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,347,149,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(24,347,149,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,347,148,2,'kyo.concurrent.scheduler.IOTask')
f(25,495,1,1,'kyo/concurrent/fibers$Fiber$.promise')
f(26,495,1,2,'kyo.concurrent.fibers$Fiber')
f(21,496,88,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,496,88,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c88000.apply')
f(23,496,88,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,496,88,1,'kyo/concurrent/fibers$Fiber.join')
f(25,496,88,1,'kyo/concurrent/fibers$Fibers.get')
f(26,496,88,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,496,88,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,584,14,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,584,14,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c885f8.apply')
f(20,584,14,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,584,14,1,'kyo/concurrent/fibers$Fiber.block')
f(22,584,14,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,598,663,1,'kyo/bench/EnqueueDequeueBench.kyoBench')
f(17,598,51,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,598,51,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,598,51,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,598,51,2,'kyo.bench.EnqueueDequeueBench$$Lambda$37+0x0000000800c81148')
f(17,649,284,1,'kyo/concurrent/fibers$Fibers.block')
f(18,649,53,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,649,53,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,702,97,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,702,97,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,799,134,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,799,134,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,933,328,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,933,119,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,933,119,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,933,119,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,933,119,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c88000')
f(18,1052,130,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,1052,103,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,1052,103,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,1052,103,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,1052,103,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c828a0')
f(19,1155,26,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,1155,26,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(19,1181,1,1,'kyo/locals$Locals$.save')
f(20,1181,1,2,'kyo.locals$Locals$$anon$3')
f(18,1182,79,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,1182,79,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(4,1261,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec30.run')
f(5,1261,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,1261,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,1261,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,1261,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,1261,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,1261,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,1261,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,1271,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,1271,1,2,'java.lang.String')
f(4,1272,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1ee58.run')
f(5,1272,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,1272,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,1272,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,1272,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,1272,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,1272,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$64+0x0000000800d55210')
f(4,1283,13175,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23480.run')
f(5,1283,13175,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,1283,13175,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,1283,13175,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,1283,13175,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,1283,7232,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,1283,6250,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(11,1283,6250,1,'kyo/bench/EnqueueDequeueBench$$Lambda$63.0x0000000800d54e40.apply')
f(12,1283,6250,1,'kyo/bench/EnqueueDequeueBench.$anonfun$2')
f(13,1283,6250,1,'kyo/bench/EnqueueDequeueBench.loop$2')
f(14,1283,1121,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(15,1283,1121,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(16,1283,1121,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,1283,1121,2,'kyo.bench.EnqueueDequeueBench$$Lambda$61+0x0000000800d543d0')
f(14,2404,1614,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(15,2404,1614,2,'kyo.bench.EnqueueDequeueBench$$anon$2')
f(14,4018,3515,1,'kyo/concurrent/channels$Channels$$anon$14.put')
f(15,4018,3515,1,'kyo/concurrent/channels$Channels$Blocking.put$')
f(16,4018,3515,1,'kyo/concurrent/channels$Channels$Blocking.put')
f(17,4018,860,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,4018,860,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,4018,860,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,4018,860,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$60+0x0000000800d54000')
f(17,4878,1064,1,'kyo/concurrent/channels$Channels$$anon$14.putFiber')
f(18,4878,1064,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$_$transformLoop$10')
f(19,4878,1064,1,'kyo/concurrent/channels$Channels$$anon$14$$Lambda$59.0x0000000800d4f950.apply')
f(20,4878,1064,1,'kyo/concurrent/channels$Channels$$anon$14.$anonfun$11')
f(21,4878,1064,2,'kyo.concurrent.channels$$anon$19')
f(17,5942,1591,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1')
f(18,5942,1591,2,'kyo.concurrent.channels$Channels$Blocking$$anon$1')
f(10,7533,982,1,'kyo/concurrent/channels$Channels$Blocking$$anon$2.apply')
f(11,7533,982,1,'kyo/concurrent/channels$$anon$16.apply')
f(12,7533,982,1,'kyo/concurrent/channels$$anon$16.apply')
f(13,7533,982,1,'kyo/concurrent/fibers$Fibers.value')
f(14,7533,982,1,'kyo/concurrent/fibers$Fiber$.done')
f(15,7533,982,2,'kyo.concurrent.fibers$Fiber')
f(9,8515,5801,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,8515,5059,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(11,8515,5059,1,'kyo/bench/EnqueueDequeueBench$$Lambda$61.0x0000000800d543d0.apply')
f(12,8515,5059,1,'kyo/bench/EnqueueDequeueBench.$anonfun$1')
f(13,8515,1207,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(14,8515,1207,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(15,8515,1207,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,8515,1207,2,'kyo.bench.EnqueueDequeueBench$$Lambda$63+0x0000000800d54e40')
f(13,9722,1507,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(14,9722,1507,2,'kyo.bench.EnqueueDequeueBench$$anon$1')
f(13,11229,2345,1,'kyo/concurrent/channels$Channels$$anon$14.take')
f(14,11229,2345,1,'kyo/concurrent/channels$Channels$Blocking.take$')
f(15,11229,2345,1,'kyo/concurrent/channels$Channels$Blocking.take')
f(16,11229,897,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,11229,897,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,11229,897,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,11229,897,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$62+0x0000000800d54a70')
f(16,12126,1448,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2')
f(17,12126,1448,2,'kyo.concurrent.channels$Channels$Blocking$$anon$2')
f(10,13574,742,1,'kyo/concurrent/channels$Channels$Blocking$$anon$1.apply')
f(11,13574,742,1,'kyo/concurrent/channels$$anon$19.apply')
f(12,13574,742,1,'kyo/concurrent/channels$$anon$19.apply')
f(13,13574,742,1,'kyo/concurrent/fibers$Fibers.value')
f(14,13574,742,1,'kyo/concurrent/fibers$Fiber$.done')
f(15,13574,742,2,'kyo.concurrent.fibers$Fiber')
f(9,14316,25,1,'kyo/bench/EnqueueDequeueBench$$anon$3.apply')
f(10,14316,2,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$3')
f(11,14316,2,1,'kyo/bench/EnqueueDequeueBench$$Lambda$58.0x0000000800d4cc58.apply')
f(12,14316,2,1,'kyo/bench/EnqueueDequeueBench.$anonfun$3')
f(13,14316,2,1,'kyo/bench/EnqueueDequeueBench.loop$2')
f(14,14316,1,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(15,14316,1,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(16,14316,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,14316,1,2,'kyo.bench.EnqueueDequeueBench$$Lambda$61+0x0000000800d543d0')
f(14,14317,1,1,'kyo/concurrent/channels$Channels$$anon$14.put')
f(15,14317,1,1,'kyo/concurrent/channels$Channels$Blocking.put$')
f(16,14317,1,1,'kyo/concurrent/channels$Channels$Blocking.put')
f(17,14317,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,14317,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,14317,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,14317,1,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$60+0x0000000800d54000')
f(10,14318,23,1,'kyo/concurrent/channels$Channels$$anon$21.apply')
f(11,14318,22,1,'kyo/concurrent/channels$Channels$.kyo$concurrent$channels$Channels$$$_$transformLoop$11')
f(12,14318,22,1,'kyo/concurrent/channels$Channels$$$Lambda$57.0x0000000800d4c488.apply')
f(13,14318,22,1,'kyo/concurrent/channels$Channels$.$anonfun$9')
f(14,14318,22,1,'kyo/concurrent/channels$Channels$$anon$14.<init>')
f(15,14318,8,2,'org.jctools.queues.MpmcUnboundedXaddArrayQueue')
f(15,14326,14,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(16,14326,14,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(17,14326,14,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.<init>')
f(18,14326,9,2,'org.jctools.queues.SpscArrayQueue')
f(18,14335,5,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(19,14335,5,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(20,14335,2,2,'org.jctools.queues.MpmcUnboundedXaddChunk')
f(20,14337,3,1,'org/jctools/queues/MpmcUnboundedXaddChunk.<init>')
f(21,14337,3,1,'org/jctools/util/UnsafeLongArrayAccess.allocateLongArray')
f(22,14337,3,2,'long[]')
f(11,14340,1,1,'kyo/concurrent/queues$Queues$$anon$11.apply')
f(12,14340,1,1,'kyo/concurrent/queues$Queues$$anon$11.apply')
f(13,14340,1,2,'kyo.concurrent.queues$Queue')
f(9,14341,117,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,14341,117,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,14341,117,1,'kyo/bench/EnqueueDequeueBench$$Lambda$37.0x0000000800c81148.apply')
f(12,14341,117,1,'kyo/bench/EnqueueDequeueBench.kyoBench$$anonfun$1')
f(13,14341,117,1,'kyo/bench/EnqueueDequeueBench.kyoBenchFiber')
f(14,14341,117,1,'kyo/concurrent/channels$Channels$.blocking')
f(15,14341,117,1,'kyo/concurrent/queues$Queues$.bounded')
f(16,14341,117,2,'kyo.concurrent.queues$Queues$$anon$11')
f(1,14458,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,14458,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,14458,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,14458,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,14458,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,14458,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,14458,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,14458,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,14458,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,14458,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,14458,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,14458,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,14458,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 608px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(38);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,294,3,'all')
f(1,0,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,1,3,'thread_native_entry(Thread*)')
f(3,0,1,4,'Thread::call_run()')
f(4,0,1,4,'VMThread::run()')
f(5,0,1,4,'VMThread::inner_execute(VM_Operation*)')
f(6,0,1,4,'VMThread::evaluate_operation(VM_Operation*)')
f(7,0,1,4,'VM_Operation::evaluate()')
f(8,0,1,4,'VM_G1CollectForAllocation::doit()')
f(9,0,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint(double)')
f(10,0,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint_helper(double)')
f(11,0,1,4,'G1CollectedHeap::pre_evacuate_collection_set(G1EvacuationInfo&, G1ParScanThreadStateSet*)')
f(12,0,1,4,'WorkGang::run_task(AbstractGangTask*, unsigned int, bool)')
f(13,0,1,3,'sem_post')
f(14,0,1,5,'entry_SYSCALL_64_after_hwframe')
f(15,0,1,5,'do_syscall_64')
f(16,0,1,5,'__x64_sys_futex')
f(17,0,1,5,'do_futex')
f(18,0,1,5,'futex_wake')
f(19,0,1,5,'wake_up_q')
f(20,0,1,5,'_raw_spin_unlock_irqrestore')
f(1,1,293,1,'java/lang/Thread.run')
f(2,1,293,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,1,293,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,1,2,1,'java/util/concurrent/FutureTask.run')
f(5,1,2,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,1,2,1,'java/util/concurrent/FutureTask.run')
f(7,1,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,1,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,1,2,1,'java/lang/reflect/Method.invoke')
f(10,1,2,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,1,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,1,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,1,2,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,1,2,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,1,2,1,'kyo/bench/Bench.syncKyo')
f(16,1,2,1,'kyo/bench/Bench.runLoop$1')
f(17,1,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,1,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,1,1,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,1,1,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,1,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,1,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,1,1,1,'java/util/concurrent/locks/LockSupport.park')
f(24,1,1,1,'jdk/internal/misc/Unsafe.park')
f(25,1,1,3,'[unknown]')
f(26,1,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(17,2,1,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,2,1,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,2,1,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,2,1,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,2,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,2,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,2,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(24,2,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,2,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,2,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,2,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(28,2,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(29,2,1,1,'jdk/internal/misc/Unsafe.unpark')
f(30,2,1,3,'pthread_cond_signal')
f(31,2,1,5,'entry_SYSCALL_64_after_hwframe')
f(32,2,1,5,'do_syscall_64')
f(33,2,1,5,'__x64_sys_futex')
f(34,2,1,5,'do_futex')
f(35,2,1,5,'futex_wake')
f(36,2,1,5,'wake_up_q')
f(37,2,1,5,'_raw_spin_unlock_irqrestore')
f(4,3,291,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23480.run')
f(5,3,291,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,3,291,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,3,285,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,3,285,1,'kyo/concurrent/scheduler/IOTask.eval',75,0,0)
f(9,69,120,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,70,119,2,'kyo/concurrent/channels$Channels$Blocking$$anon$2.apply',111,0,0)
f(11,79,1,5,'asm_sysvec_hyperv_stimer0')
f(12,79,1,5,'sysvec_hyperv_stimer0')
f(13,79,1,5,'irq_exit_rcu')
f(14,79,1,5,'__irq_exit_rcu')
f(15,79,1,5,'__softirqentry_text_start')
f(16,79,1,5,'run_rebalance_domains')
f(17,79,1,5,'rcu_read_unlock_strict')
f(11,80,105,2,'kyo/concurrent/channels$$anon$16.apply',97,0,0)
f(12,99,86,2,'kyo/concurrent/channels$$anon$16.apply',78,0,0)
f(13,139,8,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(14,145,2,2,'kyo/concurrent/channels$Channels$$anon$14.q',2,0,0)
f(13,147,1,2,'kyo/concurrent/fibers$.Fibers',1,0,0)
f(13,148,23,2,'kyo/concurrent/fibers$Fibers.value',23,0,0)
f(14,148,23,2,'kyo/concurrent/fibers$Fiber$.done',23,0,0)
f(15,148,23,2,'kyo/concurrent/fibers$Fiber.<init>',23,0,0)
f(16,148,23,2,'java/lang/Object.<init>',23,0,0)
f(13,171,14,2,'kyo/concurrent/queues$$anon$12.poll',14,0,0)
f(14,179,6,2,'java/util/concurrent/atomic/AtomicReference.getAndSet',6,0,0)
f(15,179,6,2,'java/lang/invoke/VarHandleGuards.guard_LL_L',6,0,0)
f(16,182,3,2,'java/lang/invoke/VarForm.getMemberName',3,0,0)
f(17,183,2,2,'java/lang/invoke/VarForm.getMemberNameOrNull',2,0,0)
f(11,185,4,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2',4,0,0)
f(12,186,3,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$62.0x0000000800d54a70.apply',3,0,0)
f(13,187,2,2,'kyo/concurrent/channels$Channels$Blocking.$anonfun$2',2,0,0)
f(14,188,1,2,'kyo/concurrent/fibers$Fiber.join',1,0,0)
f(9,189,79,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,195,10,2,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2',10,0,0)
f(11,195,9,2,'kyo/bench/EnqueueDequeueBench$$Lambda$61.0x0000000800d543d0.apply',9,0,0)
f(12,201,3,2,'kyo/bench/EnqueueDequeueBench.$anonfun$1',3,0,0)
f(13,201,3,2,'kyo/concurrent/channels$Channels$$anon$14.take',3,0,0)
f(14,201,3,2,'kyo/concurrent/channels$Channels$Blocking.take$',3,0,0)
f(15,201,3,2,'kyo/concurrent/channels$Channels$Blocking.take',3,0,0)
f(16,202,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(17,203,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(18,203,1,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$62.0x0000000800d54a70.<init>',1,0,0)
f(11,204,1,2,'kyo/bench/EnqueueDequeueBench$$anon$2.<init>',1,0,0)
f(12,204,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(10,205,63,2,'kyo/concurrent/channels$Channels$Blocking$$anon$1.apply',54,0,0)
f(11,206,40,2,'kyo/concurrent/channels$$anon$19.apply',31,0,0)
f(12,207,39,2,'kyo/concurrent/channels$$anon$19.apply',30,0,0)
f(13,215,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(14,215,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(15,215,1,4,'MemAllocator::allocate() const')
f(16,215,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(17,215,1,4,'G1Allocator::unsafe_max_tlab_alloc()')
f(13,216,8,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(14,220,2,2,'kyo/concurrent/channels$Channels$$anon$14.q',2,0,0)
f(14,222,2,2,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.isEmpty',2,0,0)
f(15,222,2,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.isEmpty',2,0,0)
f(16,222,2,2,'org/jctools/queues/IndexedQueueSizeUtil.isEmpty',2,0,0)
f(17,222,2,2,'org/jctools/queues/MpUnboundedXaddArrayQueueProducerFields.lvProducerIndex',2,0,0)
f(13,224,4,2,'kyo/concurrent/channels$Channels$$anon$14.q',4,0,0)
f(13,228,2,2,'kyo/concurrent/fibers$Fibers.value',2,0,0)
f(14,229,1,2,'kyo/concurrent/fibers$Fiber$.done',1,0,0)
f(13,230,16,2,'kyo/concurrent/queues$$anon$12.offer',16,0,0)
f(14,230,16,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',16,0,0)
f(15,230,16,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',16,0,0)
f(16,240,6,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',6,0,0)
f(17,244,2,2,'java/util/Objects.requireNonNull',2,0,0)
f(11,246,22,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1',22,0,0)
f(12,248,20,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$60.0x0000000800d54000.apply',20,0,0)
f(13,252,16,2,'kyo/concurrent/channels$Channels$Blocking.$anonfun$1',16,0,0)
f(14,252,16,2,'kyo/concurrent/fibers$Fiber.join',16,0,0)
f(9,268,2,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',2,0,0)
f(9,270,3,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,270,3,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,270,3,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,270,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,270,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,270,3,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,270,3,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,270,3,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,270,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,270,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,270,3,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,270,3,1,'jdk/internal/misc/Unsafe.unpark')
f(21,270,3,3,'pthread_cond_signal')
f(22,270,3,5,'entry_SYSCALL_64_after_hwframe')
f(23,270,3,5,'do_syscall_64')
f(24,270,3,5,'__x64_sys_futex')
f(25,270,3,5,'do_futex')
f(26,270,3,5,'futex_wake')
f(27,270,3,5,'wake_up_q')
f(28,270,3,5,'_raw_spin_unlock_irqrestore')
f(9,273,2,2,'kyo/concurrent/scheduler/IOTask.st',2,0,0)
f(9,275,8,6,'kyo/core$internal$KyoCont.effect',0,8,0)
f(9,283,5,3,'vtable stub')
f(7,288,6,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,288,6,1,'kyo/concurrent/scheduler/Worker.park')
f(9,288,6,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,288,6,1,'jdk/internal/misc/Unsafe.park')
f(11,288,1,3,'Unsafe_Park')
f(12,288,1,3,'pthread_mutex_trylock')
f(11,289,5,3,'[unknown]')
f(12,289,3,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,289,3,5,'entry_SYSCALL_64_after_hwframe')
f(14,289,3,5,'do_syscall_64')
f(15,290,2,5,'__x64_sys_futex')
f(16,290,2,5,'do_futex')
f(17,290,2,5,'futex_wait')
f(18,290,2,5,'futex_wait_queue_me')
f(19,290,2,5,'hrtimer_sleeper_start_expires')
f(20,290,2,5,'_raw_spin_unlock_irqrestore')
f(12,292,2,3,'pthread_cond_timedwait')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 880px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(55);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,14773,3,'all')
f(1,0,14770,1,'java/lang/Thread.run')
f(2,0,14770,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,14770,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,317,1,'java/util/concurrent/FutureTask.run')
f(5,0,317,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,317,1,'java/util/concurrent/FutureTask.run')
f(7,0,317,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,317,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,317,1,'java/lang/reflect/Method.invoke')
f(10,0,317,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,317,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,317,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,317,1,'kyo/bench/jmh_generated/ForkManyBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,317,1,'kyo/bench/jmh_generated/ForkManyBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,317,1,'kyo/bench/Bench.forkKyo')
f(16,0,16,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,16,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,16,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,16,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,0,16,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3f718')
f(16,16,5,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,16,5,2,'kyo.bench.Bench$$anon$1')
f(16,21,224,1,'kyo/bench/Bench.runLoop$2')
f(17,21,76,1,'kyo/bench/Bench$$anon$1.apply')
f(18,21,76,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,21,76,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,21,76,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(21,21,76,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,21,75,2,'kyo.concurrent.scheduler.IOTask')
f(22,96,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,96,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,96,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,96,1,1,'kyo/concurrent/scheduler/Queue.offer')
f(26,96,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(27,96,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(28,96,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(29,96,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(30,96,1,2,'kyo.concurrent.scheduler.Queue$$Lambda$54+0x0000000800d474b0')
f(17,97,148,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,97,148,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,97,148,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,97,148,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,97,68,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,97,68,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,97,68,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,97,68,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,165,79,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,244,1,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,244,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,244,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,245,72,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,245,72,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,245,72,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(4,317,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f2b8.run')
f(5,317,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,317,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,317,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,317,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,317,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,317,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,317,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,327,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,327,1,2,'java.lang.String')
f(4,328,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f4e0.run')
f(5,328,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,328,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,328,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,328,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,328,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,328,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$69+0x0000000800d4fd88')
f(4,339,14431,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fda8.run')
f(5,339,14431,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,339,14431,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,339,10,1,'java/util/concurrent/CopyOnWriteArrayList.add')
f(8,339,10,1,'java/util/Arrays.copyOf')
f(9,339,10,1,'java/util/Arrays.copyOf')
f(10,339,10,2,'java.lang.Object[]')
f(7,349,12933,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,349,12933,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,349,12922,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,349,10515,1,'kyo/bench/ForkManyBench$$anon$1.apply')
f(11,349,4387,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(12,349,4387,1,'kyo/bench/ForkManyBench$$Lambda$61.0x0000000800d4b0c0.apply')
f(13,349,4387,1,'kyo/bench/ForkManyBench.$anonfun$2')
f(14,349,4387,1,'kyo/bench/ForkManyBench.repeat$2')
f(15,349,2010,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4cc00.linkToTargetMethod')
f(16,349,2010,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c400.newInvokeSpecial')
f(17,349,2010,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,349,2010,2,'kyo.bench.ForkManyBench$$Lambda$61+0x0000000800d4b0c0')
f(15,2359,2377,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(16,2359,2377,2,'kyo.bench.ForkManyBench$$anon$1')
f(11,4736,6128,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,4736,6128,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,4736,6128,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(14,4736,6128,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,4736,953,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,5689,4009,2,'kyo.concurrent.scheduler.IOTask')
f(15,9698,1163,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,9698,1163,2,'kyo.concurrent.fibers$Fiber')
f(15,10861,3,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(16,10861,3,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(17,10861,3,1,'kyo/concurrent/scheduler/Queue.offer')
f(18,10861,3,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(19,10861,3,1,'scala/Function0.apply$mcZ$sp')
f(20,10861,3,1,'kyo/concurrent/scheduler/Queue$$Lambda$54.0x0000000800d474b0.apply')
f(21,10861,3,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1')
f(22,10861,3,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,10861,3,1,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize')
f(24,10861,3,1,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize')
f(25,10861,3,1,'scala/collection/mutable/ArrayBuffer$.scala$collection$mutable$ArrayBuffer$$ensureSize')
f(26,10861,3,5,'java.lang.Object[]')
f(10,10864,2407,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5')
f(11,10864,2407,2,'kyo.bench.ForkManyBench$$anon$6')
f(9,13271,6,1,'kyo/bench/ForkManyBench$$anon$7.apply')
f(10,13271,4,1,'kyo/bench/ForkManyBench$$anon$4.apply')
f(11,13271,3,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$3')
f(12,13271,3,1,'kyo/bench/ForkManyBench$$Lambda$57.0x0000000800d4a080.apply')
f(13,13271,3,1,'kyo/bench/ForkManyBench.$anonfun$adapted$3')
f(14,13271,3,1,'kyo/bench/ForkManyBench.$anonfun$4')
f(15,13271,1,2,'kyo.bench.ForkManyBench$$anon$2')
f(15,13272,1,2,'kyo.concurrent.atomics$AtomicInt')
f(15,13273,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$2')
f(16,13273,1,2,'kyo.bench.ForkManyBench$$anon$3')
f(11,13274,1,1,'kyo/concurrent/atomics$Atomics$$anon$1.apply')
f(12,13274,1,1,'kyo/concurrent/atomics$Atomics$$anon$1.apply')
f(13,13274,1,2,'kyo.concurrent.atomics$AtomicInt')
f(10,13275,2,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$6')
f(11,13275,2,1,'kyo/bench/ForkManyBench$$Lambda$58.0x0000000800d4a450.apply')
f(12,13275,2,1,'kyo/bench/ForkManyBench.$anonfun$6')
f(13,13275,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(14,13275,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(15,13275,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,13275,1,2,'kyo.bench.ForkManyBench$$Lambda$60+0x0000000800d4ae00')
f(13,13276,1,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(14,13276,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(15,13276,1,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(9,13277,2,1,'kyo/bench/ForkManyBench$$anon$8.apply')
f(10,13277,2,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$7')
f(11,13277,2,1,'kyo/bench/ForkManyBench$$Lambda$56.0x0000000800d44400.apply')
f(12,13277,2,1,'kyo/bench/ForkManyBench.$anonfun$3')
f(13,13277,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(14,13277,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(15,13277,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,13277,1,2,'kyo.bench.ForkManyBench$$Lambda$57+0x0000000800d4a080')
f(13,13278,1,1,'kyo/concurrent/atomics$Atomics$.initInt')
f(14,13278,1,2,'kyo.concurrent.atomics$Atomics$$anon$1')
f(9,13279,2,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(10,13279,2,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(11,13279,2,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$Promise$$anon$26$$_$loop$22')
f(12,13279,2,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(13,13279,2,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(14,13279,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(15,13279,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(16,13279,2,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(17,13279,2,1,'scala/runtime/function/JProcedure1.apply')
f(18,13279,2,1,'scala/runtime/function/JProcedure1.apply')
f(19,13279,2,1,'kyo/concurrent/scheduler/IOTask$$Lambda$66.0x0000000800d4ebd8.applyVoid')
f(20,13279,2,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(21,13279,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(22,13279,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(23,13279,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(24,13279,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$68+0x0000000800d4f4c8')
f(21,13280,1,1,'kyo/concurrent/scheduler/IOPromise.become')
f(22,13280,1,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(23,13280,1,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(24,13280,1,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(25,13280,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(26,13280,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(9,13281,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,13281,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,13281,1,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3f718.apply')
f(12,13281,1,1,'kyo/bench/Bench.$anonfun$1')
f(13,13281,1,1,'kyo/bench/ForkManyBench.kyoBenchFiber')
f(14,13281,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$7')
f(15,13281,1,2,'kyo.bench.ForkManyBench$$anon$8')
f(7,13282,1485,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,13282,1485,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,13282,1485,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,13282,1485,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,13282,1485,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d45000')
f(7,14767,3,1,'kyo/concurrent/scheduler/Worker.flush')
f(8,14767,3,1,'kyo/concurrent/scheduler/Queue.drain')
f(9,14767,3,1,'kyo/concurrent/scheduler/Queue.modify')
f(10,14767,3,1,'kyo/concurrent/scheduler/Queue$$Lambda$75.0x0000000800d52a00.apply')
f(11,14767,3,1,'kyo/concurrent/scheduler/Queue.drain$$anonfun$adapted$1')
f(12,14767,3,1,'kyo/concurrent/scheduler/Queue.drain$$anonfun$1')
f(13,14767,3,1,'scala/collection/AbstractIterable.foreach')
f(14,14767,3,1,'scala/collection/IterableOnceOps.foreach$')
f(15,14767,3,1,'scala/collection/IterableOnceOps.foreach')
f(16,14767,3,1,'scala/collection/mutable/PriorityQueue.iterator')
f(17,14767,3,1,'scala/collection/mutable/ArrayBuffer.iterator')
f(18,14767,3,1,'scala/collection/IndexedSeqOps.iterator$')
f(19,14767,3,1,'scala/collection/IndexedSeqOps.iterator')
f(20,14767,3,1,'scala/collection/mutable/ArrayBuffer.view')
f(21,14767,3,1,'scala/collection/mutable/ArrayBuffer.view')
f(22,14767,3,1,'java/lang/ClassLoader.loadClass')
f(23,14767,3,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(24,14767,3,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(25,14767,3,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(26,14767,3,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(27,14767,3,1,'jdk/internal/loader/BuiltinClassLoader.defineClass')
f(28,14767,3,1,'java/security/SecureClassLoader.defineClass')
f(29,14767,3,1,'java/lang/ClassLoader.defineClass')
f(30,14767,3,1,'java/lang/ClassLoader.defineClass1')
f(31,14767,3,1,'java/lang/ClassLoader.loadClass')
f(32,14767,3,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(33,14767,3,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(34,14767,3,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(35,14767,3,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(36,14767,3,1,'jdk/internal/loader/BuiltinClassLoader.defineClass')
f(37,14767,1,1,'java/security/SecureClassLoader.defineClass')
f(38,14767,1,1,'java/lang/ClassLoader.defineClass')
f(39,14767,1,1,'java/lang/ClassLoader.defineClass1')
f(40,14767,1,1,'java/lang/ClassLoader.loadClass')
f(41,14767,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(42,14767,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(43,14767,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(44,14767,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(45,14767,1,1,'jdk/internal/loader/BuiltinClassLoader.defineClass')
f(46,14767,1,1,'jdk/internal/loader/Resource.getByteBuffer')
f(47,14767,1,1,'jdk/internal/loader/Resource.cachedInputStream')
f(48,14767,1,1,'jdk/internal/loader/URLClassPath$JarLoader$2.getInputStream')
f(49,14767,1,1,'java/util/jar/JarFile.getInputStream')
f(50,14767,1,1,'java/util/zip/ZipFile.getInputStream')
f(51,14767,1,1,'java/util/zip/ZipFile$ZipFileInflaterInputStream.<init>')
f(52,14767,1,1,'java/util/zip/ZipFile$ZipFileInflaterInputStream.<init>')
f(53,14767,1,1,'java/util/zip/InflaterInputStream.<init>')
f(54,14767,1,2,'byte[]')
f(37,14768,2,1,'jdk/internal/loader/Resource.getBytes')
f(38,14768,2,1,'java/util/Arrays.copyOf')
f(39,14768,2,5,'byte[]')
f(1,14770,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,14770,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,14770,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,14770,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,14770,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,14770,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,14770,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,14770,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,14770,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,14770,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,14770,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,14770,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,14770,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 496px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(31);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,291,3,'all')
f(1,0,7,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,7,3,'thread_native_entry(Thread*)')
f(3,0,7,4,'Thread::call_run()')
f(4,0,7,4,'JavaThread::thread_main_inner()')
f(5,0,7,4,'CompileBroker::compiler_thread_loop()')
f(6,0,7,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,7,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,7,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,4,4,'Compile::Code_Gen()')
f(10,0,1,4,'Matcher::match()')
f(11,0,1,4,'Matcher::xform(Node*, int)')
f(12,0,1,4,'Matcher::match_tree(Node const*)')
f(13,0,1,4,'Matcher::Label_Root(Node const*, State*, Node*, Node*&)')
f(14,0,1,4,'Matcher::Label_Root(Node const*, State*, Node*, Node*&)')
f(15,0,1,4,'Matcher::Label_Root(Node const*, State*, Node*, Node*&)')
f(16,0,1,4,'State::DFA(int, Node const*)')
f(17,0,1,4,'State::_sub_Op_ConL(Node const*)')
f(10,1,1,4,'PhaseCFG::do_global_code_motion()')
f(11,1,1,4,'PhaseCFG::global_code_motion()')
f(12,1,1,4,'PhaseLive::compute(unsigned int)')
f(10,2,2,4,'PhaseChaitin::Register_Allocate()')
f(11,2,1,4,'PhaseChaitin::build_ifg_physical(ResourceArea*)')
f(12,2,1,4,'PhaseChaitin::interfere_with_live(unsigned int, IndexSet*) [clone .part.0]')
f(11,3,1,4,'PhaseChaitin::gather_lrg_masks(bool)')
f(9,4,2,4,'Compile::Optimize()')
f(10,4,1,4,'PhaseIdealLoop::optimize(PhaseIterGVN&, LoopOptsMode)')
f(11,4,1,4,'PhaseIdealLoop::build_and_optimize(LoopOptsMode)')
f(12,4,1,4,'IdealLoopTree::beautify_loops(PhaseIdealLoop*)')
f(13,4,1,4,'IdealLoopTree::merge_many_backedges(PhaseIdealLoop*)')
f(14,4,1,4,'Node::set_req_X(unsigned int, Node*, PhaseIterGVN*)')
f(10,5,1,4,'PhaseIterGVN::optimize()')
f(11,5,1,4,'PhaseIterGVN::transform_old(Node*)')
f(12,5,1,4,'PhaseIterGVN::subsume_node(Node*, Node*)')
f(9,6,1,4,'ParseGenerator::generate(JVMState*)')
f(10,6,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(11,6,1,4,'Parse::do_all_blocks()')
f(12,6,1,4,'Parse::do_one_block()')
f(13,6,1,4,'Parse::do_call()')
f(14,6,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(15,6,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(16,6,1,4,'ParseGenerator::generate(JVMState*)')
f(17,6,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(18,6,1,4,'Parse::do_all_blocks()')
f(19,6,1,4,'Parse::do_one_block()')
f(20,6,1,4,'Parse::do_call()')
f(21,6,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(22,6,1,4,'ParseGenerator::generate(JVMState*)')
f(23,6,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(24,6,1,4,'Parse::do_all_blocks()')
f(25,6,1,4,'Parse::do_one_block()')
f(26,6,1,4,'Parse::do_call()')
f(27,6,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(28,6,1,4,'ParseGenerator::generate(JVMState*)')
f(29,6,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(30,6,1,4,'ciMethod::method_data() [clone .part.0]')
f(1,7,1,3,'[unknown]')
f(2,7,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(3,7,1,5,'entry_SYSCALL_64_after_hwframe')
f(4,7,1,5,'do_syscall_64')
f(5,7,1,5,'__x64_sys_futex')
f(6,7,1,5,'do_futex')
f(7,7,1,5,'futex_wait')
f(8,7,1,5,'futex_wait_queue_me')
f(9,7,1,5,'schedule')
f(10,7,1,5,'__schedule')
f(11,7,1,5,'finish_task_switch.isra.0')
f(1,8,283,1,'java/lang/Thread.run')
f(2,8,283,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,8,283,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,8,1,1,'java/util/concurrent/FutureTask.run')
f(5,8,1,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,8,1,1,'java/util/concurrent/FutureTask.run')
f(7,8,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,8,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,8,1,1,'java/lang/reflect/Method.invoke')
f(10,8,1,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,8,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,8,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,8,1,1,'kyo/bench/jmh_generated/ForkManyBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,8,1,1,'kyo/bench/jmh_generated/ForkManyBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,8,1,1,'kyo/bench/Bench.forkKyo')
f(16,8,1,1,'kyo/bench/Bench.runLoop$2')
f(17,8,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,8,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,8,1,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,8,1,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,8,1,6,'kyo/concurrent/scheduler/IOPromise.runLoop$1',0,1,0)
f(4,9,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f2b8.run')
f(5,9,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,9,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,9,1,1,'java/lang/Thread.sleep')
f(8,9,1,3,'[unknown]')
f(9,9,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,9,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,9,1,5,'do_syscall_64')
f(12,9,1,5,'__x64_sys_futex')
f(13,9,1,5,'do_futex')
f(14,9,1,5,'_raw_spin_lock')
f(4,10,281,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fda8.run')
f(5,10,281,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,10,281,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,18,238,1,'kyo/concurrent/scheduler/IOTask.run',36,0,0)
f(8,23,230,1,'kyo/concurrent/scheduler/IOTask.eval',28,0,0)
f(9,39,4,1,'kyo/bench/ForkManyBench$$anon$3.apply')
f(10,39,4,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$2',4,0,0)
f(11,39,4,2,'kyo/bench/ForkManyBench$$Lambda$59.0x0000000800d4ac60.apply',4,0,0)
f(12,39,4,2,'kyo/bench/ForkManyBench.$anonfun$adapted$2',4,0,0)
f(13,40,3,2,'kyo/bench/ForkManyBench.$anonfun$5',3,0,0)
f(14,40,3,2,'scala/runtime/BoxesRunTime.boxToBoolean',3,0,0)
f(9,43,190,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,45,177,1,'kyo/bench/ForkManyBench$$anon$1.apply')
f(11,49,173,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',39,0,0)
f(12,49,173,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',39,0,0)
f(13,50,170,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply',36,0,0)
f(14,50,170,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',36,0,0)
f(15,52,16,2,'kyo/concurrent/scheduler/IOTask.<init>',16,0,0)
f(16,57,11,2,'kyo/concurrent/scheduler/IOPromise.<init>',11,0,0)
f(17,57,11,2,'kyo/concurrent/scheduler/IOPromise.<init>',11,0,0)
f(18,57,11,2,'java/util/concurrent/atomic/AtomicReference.<init>',11,0,0)
f(15,68,152,1,'kyo/concurrent/scheduler/Scheduler$.schedule',18,0,0)
f(16,68,9,2,'kyo/concurrent/scheduler/Scheduler$.submit',9,0,0)
f(17,68,9,2,'kyo/concurrent/scheduler/Worker.enqueue',9,0,0)
f(18,68,9,2,'kyo/concurrent/scheduler/Queue.offer',9,0,0)
f(19,68,9,2,'kyo/concurrent/scheduler/Queue.tryModify',9,0,0)
f(20,68,9,2,'scala/Function0.apply$mcZ$sp',9,0,0)
f(21,68,9,2,'kyo/concurrent/scheduler/Queue$$Lambda$54.0x0000000800d474b0.apply',9,0,0)
f(22,69,8,2,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1',8,0,0)
f(23,70,7,2,'kyo/concurrent/scheduler/Queue.items',7,0,0)
f(16,77,143,1,'kyo/concurrent/scheduler/Worker.enqueueLocal',9,0,0)
f(17,77,143,1,'kyo/concurrent/scheduler/Queue.offer',9,0,0)
f(18,77,3,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',3,0,0)
f(18,80,140,1,'kyo/concurrent/scheduler/Queue.tryModify',6,0,0)
f(19,80,6,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',6,0,0)
f(20,81,5,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',5,0,0)
f(19,86,134,1,'scala/Function0.apply$mcZ$sp')
f(20,86,134,1,'kyo/concurrent/scheduler/Queue$$Lambda$54.0x0000000800d474b0.apply')
f(21,86,134,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1')
f(22,86,134,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,88,26,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize',26,0,0)
f(24,88,26,2,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize',26,0,0)
f(25,88,26,2,'scala/collection/mutable/ArrayBuffer.array_$eq',26,0,0)
f(23,114,1,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_size0',1,0,0)
f(24,114,1,2,'scala/collection/mutable/ArrayBuffer.size0',1,0,0)
f(23,115,105,2,'scala/collection/mutable/PriorityQueue.fixUp',105,0,0)
f(24,142,16,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',16,0,0)
f(25,154,4,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',4,0,0)
f(24,158,58,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_swap',58,0,0)
f(25,208,8,2,'scala/collection/mutable/ArrayBuffer.array',8,0,0)
f(24,216,4,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',4,0,0)
f(13,220,2,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',2,0,0)
f(14,220,2,2,'kyo/core$internal$KyoCont.<init>',2,0,0)
f(15,220,2,2,'kyo/ios$KyoIO.value',2,0,0)
f(16,221,1,2,'kyo/ios$KyoIO.value',1,0,0)
f(10,222,9,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5',7,0,0)
f(11,222,9,2,'kyo/bench/ForkManyBench$$anon$6.<init>',7,0,0)
f(12,222,9,2,'kyo/core$internal$KyoCont.<init>',7,0,0)
f(13,228,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(13,229,1,6,'kyo/core$internal$KyoCont.value',0,1,0)
f(13,230,1,3,'vtable stub')
f(10,231,2,2,'kyo/concurrent/scheduler/IOTask.apply',2,0,0)
f(9,233,1,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(10,233,1,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(11,233,1,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$Promise$$anon$26$$_$loop$22')
f(12,233,1,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(13,233,1,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(14,233,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(15,233,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(16,233,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(17,233,1,1,'scala/runtime/function/JProcedure1.apply')
f(18,233,1,2,'scala/runtime/function/JProcedure1.apply',1,0,0)
f(19,233,1,2,'kyo/concurrent/scheduler/IOTask$$Lambda$66.0x0000000800d4ebe0.applyVoid',1,0,0)
f(20,233,1,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',1,0,0)
f(21,233,1,2,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1',1,0,0)
f(22,233,1,2,'kyo/concurrent/scheduler/IOTask$$Lambda$68.0x0000000800d4f4d0.apply',1,0,0)
f(23,233,1,2,'kyo/concurrent/scheduler/IOTask.$anonfun$1',1,0,0)
f(24,233,1,2,'kyo/bench/ForkManyBench$$anon$5.apply',1,0,0)
f(25,233,1,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$4',1,0,0)
f(26,233,1,2,'kyo/bench/ForkManyBench$$Lambda$64.0x0000000800d4e410.apply',1,0,0)
f(27,233,1,2,'kyo/bench/ForkManyBench.$anonfun$9',1,0,0)
f(28,233,1,2,'scala/runtime/BoxesRunTime.boxToInteger',1,0,0)
f(9,234,3,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',2,0,0)
f(9,237,2,2,'kyo/concurrent/scheduler/IOTask.finalize$1',2,0,0)
f(9,239,3,2,'kyo/concurrent/scheduler/IOTask.loop$8',3,0,0)
f(9,242,4,6,'kyo/core$internal$KyoCont.effect',0,4,0)
f(9,246,1,1,'kyo/ios$KyoIO.effect')
f(9,247,6,3,'vtable stub')
f(8,253,3,2,'scala/runtime/BoxesRunTime.equals',3,0,0)
f(9,253,3,2,'scala/runtime/BoxesRunTime.equals2',3,0,0)
f(7,256,27,1,'kyo/concurrent/scheduler/Queue.poll',4,0,0)
f(8,259,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(9,259,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(10,259,1,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d45000.<init>',1,0,0)
f(8,260,23,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,260,5,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',5,0,0)
f(10,260,5,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',5,0,0)
f(9,265,18,2,'kyo/concurrent/scheduler/Queue$$Lambda$63.0x0000000800d4ba90.apply',18,0,0)
f(10,266,17,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',17,0,0)
f(11,272,6,2,'kyo/concurrent/scheduler/Queue.isEmpty',6,0,0)
f(11,278,5,2,'scala/collection/mutable/PriorityQueue.dequeue',5,0,0)
f(7,283,1,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,283,1,1,'kyo/concurrent/scheduler/Worker.park')
f(9,283,1,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,283,1,1,'jdk/internal/misc/Unsafe.park')
f(11,283,1,3,'[unknown]')
f(12,283,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,283,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,283,1,5,'do_syscall_64')
f(15,283,1,5,'__x64_sys_futex')
f(16,283,1,5,'do_futex')
f(17,283,1,5,'futex_wait')
f(18,283,1,5,'__get_user_nocheck_4')
f(7,284,7,2,'kyo/concurrent/scheduler/Worker.stop$1',6,0,0)
f(8,286,5,2,'kyo/concurrent/scheduler/Scheduler$.stopWorker',5,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 928px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(58);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,14587,3,'all')
f(1,0,14584,1,'java/lang/Thread.run')
f(2,0,14584,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,14584,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,438,1,'java/util/concurrent/FutureTask.run')
f(5,0,438,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,438,1,'java/util/concurrent/FutureTask.run')
f(7,0,438,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,438,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,438,1,'java/lang/reflect/Method.invoke')
f(10,0,438,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,438,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,438,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,438,1,'kyo/bench/jmh_generated/ForkManyBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,437,1,'kyo/bench/jmh_generated/ForkManyBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,437,1,'kyo/bench/Bench.syncKyo')
f(16,0,178,1,'kyo/bench/Bench.runLoop$1')
f(17,0,66,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,66,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,66,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,66,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,33,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,33,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,32,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,32,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,32,1,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,33,33,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(17,66,112,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,66,112,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,66,112,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,66,112,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,66,77,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,66,77,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,66,77,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(24,66,77,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,66,1,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(25,67,39,2,'kyo.concurrent.scheduler.IOTask')
f(25,106,37,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,106,37,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,106,37,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(28,106,37,1,'kyo/concurrent/scheduler/Queue.offer')
f(29,106,37,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(30,106,37,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(31,106,37,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(32,106,37,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(33,106,37,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d476b8')
f(21,143,35,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,143,35,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c83b00.apply')
f(23,143,35,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,143,35,1,'kyo/concurrent/fibers$Fiber.join')
f(25,143,35,1,'kyo/concurrent/fibers$Fibers.get')
f(26,143,35,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,143,35,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(16,178,259,1,'kyo/bench/ForkManyBench.kyoBench')
f(17,178,42,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,178,42,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,178,42,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,178,42,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(21,178,42,2,'kyo.bench.ForkManyBench$$Lambda$37+0x0000000800c3f718')
f(17,220,122,1,'kyo/concurrent/fibers$Fibers.block')
f(18,220,3,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,220,3,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,220,3,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,220,3,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(22,220,3,2,'kyo.concurrent.fibers$Fibers$$Lambda$40+0x0000000800c81430')
f(18,223,41,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,223,41,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,264,41,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,264,41,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,305,37,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,305,37,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,342,95,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,342,45,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,342,45,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,342,45,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,342,45,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(22,342,45,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c83b00')
f(18,387,48,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,387,46,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,387,46,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,387,46,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,387,46,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c85068')
f(19,433,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,433,1,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(19,434,1,1,'kyo/locals$Locals$.save')
f(20,434,1,2,'kyo.locals$Locals$$anon$3')
f(18,435,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,435,2,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(14,437,1,1,'org/openjdk/jmh/results/ThroughputResult.<init>')
f(15,437,1,1,'org/openjdk/jmh/results/Result.of')
f(16,437,1,2,'org.openjdk.jmh.util.SingletonStatistics')
f(4,438,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f4b8.run')
f(5,438,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,438,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,438,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,438,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,438,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,438,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,438,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,448,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,448,1,2,'java.lang.String')
f(4,449,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1f6e0.run')
f(5,449,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,449,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,449,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,449,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,449,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,449,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$70+0x0000000800d4d800')
f(4,460,14124,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d243c0.run')
f(5,460,14124,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,460,14124,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,460,10,1,'java/util/concurrent/CopyOnWriteArrayList.add')
f(8,460,10,1,'java/util/Arrays.copyOf')
f(9,460,10,1,'java/util/Arrays.copyOf')
f(10,460,10,2,'java.lang.Object[]')
f(7,470,12612,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,470,12612,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,470,12607,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,470,10257,1,'kyo/bench/ForkManyBench$$anon$1.apply')
f(11,470,4144,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(12,470,4144,1,'kyo/bench/ForkManyBench$$Lambda$62.0x0000000800d4b520.apply')
f(13,470,4144,1,'kyo/bench/ForkManyBench.$anonfun$2')
f(14,470,4144,1,'kyo/bench/ForkManyBench.repeat$2')
f(15,470,1899,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4cc00.linkToTargetMethod')
f(16,470,1899,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c400.newInvokeSpecial')
f(17,470,1899,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,470,1899,2,'kyo.bench.ForkManyBench$$Lambda$62+0x0000000800d4b520')
f(15,2369,2245,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(16,2369,2245,2,'kyo.bench.ForkManyBench$$anon$1')
f(11,4614,6113,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,4614,6113,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,4614,6113,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(14,4614,6113,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,4614,931,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,5545,3878,2,'kyo.concurrent.scheduler.IOTask')
f(15,9423,1300,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,9423,1300,2,'kyo.concurrent.fibers$Fiber')
f(15,10723,4,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(16,10723,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(17,10723,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(18,10723,1,1,'kyo/concurrent/scheduler/Queue.offer')
f(19,10723,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,10723,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,10723,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,10723,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(23,10723,1,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d476b8')
f(16,10724,3,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(17,10724,3,1,'kyo/concurrent/scheduler/Queue.offer')
f(18,10724,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,10724,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,10724,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,10724,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(22,10724,1,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d476b8')
f(18,10725,2,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(19,10725,2,1,'scala/Function0.apply$mcZ$sp')
f(20,10725,2,1,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d476b8.apply')
f(21,10725,2,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1')
f(22,10725,2,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,10725,2,1,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize')
f(24,10725,2,1,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize')
f(25,10725,2,1,'scala/collection/mutable/ArrayBuffer$.scala$collection$mutable$ArrayBuffer$$ensureSize')
f(26,10725,1,2,'java.lang.Object[]')
f(26,10726,1,5,'java.lang.Object[]')
f(10,10727,2350,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5')
f(11,10727,2350,2,'kyo.bench.ForkManyBench$$anon$6')
f(9,13077,1,1,'kyo/bench/ForkManyBench$$anon$7.apply')
f(10,13077,1,1,'kyo/bench/ForkManyBench$$anon$4.apply')
f(11,13077,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$3')
f(12,13077,1,1,'kyo/bench/ForkManyBench$$Lambda$58.0x0000000800d4a4e0.apply')
f(13,13077,1,1,'kyo/bench/ForkManyBench.$anonfun$adapted$3')
f(14,13077,1,1,'kyo/bench/ForkManyBench.$anonfun$4')
f(15,13077,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$2')
f(16,13077,1,2,'kyo.bench.ForkManyBench$$anon$3')
f(9,13078,1,1,'kyo/bench/ForkManyBench$$anon$8.apply')
f(10,13078,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$7')
f(11,13078,1,1,'kyo/bench/ForkManyBench$$Lambda$57.0x0000000800d44a30.apply')
f(12,13078,1,1,'kyo/bench/ForkManyBench.$anonfun$3')
f(13,13078,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(14,13078,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(15,13078,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,13078,1,2,'kyo.bench.ForkManyBench$$Lambda$59+0x0000000800d4a8b0')
f(9,13079,2,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(10,13079,2,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(11,13079,2,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$Promise$$anon$26$$_$loop$22')
f(12,13079,2,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(13,13079,2,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(14,13079,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(15,13079,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(16,13079,2,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(17,13079,2,1,'scala/runtime/function/JProcedure1.apply')
f(18,13079,2,1,'scala/runtime/function/JProcedure1.apply')
f(19,13079,2,1,'kyo/concurrent/scheduler/IOTask$$Lambda$67.0x0000000800d4ede8.applyVoid')
f(20,13079,2,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(21,13079,2,1,'kyo/concurrent/scheduler/IOPromise.become')
f(22,13079,2,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(23,13079,2,1,'kyo/concurrent/scheduler/IOPromise$Linked$.apply')
f(24,13079,2,2,'kyo.concurrent.scheduler.IOPromise$Linked')
f(9,13081,1,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,13081,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,13081,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,13081,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,13081,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(14,13081,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$67+0x0000000800d4ede8')
f(7,13082,1499,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,13082,1499,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,13082,1499,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,13082,1499,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,13082,1499,2,'kyo.concurrent.scheduler.Queue$$Lambda$56+0x0000000800d45230')
f(7,14581,3,1,'kyo/concurrent/scheduler/Worker.flush')
f(8,14581,3,1,'kyo/concurrent/scheduler/Queue.drain')
f(9,14581,3,1,'kyo/concurrent/scheduler/Queue.modify')
f(10,14581,3,1,'kyo/concurrent/scheduler/Queue$$Lambda$77.0x0000000800d56a00.apply')
f(11,14581,3,1,'kyo/concurrent/scheduler/Queue.drain$$anonfun$adapted$1')
f(12,14581,3,1,'kyo/concurrent/scheduler/Queue.drain$$anonfun$1')
f(13,14581,3,1,'scala/collection/AbstractIterable.foreach')
f(14,14581,3,1,'scala/collection/IterableOnceOps.foreach$')
f(15,14581,3,1,'scala/collection/IterableOnceOps.foreach')
f(16,14581,3,1,'scala/collection/mutable/PriorityQueue.iterator')
f(17,14581,3,1,'scala/collection/mutable/ArrayBuffer.iterator')
f(18,14581,3,1,'scala/collection/IndexedSeqOps.iterator$')
f(19,14581,3,1,'scala/collection/IndexedSeqOps.iterator')
f(20,14581,3,1,'scala/collection/mutable/ArrayBuffer.view')
f(21,14581,3,1,'scala/collection/mutable/ArrayBuffer.view')
f(22,14581,3,1,'java/lang/ClassLoader.loadClass')
f(23,14581,3,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(24,14581,3,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(25,14581,3,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(26,14581,3,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(27,14581,3,1,'jdk/internal/loader/BuiltinClassLoader.defineClass')
f(28,14581,3,1,'java/security/SecureClassLoader.defineClass')
f(29,14581,3,1,'java/lang/ClassLoader.defineClass')
f(30,14581,3,1,'java/lang/ClassLoader.defineClass1')
f(31,14581,3,1,'java/lang/ClassLoader.loadClass')
f(32,14581,3,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(33,14581,3,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(34,14581,3,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(35,14581,3,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(36,14581,3,1,'jdk/internal/loader/BuiltinClassLoader.defineClass')
f(37,14581,3,1,'java/security/SecureClassLoader.defineClass')
f(38,14581,3,1,'java/lang/ClassLoader.defineClass')
f(39,14581,3,1,'java/lang/ClassLoader.defineClass1')
f(40,14581,3,1,'java/lang/ClassLoader.loadClass')
f(41,14581,3,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(42,14581,3,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(43,14581,3,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(44,14581,3,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(45,14581,3,1,'jdk/internal/loader/BuiltinClassLoader.defineClass')
f(46,14581,1,1,'java/security/SecureClassLoader.defineClass')
f(47,14581,1,1,'java/lang/ClassLoader.defineClass')
f(48,14581,1,1,'java/lang/ClassLoader.defineClass1')
f(49,14581,1,1,'java/lang/ClassLoader.loadClass')
f(50,14581,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(51,14581,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(52,14581,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(53,14581,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(54,14581,1,1,'jdk/internal/loader/BuiltinClassLoader.defineClass')
f(55,14581,1,1,'jdk/internal/loader/Resource.getBytes')
f(56,14581,1,1,'java/util/Arrays.copyOf')
f(57,14581,1,2,'byte[]')
f(46,14582,2,1,'jdk/internal/loader/Resource.getBytes')
f(47,14582,2,1,'java/util/Arrays.copyOf')
f(48,14582,2,5,'byte[]')
f(1,14584,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,14584,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,14584,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,14584,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,14584,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,14584,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,14584,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,14584,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,14584,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,14584,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,14584,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,14584,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,14584,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 896px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(56);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,310,3,'all')
f(1,0,16,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,16,3,'thread_native_entry(Thread*)')
f(3,0,16,4,'Thread::call_run()')
f(4,0,16,4,'JavaThread::thread_main_inner()')
f(5,0,16,4,'CompileBroker::compiler_thread_loop()')
f(6,0,16,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,15,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,15,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,8,4,'Compile::Code_Gen()')
f(10,0,1,4,'Matcher::match()')
f(11,0,1,4,'Matcher::xform(Node*, int)')
f(10,1,4,4,'PhaseCFG::do_global_code_motion()')
f(11,1,4,4,'PhaseCFG::global_code_motion()')
f(12,1,2,4,'PhaseIFG::init(unsigned int)')
f(13,1,2,4,'IndexSet::initialize(unsigned int)')
f(12,3,1,4,'PhaseLive::compute(unsigned int)')
f(12,4,1,4,'membar_acquireNode::bottom_type() const')
f(10,5,3,4,'PhaseChaitin::Register_Allocate()')
f(11,5,1,4,'PhaseChaitin::Split(unsigned int, ResourceArea*)')
f(11,6,2,4,'PhaseChaitin::post_allocate_copy_removal()')
f(12,6,2,4,'PhaseChaitin::elide_copy(Node*, int, Block*, Node_List&, Node_List&, bool)')
f(9,8,3,4,'Compile::Optimize()')
f(10,8,1,4,'ConnectionGraph::do_analysis(Compile*, PhaseIterGVN*)')
f(11,8,1,4,'ConnectionGraph::compute_escape()')
f(12,8,1,4,'ConnectionGraph::add_node_to_connection_graph(Node*, Unique_Node_List*)')
f(10,9,1,4,'PhaseIdealLoop::optimize(PhaseIterGVN&, LoopOptsMode)')
f(11,9,1,4,'PhaseIdealLoop::build_and_optimize(LoopOptsMode)')
f(12,9,1,4,'PhaseIdealLoop::build_loop_late(VectorSet&, Node_List&, Node_Stack&)')
f(10,10,1,4,'PhaseIterGVN::PhaseIterGVN(PhaseGVN*)')
f(11,10,1,4,'PhaseIterGVN::add_users_to_worklist(Node*)')
f(9,11,4,4,'ParseGenerator::generate(JVMState*)')
f(10,11,4,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(11,11,4,4,'Parse::do_all_blocks()')
f(12,11,4,4,'Parse::do_one_block()')
f(13,11,3,4,'Parse::do_call()')
f(14,11,1,4,'ParseGenerator::generate(JVMState*)')
f(15,11,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(16,11,1,4,'Parse::do_all_blocks()')
f(17,11,1,4,'Parse::do_one_block()')
f(18,11,1,4,'Parse::do_call()')
f(19,11,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(20,11,1,4,'ParseGenerator::generate(JVMState*)')
f(21,11,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(22,11,1,4,'Parse::do_all_blocks()')
f(23,11,1,4,'Parse::do_one_block()')
f(24,11,1,4,'Parse::do_call()')
f(25,11,1,4,'Compile::call_generator(ciMethod*, int, bool, JVMState*, bool, float, ciKlass*, bool)')
f(26,11,1,4,'InlineTree::ok_to_inline(ciMethod*, JVMState*, ciCallProfile&, bool&)')
f(27,11,1,4,'ciMethod::get_flow_analysis()')
f(28,11,1,4,'ciTypeFlow::do_flow()')
f(29,11,1,4,'ciTypeFlow::flow_types()')
f(30,11,1,4,'ciTypeFlow::df_flow_types(ciTypeFlow::Block*, bool, ciTypeFlow::StateVector*, ciTypeFlow::JsrSet*)')
f(31,11,1,4,'ciTypeFlow::flow_block(ciTypeFlow::Block*, ciTypeFlow::StateVector*, ciTypeFlow::JsrSet*)')
f(32,11,1,4,'ciTypeFlow::StateVector::apply_one_bytecode(ciBytecodeStream*)')
f(33,11,1,4,'ciTypeFlow::StateVector::do_invoke(ciBytecodeStream*, bool)')
f(14,12,2,4,'PredictedCallGenerator::generate(JVMState*)')
f(15,12,1,4,'ParseGenerator::generate(JVMState*)')
f(16,12,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(17,12,1,4,'Parse::do_all_blocks()')
f(18,12,1,4,'Parse::do_one_block()')
f(19,12,1,4,'Parse::do_call()')
f(20,12,1,4,'ParseGenerator::generate(JVMState*)')
f(21,12,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(22,12,1,4,'Parse::do_all_blocks()')
f(23,12,1,4,'Parse::do_one_block()')
f(24,12,1,4,'Parse::do_call()')
f(25,12,1,4,'ParseGenerator::generate(JVMState*)')
f(26,12,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(27,12,1,4,'Parse::do_all_blocks()')
f(28,12,1,4,'Parse::do_one_block()')
f(29,12,1,4,'Parse::do_call()')
f(30,12,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(31,12,1,4,'ParseGenerator::generate(JVMState*)')
f(32,12,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(33,12,1,4,'Parse::do_all_blocks()')
f(34,12,1,4,'Parse::do_one_block()')
f(35,12,1,4,'Parse::do_call()')
f(36,12,1,4,'ParseGenerator::generate(JVMState*)')
f(37,12,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(38,12,1,4,'Parse::do_all_blocks()')
f(39,12,1,4,'Parse::do_one_block()')
f(40,12,1,4,'Parse::do_call()')
f(41,12,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(42,12,1,4,'ParseGenerator::generate(JVMState*)')
f(43,12,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(44,12,1,4,'Parse::do_all_blocks()')
f(45,12,1,4,'Parse::do_one_block()')
f(46,12,1,4,'Parse::do_call()')
f(47,12,1,4,'ParseGenerator::generate(JVMState*)')
f(48,12,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(49,12,1,4,'Parse::do_all_blocks()')
f(50,12,1,4,'Parse::do_one_block()')
f(51,12,1,4,'Parse::do_call()')
f(52,12,1,4,'GraphKit::kill_dead_locals()')
f(53,12,1,4,'ciMethod::liveness_at_bci(int)')
f(54,12,1,4,'MethodLiveness::compute_liveness()')
f(55,12,1,4,'MethodLiveness::BasicBlock::propagate(MethodLiveness*)')
f(15,13,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(16,13,1,4,'ParseGenerator::generate(JVMState*)')
f(17,13,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(18,13,1,4,'Parse::build_exits()')
f(19,13,1,4,'GraphKit::clone_map()')
f(20,13,1,4,'Node::clone() const')
f(21,13,1,4,'Node::out_grow(unsigned int)')
f(22,13,1,3,'memcpy@plt')
f(13,14,1,4,'Parse::do_ifnull(BoolTest::mask, Node*)')
f(14,14,1,4,'Node::raise_bottom_type(Type const*)')
f(7,15,1,4,'Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,15,1,4,'Compilation::Compilation(AbstractCompiler*, ciEnv*, ciMethod*, int, BufferBlob*, bool, DirectiveSet*)')
f(9,15,1,4,'Compilation::compile_method()')
f(10,15,1,4,'Compilation::compile_java_method()')
f(11,15,1,4,'Compilation::emit_lir()')
f(12,15,1,4,'LinearScan::do_linear_scan()')
f(13,15,1,4,'LinearScan::build_intervals()')
f(1,16,2,3,'[unknown_Java]')
f(2,16,1,1,'kyo/bench/ForkManyBench$$anon$1.apply')
f(2,17,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(1,18,292,1,'java/lang/Thread.run')
f(2,18,292,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,18,292,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,18,1,1,'java/util/concurrent/FutureTask.run')
f(5,18,1,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,18,1,1,'java/util/concurrent/FutureTask.run')
f(7,18,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,18,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,18,1,1,'java/lang/reflect/Method.invoke')
f(10,18,1,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,18,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,18,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,18,1,1,'kyo/bench/jmh_generated/ForkManyBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,18,1,1,'kyo/bench/jmh_generated/ForkManyBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,18,1,1,'kyo/bench/Bench.syncKyo')
f(16,18,1,1,'kyo/bench/Bench.runLoop$1')
f(17,18,1,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,18,1,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,18,1,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,18,1,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,18,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,18,1,2,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',1,0,0)
f(23,18,1,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply',1,0,0)
f(24,18,1,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',1,0,0)
f(4,19,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f4b8.run')
f(5,19,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,19,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,19,1,1,'java/lang/Thread.sleep')
f(8,19,1,3,'JVM_Sleep')
f(4,20,290,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d243c0.run')
f(5,20,290,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,20,290,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,28,225,1,'kyo/concurrent/scheduler/IOTask.run',13,0,0)
f(8,29,224,1,'kyo/concurrent/scheduler/IOTask.eval',12,0,0)
f(9,45,2,1,'kyo/bench/ForkManyBench$$anon$3.apply')
f(10,45,2,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$2',2,0,0)
f(11,45,2,2,'kyo/bench/ForkManyBench$$Lambda$60.0x0000000800d4ae90.apply',2,0,0)
f(12,45,2,2,'kyo/bench/ForkManyBench.$anonfun$adapted$2',2,0,0)
f(13,45,2,2,'kyo/bench/ForkManyBench.$anonfun$5',2,0,0)
f(14,45,2,2,'scala/runtime/BoxesRunTime.boxToBoolean',2,0,0)
f(9,47,192,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,53,175,1,'kyo/bench/ForkManyBench$$anon$1.apply')
f(11,53,175,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',43,0,0)
f(12,64,161,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',29,0,0)
f(13,73,143,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply',12,0,0)
f(14,80,136,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',5,0,0)
f(15,81,1,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',1,0,0)
f(15,82,3,2,'kyo/concurrent/scheduler/IOTask.<init>',3,0,0)
f(16,84,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(17,84,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(15,85,131,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(16,85,131,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(17,85,131,1,'kyo/concurrent/scheduler/Queue.offer')
f(18,85,131,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(19,85,131,1,'scala/Function0.apply$mcZ$sp')
f(20,85,131,1,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d476b8.apply')
f(21,85,131,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1')
f(22,85,131,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,87,32,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize',32,0,0)
f(24,87,32,2,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize',32,0,0)
f(25,87,1,2,'scala/collection/mutable/ArrayBuffer.array',1,0,0)
f(25,88,31,2,'scala/collection/mutable/ArrayBuffer.array_$eq',31,0,0)
f(23,119,96,2,'scala/collection/mutable/PriorityQueue.fixUp',96,0,0)
f(24,141,13,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',13,0,0)
f(24,154,59,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_swap',59,0,0)
f(25,196,17,2,'scala/collection/mutable/ArrayBuffer.array',17,0,0)
f(24,213,1,2,'scala/collection/mutable/PriorityQueue.ord',1,0,0)
f(24,214,1,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',1,0,0)
f(23,215,1,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',1,0,0)
f(13,216,9,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',8,0,0)
f(14,216,9,2,'kyo/core$internal$KyoCont.<init>',8,0,0)
f(15,218,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(16,218,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(17,218,1,4,'MemAllocator::allocate() const')
f(18,218,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(15,219,6,2,'kyo/ios$KyoIO.effect',6,0,0)
f(16,219,6,2,'kyo/ios$KyoIO.effect',6,0,0)
f(12,225,3,2,'kyo/concurrent/scheduler/IOTask.apply',3,0,0)
f(10,228,11,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5',5,0,0)
f(11,228,11,2,'kyo/bench/ForkManyBench$$anon$6.<init>',5,0,0)
f(12,228,11,2,'kyo/core$internal$KyoCont.<init>',5,0,0)
f(13,232,2,6,'kyo/core$internal$KyoCont.effect',0,2,0)
f(13,234,4,6,'kyo/core$internal$KyoCont.value',0,4,0)
f(13,238,1,3,'vtable stub')
f(9,239,1,1,'kyo/bench/ForkManyBench$$anon$7.apply')
f(10,239,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$6')
f(11,239,1,2,'kyo/bench/ForkManyBench$$Lambda$59.0x0000000800d4a8b0.apply',1,0,0)
f(12,239,1,2,'kyo/bench/ForkManyBench.$anonfun$6',1,0,0)
f(13,239,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(14,239,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(15,239,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(9,240,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,240,1,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',1,0,0)
f(9,241,6,1,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',1,0,0)
f(9,247,1,2,'kyo/concurrent/scheduler/IOTask.loop$8',1,0,0)
f(10,247,1,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',1,0,0)
f(9,248,3,6,'kyo/core$internal$KyoCont.effect',0,3,0)
f(9,251,1,1,'kyo/ios$KyoIO.effect')
f(9,252,1,3,'vtable stub')
f(7,253,38,1,'kyo/concurrent/scheduler/Queue.poll',1,0,0)
f(8,256,35,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,257,8,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',8,0,0)
f(10,257,8,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',8,0,0)
f(11,261,4,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',4,0,0)
f(9,265,26,2,'kyo/concurrent/scheduler/Queue$$Lambda$64.0x0000000800d4bcc0.apply',26,0,0)
f(10,267,24,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',24,0,0)
f(11,272,8,2,'kyo/concurrent/scheduler/Queue.isEmpty',8,0,0)
f(11,280,11,2,'scala/collection/mutable/PriorityQueue.dequeue',11,0,0)
f(12,287,4,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',4,0,0)
f(7,291,9,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,291,1,1,'java/util/AbstractQueue.add')
f(9,291,1,6,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.offer',0,1,0)
f(8,292,8,1,'kyo/concurrent/scheduler/Worker.park')
f(9,292,8,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,292,8,1,'jdk/internal/misc/Unsafe.park')
f(11,292,1,3,'Unsafe_Park')
f(12,292,1,3,'clock_gettime')
f(13,292,1,3,'[vdso]')
f(11,293,7,3,'[unknown]')
f(12,293,7,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,293,7,5,'entry_SYSCALL_64_after_hwframe')
f(14,293,7,5,'do_syscall_64')
f(15,293,7,5,'__x64_sys_futex')
f(16,293,7,5,'do_futex')
f(17,293,7,5,'futex_wait')
f(18,293,6,5,'futex_wait_queue_me')
f(19,293,6,5,'schedule')
f(20,293,6,5,'__schedule')
f(21,293,6,5,'finish_task_switch.isra.0')
f(18,299,1,5,'hrtimer_cancel')
f(19,299,1,5,'_raw_spin_unlock_irqrestore')
f(7,300,3,1,'kyo/concurrent/scheduler/Worker.flush')
f(8,300,3,1,'kyo/concurrent/scheduler/Queue.drain')
f(9,300,3,1,'kyo/concurrent/scheduler/Queue.modify')
f(10,300,3,1,'kyo/concurrent/scheduler/Queue$$Lambda$76.0x0000000800d54980.apply')
f(11,300,3,1,'kyo/concurrent/scheduler/Queue.drain$$anonfun$adapted$1')
f(12,300,3,1,'kyo/concurrent/scheduler/Queue.drain$$anonfun$1')
f(13,300,3,1,'scala/collection/AbstractIterable.foreach')
f(14,300,3,1,'scala/collection/IterableOnceOps.foreach$')
f(15,300,3,1,'scala/collection/IterableOnceOps.foreach')
f(16,300,1,1,'scala/collection/IndexedSeqView$IndexedSeqViewIterator.next')
f(17,300,1,1,'scala/collection/mutable/ArrayBufferView.apply')
f(18,300,1,6,'scala/collection/mutable/ArrayBuffer.apply',0,1,0)
f(16,301,2,1,'scala/runtime/function/JProcedure1.apply')
f(17,301,2,1,'scala/runtime/function/JProcedure1.apply')
f(18,301,2,1,'kyo/concurrent/scheduler/Worker$$Lambda$75.0x0000000800d54580.applyVoid')
f(19,301,2,1,'kyo/concurrent/scheduler/Worker.flush$$anonfun$1')
f(20,301,2,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(21,301,2,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(22,301,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(23,301,2,1,'jdk/internal/misc/Unsafe.unpark')
f(24,301,2,3,'pthread_cond_signal')
f(25,301,2,5,'entry_SYSCALL_64_after_hwframe')
f(26,301,2,5,'do_syscall_64')
f(27,301,2,5,'__x64_sys_futex')
f(28,301,2,5,'do_futex')
f(29,301,2,5,'futex_wake')
f(30,301,2,5,'wake_up_q')
f(31,301,2,5,'_raw_spin_unlock_irqrestore')
f(7,303,7,2,'kyo/concurrent/scheduler/Worker.stop$1',5,0,0)
f(8,306,4,2,'kyo/concurrent/scheduler/Scheduler$.stopWorker',3,0,0)
f(9,306,4,2,'java/util/concurrent/atomic/AtomicInteger.get',3,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 576px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(36);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,10717,3,'all')
f(1,0,10714,1,'java/lang/Thread.run')
f(2,0,10714,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,10714,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,2177,1,'java/util/concurrent/FutureTask.run')
f(5,0,2177,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,2177,1,'java/util/concurrent/FutureTask.run')
f(7,0,2177,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,2177,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,2177,1,'java/lang/reflect/Method.invoke')
f(10,0,2177,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,2177,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,2177,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,2177,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,2176,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,2176,1,'kyo/bench/Bench.forkKyo')
f(16,0,170,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,170,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,170,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,170,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3e9f8')
f(16,170,96,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,170,96,2,'kyo.bench.Bench$$anon$1')
f(16,266,1477,1,'kyo/bench/Bench.runLoop$2')
f(17,266,728,1,'kyo/bench/Bench$$anon$1.apply')
f(18,266,46,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,266,46,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c82da8.apply')
f(20,266,46,1,'kyo/bench/Bench.$anonfun$2')
f(21,266,46,1,'kyo/concurrent/fibers$Fiber.block')
f(22,266,46,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,312,682,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,312,682,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,312,682,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(21,312,682,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,312,85,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,397,403,2,'kyo.concurrent.scheduler.IOTask')
f(22,800,194,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,800,194,2,'kyo.concurrent.fibers$Fiber')
f(17,994,749,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,994,749,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,994,749,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,994,749,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,994,426,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,994,426,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,994,114,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,1108,312,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,1108,312,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,1420,112,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,1532,211,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,1532,211,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,1532,211,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,1743,433,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,1743,110,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1743,110,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1743,110,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1743,110,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(17,1853,210,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,1853,210,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,2063,113,1,'kyo/locals$Locals$.save')
f(18,2063,113,2,'kyo.locals$Locals$$anon$3')
f(14,2176,1,1,'org/openjdk/jmh/results/BenchmarkTaskResult.add')
f(15,2176,1,1,'java/util/ArrayList.add')
f(16,2176,1,1,'java/util/ArrayList.add')
f(17,2176,1,1,'java/util/ArrayList.grow')
f(18,2176,1,1,'java/util/ArrayList.grow')
f(19,2176,1,2,'java.lang.Object[]')
f(4,2177,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,2177,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,2177,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,2177,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,2177,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,2177,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,2177,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,2177,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,2187,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,2187,1,2,'java.lang.String')
f(4,2188,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e5f8.run')
f(5,2188,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,2188,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,2188,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,2188,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,2188,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,2188,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,2188,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$68+0x0000000800d4bc48')
f(4,2199,8515,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,2199,8515,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,2199,8515,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,2199,8084,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,2199,8084,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,2199,4040,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,2199,1151,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,2199,228,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(12,2199,228,1,'kyo/bench/InterruptBench$$Lambda$57.0x0000000800d45230.apply')
f(13,2199,228,1,'kyo/bench/InterruptBench.$anonfun$2')
f(14,2199,228,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(15,2199,228,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(16,2199,228,2,'kyo.concurrent.fibers$Fiber$$anon$11')
f(11,2427,923,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,2427,923,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,2427,923,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(14,2427,923,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,2427,192,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,2619,535,2,'kyo.concurrent.scheduler.IOTask')
f(15,3154,196,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,3154,196,2,'kyo.concurrent.fibers$Fiber')
f(10,3350,1085,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(11,3350,1085,2,'kyo.bench.InterruptBench$$anon$3')
f(10,4435,648,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,4435,440,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(12,4435,440,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$61.0x0000000800d49710.apply')
f(13,4435,440,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$_$$anonfun$adapted$1')
f(14,4435,440,1,'kyo/concurrent/fibers$.$anonfun$3')
f(15,4435,229,2,'kyo.concurrent.fibers$Fiber')
f(15,4664,211,1,'kyo/concurrent/fibers$Fiber.join')
f(16,4664,211,1,'kyo/concurrent/fibers$Fibers.get')
f(17,4664,211,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(18,4664,211,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(11,4875,208,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(12,4875,208,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(13,4875,208,1,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10')
f(14,4875,208,2,'kyo.concurrent.fibers$Fiber$$anon$13$$anon$14')
f(10,5083,1156,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,5083,1156,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(12,5083,328,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(13,5083,328,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(14,5083,328,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(15,5083,173,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$60+0x0000000800d49200')
f(15,5256,155,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$61+0x0000000800d49710')
f(12,5411,270,2,'kyo.concurrent.scheduler.IOPromise')
f(12,5681,313,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(13,5681,313,2,'kyo.concurrent.fibers$$anon$12')
f(12,5994,245,1,'kyo/concurrent/fibers$Fiber.interrupt')
f(13,5994,245,2,'kyo.concurrent.fibers$Fiber$$anon$13')
f(9,6239,3,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,6239,3,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,6239,3,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e9f8.apply')
f(12,6239,3,1,'kyo/bench/Bench.$anonfun$1')
f(13,6239,3,1,'kyo/bench/InterruptBench.kyoBenchFiber')
f(14,6239,3,1,'kyo/bench/InterruptBench.iterate$2')
f(15,6239,1,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(16,6239,1,2,'kyo.bench.InterruptBench$$anon$2')
f(15,6240,2,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(16,6240,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,6240,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,6240,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,6240,1,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(16,6241,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(17,6241,1,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(9,6242,3059,1,'kyo/concurrent/scheduler/IOTask.finalize$1')
f(10,6242,3059,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$60.0x0000000800d49200.apply$mcV$sp')
f(11,6242,3059,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1')
f(12,6242,3059,1,'kyo/concurrent/fibers$.loop$9')
f(13,6242,3059,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(14,6242,3059,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(15,6242,3059,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,6242,3059,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,6242,3059,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,6242,3059,1,'scala/runtime/function/JProcedure1.apply')
f(19,6242,3059,1,'scala/runtime/function/JProcedure1.apply')
f(20,6242,3059,1,'kyo/concurrent/scheduler/IOTask$$Lambda$66.0x0000000800d4b470.applyVoid')
f(21,6242,3059,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(22,6242,505,2,'kyo.concurrent.scheduler.IOTask')
f(22,6747,535,1,'kyo/concurrent/scheduler/IOPromise.become')
f(23,6747,535,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(24,6747,196,1,'kyo/concurrent/scheduler/IOPromise$Linked$.apply')
f(25,6747,196,2,'kyo.concurrent.scheduler.IOPromise$Linked')
f(24,6943,339,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(25,6943,339,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(26,6943,339,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(27,6943,339,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(22,7282,2019,1,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1')
f(23,7282,2019,1,'kyo/concurrent/scheduler/IOTask$$Lambda$67.0x0000000800d4b878.apply')
f(24,7282,2019,1,'kyo/concurrent/scheduler/IOTask.$anonfun$1')
f(25,7282,2019,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(26,7282,2019,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(27,7282,2019,1,'kyo/bench/InterruptBench$$Lambda$58.0x0000000800d44800.apply')
f(28,7282,2019,1,'kyo/bench/InterruptBench.$anonfun$adapted$1')
f(29,7282,2019,1,'kyo/bench/InterruptBench.$anonfun$3')
f(30,7282,2019,1,'kyo/bench/InterruptBench.iterate$2')
f(31,7282,413,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(32,7282,209,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(33,7282,209,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,7282,209,2,'kyo.bench.InterruptBench$$Lambda$56+0x0000000800d47a98')
f(32,7491,204,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d44400.newInvokeSpecial')
f(33,7491,204,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,7491,204,2,'kyo.bench.InterruptBench$$Lambda$58+0x0000000800d44800')
f(31,7695,403,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(32,7695,403,2,'kyo.bench.InterruptBench$$anon$2')
f(31,8098,408,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(32,8098,408,2,'kyo.bench.InterruptBench$$anon$3')
f(31,8506,795,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(32,8506,231,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(33,8506,231,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(34,8506,231,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(35,8506,231,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(32,8737,353,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(33,8737,353,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(32,9090,211,1,'kyo/locals$Locals$.save')
f(33,9090,211,2,'kyo.locals$Locals$$anon$3')
f(9,9301,481,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,9301,188,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,9301,188,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,9301,188,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,9301,188,2,'kyo.concurrent.scheduler.IOTask$$Lambda$62+0x0000000800d4a4f8')
f(10,9489,293,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,9489,293,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(9,9782,501,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,9782,236,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,9782,236,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,9782,236,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,9782,236,2,'kyo.concurrent.scheduler.IOTask$$Lambda$66+0x0000000800d4b470')
f(10,10018,265,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,10018,265,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,10283,430,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,10283,430,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,10283,430,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,10283,430,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,10283,430,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d47148')
f(7,10713,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,10713,1,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,10713,1,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,10713,1,1,'scala/runtime/ObjectRef.create')
f(11,10713,1,2,'scala.runtime.ObjectRef')
f(1,10714,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,10714,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,10714,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,10714,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,10714,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,10714,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,10714,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,10714,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,10714,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,10714,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,10714,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,10714,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,10714,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 576px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(36);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,288,3,'all')
f(1,0,4,3,'[unknown_Java]')
f(2,0,1,1,'java/lang/Object.equals')
f(2,1,3,1,'kyo/concurrent/scheduler/IOPromise.onComplete')
f(1,4,284,1,'java/lang/Thread.run')
f(2,4,284,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,4,284,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,4,6,1,'java/util/concurrent/FutureTask.run')
f(5,4,6,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,4,6,1,'java/util/concurrent/FutureTask.run')
f(7,4,6,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,4,6,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,4,6,1,'java/lang/reflect/Method.invoke')
f(10,4,6,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,4,6,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,4,6,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,4,6,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,4,6,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,4,6,1,'kyo/bench/Bench.forkKyo')
f(16,4,6,1,'kyo/bench/Bench.runLoop$2')
f(17,4,2,1,'kyo/bench/Bench$$anon$1.apply')
f(18,4,2,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,4,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,4,2,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(21,4,2,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,4,2,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,4,2,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,4,2,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,4,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,4,2,1,'jdk/internal/misc/Unsafe.unpark')
f(27,4,2,3,'pthread_cond_signal')
f(28,5,1,5,'entry_SYSCALL_64_after_hwframe')
f(29,5,1,5,'do_syscall_64')
f(30,5,1,5,'__x64_sys_futex')
f(31,5,1,5,'do_futex')
f(32,5,1,5,'futex_wake')
f(33,5,1,5,'wake_up_q')
f(34,5,1,5,'_raw_spin_unlock_irqrestore')
f(17,6,4,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,6,4,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,6,4,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,6,4,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,6,4,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,6,4,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,7,1,2,'java/util/concurrent/locks/AbstractQueuedSynchronizer$Node.clearStatus',1,0,0)
f(23,8,2,1,'java/util/concurrent/locks/LockSupport.park')
f(24,8,2,1,'jdk/internal/misc/Unsafe.park')
f(25,8,2,3,'[unknown]')
f(26,8,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,8,2,5,'entry_SYSCALL_64_after_hwframe')
f(28,8,2,5,'do_syscall_64')
f(29,8,2,5,'__x64_sys_futex')
f(30,8,2,5,'do_futex')
f(31,8,2,5,'futex_wait')
f(32,8,2,5,'futex_wait_queue_me')
f(33,8,2,5,'schedule')
f(34,8,2,5,'__schedule')
f(35,8,2,5,'finish_task_switch.isra.0')
f(4,10,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,10,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,10,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,10,1,1,'java/lang/Thread.sleep')
f(8,10,1,3,'[unknown]')
f(9,10,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,10,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,10,1,5,'do_syscall_64')
f(12,10,1,5,'__x64_sys_futex')
f(13,10,1,5,'do_futex')
f(14,10,1,5,'futex_wait')
f(15,10,1,5,'futex_wait_queue_me')
f(16,10,1,5,'schedule')
f(17,10,1,5,'__schedule')
f(18,10,1,5,'finish_task_switch.isra.0')
f(4,11,277,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,11,277,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,11,277,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,20,230,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,22,3,2,'kyo/concurrent/scheduler/IOTask.curr',3,0,0)
f(8,25,225,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,33,106,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,37,37,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,38,1,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1',1,0,0)
f(12,38,1,2,'kyo/bench/InterruptBench$$Lambda$57.0x0000000800d45950.apply',1,0,0)
f(13,38,1,2,'kyo/bench/InterruptBench.$anonfun$2',1,0,0)
f(14,38,1,2,'kyo/concurrent/fibers$Fiber.interruptAwait',1,0,0)
f(15,38,1,2,'kyo/concurrent/fibers$Fiber.interruptAwait',1,0,0)
f(11,39,35,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',1,0,0)
f(12,40,34,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,41,23,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply',23,0,0)
f(14,41,23,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',23,0,0)
f(15,45,3,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',3,0,0)
f(15,48,16,2,'kyo/concurrent/scheduler/IOTask.<init>',16,0,0)
f(16,60,4,2,'kyo/concurrent/scheduler/IOPromise.<init>',4,0,0)
f(17,60,4,2,'kyo/concurrent/scheduler/IOPromise.<init>',4,0,0)
f(18,62,2,2,'java/util/concurrent/atomic/AtomicReference.<init>',2,0,0)
f(13,64,10,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',10,0,0)
f(14,72,2,2,'kyo/core$internal$KyoCont.<init>',2,0,0)
f(10,74,29,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',18,0,0)
f(11,80,23,2,'kyo/bench/InterruptBench$$anon$3.<init>',12,0,0)
f(12,81,22,2,'kyo/core$internal$KyoCont.<init>',11,0,0)
f(13,88,2,6,'kyo/core$internal$KyoCont.effect',0,2,0)
f(13,90,2,6,'kyo/core$internal$KyoCont.value',0,2,0)
f(13,92,1,6,'kyo/core$internal$KyoRoot.effect',0,1,0)
f(13,93,2,6,'kyo/core$internal$KyoRoot.value',0,2,0)
f(13,95,2,1,'kyo/ios$KyoIO.effect')
f(13,97,2,1,'kyo/ios$KyoIO.value')
f(13,99,4,3,'vtable stub')
f(10,103,13,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,104,3,2,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1',3,0,0)
f(12,104,3,2,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$61.0x0000000800d49660.apply',3,0,0)
f(13,104,3,2,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$_$$anonfun$adapted$1',3,0,0)
f(14,104,3,2,'kyo/concurrent/fibers$.$anonfun$3',3,0,0)
f(15,104,3,2,'kyo/concurrent/fibers$Fiber.join',3,0,0)
f(16,104,1,2,'kyo/concurrent/fibers$Fiber.state',1,0,0)
f(16,105,2,2,'kyo/concurrent/fibers$Fibers.get',2,0,0)
f(17,105,2,2,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1',2,0,0)
f(18,105,2,2,'kyo/concurrent/fibers$Fibers$$anon$30.<init>',2,0,0)
f(19,106,1,2,'kyo/core$internal$KyoRoot.<init>',1,0,0)
f(11,107,9,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',9,0,0)
f(12,107,9,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',9,0,0)
f(13,108,8,2,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10',8,0,0)
f(14,108,8,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',8,0,0)
f(15,108,8,2,'kyo/concurrent/scheduler/IOPromise.complete',8,0,0)
f(16,108,6,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',6,0,0)
f(17,108,6,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',6,0,0)
f(18,108,6,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',6,0,0)
f(16,114,2,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',2,0,0)
f(17,114,2,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',2,0,0)
f(10,116,23,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,116,23,2,'kyo/concurrent/fibers$Fiber$$anon$11.apply',21,0,0)
f(12,122,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(13,122,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(14,122,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(12,123,3,2,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1',3,0,0)
f(12,126,1,2,'kyo/concurrent/fibers$Fiber.interrupt',1,0,0)
f(12,127,6,2,'kyo/concurrent/scheduler/IOPromise.<init>',6,0,0)
f(13,127,6,2,'kyo/concurrent/scheduler/IOPromise.<init>',6,0,0)
f(14,127,6,2,'java/util/concurrent/atomic/AtomicReference.<init>',6,0,0)
f(12,133,6,2,'kyo/concurrent/scheduler/IOTask.ensure',4,0,0)
f(13,133,3,2,'kyo/concurrent/scheduler/IOTask.curr',3,0,0)
f(13,136,1,2,'kyo/concurrent/scheduler/IOTask.ensures_$eq',1,0,0)
f(13,137,2,1,'scala/runtime/BoxesRunTime.equals')
f(14,137,2,1,'scala/runtime/BoxesRunTime.equals2')
f(15,137,2,1,'java/lang/Object.equals')
f(9,139,84,1,'kyo/concurrent/scheduler/IOTask.finalize$1',14,0,0)
f(10,139,84,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$60.0x0000000800d49150.apply$mcV$sp',14,0,0)
f(11,139,84,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1',14,0,0)
f(12,139,84,1,'kyo/concurrent/fibers$.loop$9',14,0,0)
f(13,139,71,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',1,0,0)
f(14,139,71,1,'kyo/concurrent/scheduler/IOPromise.complete',1,0,0)
f(15,139,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(16,139,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(17,139,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(15,140,68,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,140,68,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,140,68,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,140,68,1,'scala/runtime/function/JProcedure1.apply')
f(19,141,67,1,'scala/runtime/function/JProcedure1.apply')
f(20,142,66,2,'kyo/concurrent/scheduler/IOTask$$Lambda$67.0x0000000800d4b680.applyVoid',35,0,0)
f(21,142,66,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',35,0,0)
f(22,142,4,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',4,0,0)
f(23,142,4,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',4,0,0)
f(24,143,3,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',3,0,0)
f(22,146,57,2,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1',26,0,0)
f(23,147,56,2,'kyo/concurrent/scheduler/IOTask$$Lambda$68.0x0000000800d4ba88.apply',25,0,0)
f(24,147,56,2,'kyo/concurrent/scheduler/IOTask.$anonfun$1',25,0,0)
f(25,147,56,2,'kyo/bench/InterruptBench$$anon$3.apply',25,0,0)
f(26,147,50,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',21,0,0)
f(27,148,29,1,'kyo/bench/InterruptBench$$Lambda$58.0x0000000800d48000.apply')
f(28,148,29,1,'kyo/bench/InterruptBench.$anonfun$adapted$1')
f(29,148,29,1,'kyo/bench/InterruptBench.$anonfun$3')
f(30,148,29,1,'kyo/bench/InterruptBench.iterate$2')
f(31,149,6,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1',6,0,0)
f(32,154,1,2,'kyo/bench/InterruptBench$$anon$2.<init>',1,0,0)
f(33,154,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(31,155,13,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',12,0,0)
f(32,157,11,2,'kyo/bench/InterruptBench$$anon$3.<init>',10,0,0)
f(33,158,10,2,'kyo/core$internal$KyoCont.<init>',9,0,0)
f(34,167,1,6,'kyo/core$internal$KyoCont.value',0,1,0)
f(31,168,9,2,'kyo/concurrent/fibers$Fibers.forkFiber',3,0,0)
f(32,169,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(33,169,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',2,0,0)
f(34,169,2,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',2,0,0)
f(32,171,6,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(33,175,2,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply',2,0,0)
f(34,175,2,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',2,0,0)
f(27,177,19,2,'kyo/bench/InterruptBench$$anon$3.<init>',19,0,0)
f(28,182,14,2,'kyo/core$internal$KyoCont.<init>',14,0,0)
f(27,196,1,2,'scala/runtime/BoxesRunTime.unboxToBoolean',1,0,0)
f(26,197,4,2,'kyo/concurrent/scheduler/IOTask.apply',4,0,0)
f(26,201,2,1,'kyo/core$internal$KyoRoot.apply')
f(22,203,5,2,'kyo/concurrent/scheduler/Scheduler$.schedule',5,0,0)
f(23,203,1,2,'kyo/concurrent/scheduler/Worker$.apply',1,0,0)
f(23,204,4,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',4,0,0)
f(24,204,4,2,'kyo/concurrent/scheduler/Queue.offer',4,0,0)
f(25,204,4,2,'kyo/concurrent/scheduler/Queue.tryModify',4,0,0)
f(26,205,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(26,206,2,2,'scala/Function0.apply$mcZ$sp',2,0,0)
f(27,206,2,2,'kyo/concurrent/scheduler/Queue$$Lambda$54.0x0000000800d43cd0.apply',2,0,0)
f(28,206,2,2,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1',2,0,0)
f(29,207,1,2,'kyo/concurrent/scheduler/Queue.items_$eq',1,0,0)
f(15,208,2,1,'kyo/concurrent/scheduler/IOPromise.onComplete')
f(13,210,13,2,'scala/runtime/BoxesRunTime.boxToBoolean',13,0,0)
f(9,223,1,2,'kyo/concurrent/scheduler/IOTask.loop$2',1,0,0)
f(10,223,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(11,223,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(12,223,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(9,224,7,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,229,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(11,229,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(12,229,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(10,230,1,2,'kyo/concurrent/scheduler/IOPromise$Pending.add',1,0,0)
f(11,230,1,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.<init>',1,0,0)
f(9,231,16,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,231,16,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',11,0,0)
f(11,231,16,2,'kyo/concurrent/scheduler/IOPromise.complete',11,0,0)
f(12,231,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(13,231,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(14,231,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(12,232,15,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',10,0,0)
f(13,232,15,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',10,0,0)
f(14,236,10,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run',5,0,0)
f(15,236,5,3,'itable stub')
f(15,241,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,241,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,241,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,241,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,241,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,241,2,1,'jdk/internal/misc/Unsafe.unpark')
f(21,241,2,3,'pthread_cond_signal')
f(22,241,2,5,'entry_SYSCALL_64_after_hwframe')
f(23,241,2,5,'do_syscall_64')
f(24,242,1,5,'__x64_sys_futex')
f(25,242,1,5,'do_futex')
f(26,242,1,5,'futex_wake')
f(27,242,1,5,'wake_up_q')
f(28,242,1,5,'_raw_spin_unlock_irqrestore')
f(15,243,3,1,'scala/runtime/function/JProcedure1.apply')
f(16,245,1,1,'scala/runtime/function/JProcedure1.apply')
f(17,245,1,2,'kyo/concurrent/scheduler/IOTask$$Lambda$67.0x0000000800d4b680.applyVoid',1,0,0)
f(18,245,1,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',1,0,0)
f(19,245,1,2,'kyo/concurrent/scheduler/Scheduler$.schedule',1,0,0)
f(20,245,1,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',1,0,0)
f(21,245,1,2,'kyo/concurrent/scheduler/Queue.offer',1,0,0)
f(22,245,1,2,'kyo/concurrent/scheduler/Queue.tryModify',1,0,0)
f(23,245,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(14,246,1,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$5.run',1,0,0)
f(9,247,2,6,'kyo/core$internal$KyoCont.effect',0,2,0)
f(9,249,1,3,'vtable stub')
f(7,250,27,2,'kyo/concurrent/scheduler/Queue.poll',27,0,0)
f(8,250,11,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',11,0,0)
f(9,250,11,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',11,0,0)
f(10,254,7,2,'java/lang/invoke/DirectMethodHandle.constructorMethod',7,0,0)
f(8,261,16,2,'kyo/concurrent/scheduler/Queue.modify',16,0,0)
f(9,267,4,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',4,0,0)
f(10,268,3,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',3,0,0)
f(11,270,1,2,'java/lang/invoke/VarHandle.checkExactAccessMode',1,0,0)
f(9,271,6,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47148.apply',6,0,0)
f(10,275,2,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',2,0,0)
f(11,275,2,2,'scala/collection/mutable/PriorityQueue.dequeue',2,0,0)
f(7,277,6,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,277,6,1,'kyo/concurrent/scheduler/Worker.park')
f(9,277,6,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,277,6,1,'jdk/internal/misc/Unsafe.park')
f(11,277,1,3,'Unsafe_Park')
f(12,277,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(11,278,5,3,'[unknown]')
f(12,278,5,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,278,5,5,'entry_SYSCALL_64_after_hwframe')
f(14,278,5,5,'do_syscall_64')
f(15,278,5,5,'__x64_sys_futex')
f(16,278,5,5,'do_futex')
f(17,278,5,5,'futex_wait')
f(18,278,1,5,'__get_user_nocheck_4')
f(18,279,3,5,'futex_wait_queue_me')
f(19,279,3,5,'schedule')
f(20,279,3,5,'__schedule')
f(21,279,3,5,'finish_task_switch.isra.0')
f(18,282,1,5,'hrtimer_cancel')
f(19,282,1,5,'_raw_spin_unlock_irqrestore')
f(7,283,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,283,1,2,'kyo/concurrent/scheduler/Scheduler$.randomWorker',1,0,0)
f(9,283,1,2,'java/util/Random.nextInt',1,0,0)
f(7,284,4,2,'kyo/concurrent/scheduler/Worker.stop$1',4,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 576px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(36);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,5327,3,'all')
f(1,0,5324,1,'java/lang/Thread.run')
f(2,0,5324,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,5324,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,1046,1,'java/util/concurrent/FutureTask.run')
f(5,0,1046,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,1046,1,'java/util/concurrent/FutureTask.run')
f(7,0,1046,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,1046,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1046,1,'java/lang/reflect/Method.invoke')
f(10,0,1046,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,1046,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,1046,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,1046,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,1044,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,1044,1,'kyo/bench/Bench.syncKyo')
f(16,0,628,1,'kyo/bench/Bench.runLoop$1')
f(17,0,413,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,413,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,413,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,413,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,86,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,86,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,46,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,46,40,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,46,40,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,86,127,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,213,200,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,213,200,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,213,200,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,413,215,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,413,176,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,413,176,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,413,176,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,413,133,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,413,133,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,413,133,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(24,413,133,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,413,16,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(25,429,87,2,'kyo.concurrent.scheduler.IOTask')
f(25,516,30,1,'kyo/concurrent/fibers$Fiber$.promise')
f(26,516,30,2,'kyo.concurrent.fibers$Fiber')
f(21,546,43,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,546,43,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c82da8.apply')
f(23,546,43,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,546,43,1,'kyo/concurrent/fibers$Fiber.join')
f(25,546,43,1,'kyo/concurrent/fibers$Fibers.get')
f(26,546,43,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,546,43,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,589,39,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,589,39,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c835a8.apply')
f(20,589,39,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,589,39,1,'kyo/concurrent/fibers$Fiber.block')
f(22,589,39,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,628,416,1,'kyo/bench/InterruptBench.kyoBench')
f(17,628,45,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,628,45,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,628,45,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,628,45,2,'kyo.bench.InterruptBench$$Lambda$37+0x0000000800c3e9f8')
f(17,673,179,1,'kyo/concurrent/fibers$Fibers.block')
f(18,673,21,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,673,21,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,673,21,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,673,21,2,'kyo.concurrent.fibers$Fibers$$Lambda$40+0x0000000800c835a8')
f(18,694,40,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,694,40,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,734,79,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,734,79,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,813,39,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,813,39,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,852,192,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,852,36,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,852,36,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,852,36,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,852,36,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c82da8')
f(18,888,111,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,888,44,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,888,44,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,888,44,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,888,44,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(19,932,54,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,932,54,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(19,986,13,1,'kyo/locals$Locals$.save')
f(20,986,13,2,'kyo.locals$Locals$$anon$3')
f(18,999,45,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,999,45,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(14,1044,2,2,'org.openjdk.jmh.results.BenchmarkTaskResult')
f(4,1046,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec28.run')
f(5,1046,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,1046,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,1046,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,1046,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,1046,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,1046,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,1046,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,1056,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,1056,1,2,'java.lang.String')
f(4,1057,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1ee50.run')
f(5,1057,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,1057,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,1057,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,1057,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,1057,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,1057,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$70+0x0000000800d4e7d8')
f(4,1068,4256,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23cb0.run')
f(5,1068,4256,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,1068,4256,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,1068,4067,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,1068,4067,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,1068,2108,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,1068,591,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,1068,115,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(12,1068,115,1,'kyo/bench/InterruptBench$$Lambda$58.0x0000000800d44800.apply')
f(13,1068,115,1,'kyo/bench/InterruptBench.$anonfun$2')
f(14,1068,115,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(15,1068,115,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(16,1068,115,2,'kyo.concurrent.fibers$Fiber$$anon$11')
f(11,1183,476,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,1183,476,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,1183,476,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(14,1183,476,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,1183,98,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,1281,272,2,'kyo.concurrent.scheduler.IOTask')
f(15,1553,106,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,1553,106,2,'kyo.concurrent.fibers$Fiber')
f(10,1659,575,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(11,1659,575,2,'kyo.bench.InterruptBench$$anon$3')
f(10,2234,326,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,2234,223,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(12,2234,223,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$62.0x0000000800d49f40.apply')
f(13,2234,223,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$_$$anonfun$adapted$1')
f(14,2234,223,1,'kyo/concurrent/fibers$.$anonfun$3')
f(15,2234,113,2,'kyo.concurrent.fibers$Fiber')
f(15,2347,110,1,'kyo/concurrent/fibers$Fiber.join')
f(16,2347,110,1,'kyo/concurrent/fibers$Fibers.get')
f(17,2347,110,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(18,2347,110,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(11,2457,103,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(12,2457,103,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(13,2457,103,1,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10')
f(14,2457,103,2,'kyo.concurrent.fibers$Fiber$$anon$13$$anon$14')
f(10,2560,616,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,2560,616,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(12,2560,159,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(13,2560,159,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(14,2560,159,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(15,2560,88,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$61+0x0000000800d49a30')
f(15,2648,71,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$62+0x0000000800d49f40')
f(12,2719,124,2,'kyo.concurrent.scheduler.IOPromise')
f(12,2843,197,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(13,2843,197,2,'kyo.concurrent.fibers$$anon$12')
f(12,3040,136,1,'kyo/concurrent/fibers$Fiber.interrupt')
f(13,3040,136,2,'kyo.concurrent.fibers$Fiber$$anon$13')
f(9,3176,1485,1,'kyo/concurrent/scheduler/IOTask.finalize$1')
f(10,3176,1485,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$61.0x0000000800d49a30.apply$mcV$sp')
f(11,3176,1485,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1')
f(12,3176,1485,1,'kyo/concurrent/fibers$.loop$9')
f(13,3176,1485,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(14,3176,1485,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(15,3176,1485,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,3176,1485,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,3176,1485,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,3176,1485,1,'scala/runtime/function/JProcedure1.apply')
f(19,3176,1485,1,'scala/runtime/function/JProcedure1.apply')
f(20,3176,1485,1,'kyo/concurrent/scheduler/IOTask$$Lambda$68.0x0000000800d4e000.applyVoid')
f(21,3176,1485,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(22,3176,247,2,'kyo.concurrent.scheduler.IOTask')
f(22,3423,242,1,'kyo/concurrent/scheduler/IOPromise.become')
f(23,3423,242,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(24,3423,86,1,'kyo/concurrent/scheduler/IOPromise$Linked$.apply')
f(25,3423,86,2,'kyo.concurrent.scheduler.IOPromise$Linked')
f(24,3509,156,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(25,3509,156,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(26,3509,156,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(27,3509,156,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(22,3665,996,1,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1')
f(23,3665,996,1,'kyo/concurrent/scheduler/IOTask$$Lambda$69.0x0000000800d4e408.apply')
f(24,3665,996,1,'kyo/concurrent/scheduler/IOTask.$anonfun$1')
f(25,3665,996,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(26,3665,996,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(27,3665,996,1,'kyo/bench/InterruptBench$$Lambda$59.0x0000000800d48688.apply')
f(28,3665,996,1,'kyo/bench/InterruptBench.$anonfun$adapted$1')
f(29,3665,996,1,'kyo/bench/InterruptBench.$anonfun$3')
f(30,3665,996,1,'kyo/bench/InterruptBench.iterate$2')
f(31,3665,187,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(32,3665,91,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(33,3665,91,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,3665,91,2,'kyo.bench.InterruptBench$$Lambda$57+0x0000000800d45690')
f(32,3756,96,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(33,3756,96,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,3756,96,2,'kyo.bench.InterruptBench$$Lambda$59+0x0000000800d48688')
f(31,3852,197,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(32,3852,197,2,'kyo.bench.InterruptBench$$anon$2')
f(31,4049,203,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(32,4049,203,2,'kyo.bench.InterruptBench$$anon$3')
f(31,4252,409,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(32,4252,131,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(33,4252,131,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(34,4252,131,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(35,4252,131,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(32,4383,180,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(33,4383,180,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(32,4563,98,1,'kyo/locals$Locals$.save')
f(33,4563,98,2,'kyo.locals$Locals$$anon$3')
f(9,4661,235,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,4661,89,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,4661,89,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,4661,89,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,4661,89,2,'kyo.concurrent.scheduler.IOTask$$Lambda$63+0x0000000800d4ad28')
f(10,4750,146,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,4750,146,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(9,4896,239,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,4896,114,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,4896,114,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,4896,114,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,4896,114,2,'kyo.concurrent.scheduler.IOTask$$Lambda$68+0x0000000800d4e000')
f(10,5010,125,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,5010,125,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,5135,189,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,5135,189,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,5135,189,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,5135,189,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,5135,189,2,'kyo.concurrent.scheduler.Queue$$Lambda$56+0x0000000800d47a70')
f(1,5324,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,5324,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,5324,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,5324,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,5324,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,5324,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,5324,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,5324,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,5324,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,5324,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,5324,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,5324,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,5324,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 608px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(38);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,277,3,'all')
f(1,0,3,3,'[unknown_Java]')
f(2,0,1,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(2,1,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(2,2,1,1,'kyo/concurrent/scheduler/IOTask.eval')
f(1,3,274,1,'java/lang/Thread.run')
f(2,3,274,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,3,274,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,3,5,1,'java/util/concurrent/FutureTask.run')
f(5,3,5,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,3,5,1,'java/util/concurrent/FutureTask.run')
f(7,3,5,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,3,5,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,3,5,1,'java/lang/reflect/Method.invoke')
f(10,3,5,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,3,5,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,3,5,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,3,5,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,3,5,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub',0,0,1)
f(15,4,4,1,'kyo/bench/Bench.syncKyo')
f(16,4,4,1,'kyo/bench/Bench.runLoop$1')
f(17,4,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,4,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,4,1,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,4,1,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,4,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,4,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,4,1,1,'java/util/concurrent/locks/LockSupport.park')
f(24,4,1,1,'jdk/internal/misc/Unsafe.park')
f(25,4,1,3,'Unsafe_Park')
f(26,4,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,4,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,4,1,5,'do_syscall_64')
f(29,4,1,5,'__x64_sys_futex')
f(30,4,1,5,'do_futex')
f(31,4,1,5,'hash_futex')
f(17,5,3,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,5,3,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,5,3,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,5,3,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,5,3,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,5,3,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,5,3,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(24,5,3,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,5,3,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,5,3,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,5,3,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(28,5,3,1,'java/util/concurrent/locks/LockSupport.unpark')
f(29,5,3,1,'jdk/internal/misc/Unsafe.unpark')
f(30,5,1,3,'Unsafe_Unpark')
f(31,5,1,3,'pthread_mutex_lock')
f(30,6,2,3,'pthread_cond_signal')
f(31,6,2,5,'entry_SYSCALL_64_after_hwframe')
f(32,6,2,5,'do_syscall_64')
f(33,6,2,5,'__x64_sys_futex')
f(34,6,2,5,'do_futex')
f(35,6,2,5,'futex_wake')
f(36,6,2,5,'wake_up_q')
f(37,6,2,5,'_raw_spin_unlock_irqrestore')
f(4,8,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec28.run')
f(5,8,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,8,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,8,1,1,'java/lang/Thread.sleep')
f(8,8,1,3,'[unknown]')
f(9,8,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,8,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,8,1,5,'do_syscall_64')
f(12,8,1,5,'__x64_sys_futex')
f(13,8,1,5,'do_futex')
f(14,8,1,5,'futex_wait')
f(15,8,1,5,'futex_wait_queue_me')
f(16,8,1,5,'schedule')
f(17,8,1,5,'__schedule')
f(18,8,1,5,'finish_task_switch.isra.0')
f(4,9,268,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23cb0.run')
f(5,9,268,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,9,268,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,23,9,2,'kyo/concurrent/scheduler/IOTask.reenqueue',9,0,0)
f(8,23,9,2,'kyo/concurrent/scheduler/IOTask.curr',9,0,0)
f(7,32,212,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,33,3,2,'kyo/concurrent/scheduler/IOTask.curr',3,0,0)
f(8,36,208,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,39,100,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,42,39,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,44,37,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,44,37,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,52,16,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply',16,0,0)
f(14,53,15,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',15,0,0)
f(15,59,5,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',5,0,0)
f(16,59,5,2,'kyo/ios$KyoIO.<init>',5,0,0)
f(15,64,3,2,'kyo/concurrent/scheduler/IOTask.<init>',3,0,0)
f(16,65,2,2,'kyo/concurrent/scheduler/IOPromise.<init>',2,0,0)
f(17,65,2,2,'kyo/concurrent/scheduler/IOPromise.<init>',2,0,0)
f(18,65,2,2,'java/util/concurrent/atomic/AtomicReference.<init>',2,0,0)
f(15,67,1,2,'kyo/concurrent/scheduler/Scheduler$.schedule',1,0,0)
f(13,68,13,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',13,0,0)
f(14,72,9,2,'kyo/core$internal$KyoCont.<init>',9,0,0)
f(10,81,23,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',16,0,0)
f(11,92,12,2,'kyo/bench/InterruptBench$$anon$3.<init>',5,0,0)
f(12,93,11,2,'kyo/core$internal$KyoCont.<init>',4,0,0)
f(13,95,2,6,'kyo/core$internal$KyoCont.effect',0,2,0)
f(13,97,4,6,'kyo/core$internal$KyoRoot.effect',0,4,0)
f(13,101,1,6,'kyo/core$internal$KyoRoot.value',0,1,0)
f(13,102,2,3,'vtable stub')
f(10,104,14,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,104,3,2,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1',3,0,0)
f(12,104,3,2,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$62.0x0000000800d49da0.apply',3,0,0)
f(13,104,3,2,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$_$$anonfun$adapted$1',3,0,0)
f(14,104,3,2,'kyo/concurrent/fibers$.$anonfun$3',3,0,0)
f(15,104,3,2,'kyo/concurrent/fibers$Fiber.join',3,0,0)
f(16,104,2,2,'kyo/concurrent/fibers$Fiber.state',2,0,0)
f(16,106,1,2,'kyo/concurrent/fibers$Fibers.get',1,0,0)
f(17,106,1,2,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1',1,0,0)
f(11,107,11,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',11,0,0)
f(12,107,11,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',11,0,0)
f(13,107,11,2,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10',11,0,0)
f(14,107,11,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',11,0,0)
f(15,107,11,2,'kyo/concurrent/scheduler/IOPromise.complete',11,0,0)
f(16,107,10,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',10,0,0)
f(17,107,10,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',10,0,0)
f(18,107,10,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',10,0,0)
f(16,117,1,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',1,0,0)
f(17,117,1,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',1,0,0)
f(10,118,19,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,120,17,2,'kyo/concurrent/fibers$Fiber$$anon$11.apply',17,0,0)
f(12,123,3,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',3,0,0)
f(13,123,3,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',3,0,0)
f(14,123,3,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',3,0,0)
f(12,126,2,2,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1',2,0,0)
f(12,128,1,2,'kyo/concurrent/fibers$Fiber.interrupt',1,0,0)
f(12,129,6,2,'kyo/concurrent/scheduler/IOPromise.<init>',6,0,0)
f(13,129,6,2,'kyo/concurrent/scheduler/IOPromise.<init>',6,0,0)
f(14,129,6,2,'java/util/concurrent/atomic/AtomicReference.<init>',6,0,0)
f(12,135,2,2,'kyo/concurrent/scheduler/IOTask.ensure',2,0,0)
f(13,135,1,2,'kyo/concurrent/scheduler/IOTask.curr',1,0,0)
f(13,136,1,2,'kyo/concurrent/scheduler/IOTask.ensures_$eq',1,0,0)
f(10,137,2,3,'vtable stub')
f(9,139,65,1,'kyo/concurrent/scheduler/IOTask.finalize$1',6,0,0)
f(10,139,65,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$61.0x0000000800d49890.apply$mcV$sp',6,0,0)
f(11,139,65,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1',6,0,0)
f(12,139,65,1,'kyo/concurrent/fibers$.loop$9',6,0,0)
f(13,139,59,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(14,139,59,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(15,139,59,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,139,59,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,139,59,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,139,59,1,'scala/runtime/function/JProcedure1.apply')
f(19,141,57,1,'scala/runtime/function/JProcedure1.apply')
f(20,143,55,2,'kyo/concurrent/scheduler/IOTask$$Lambda$68.0x0000000800d4e000.applyVoid',38,0,0)
f(21,144,54,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',37,0,0)
f(22,154,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(23,154,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',2,0,0)
f(24,154,2,2,'kyo/concurrent/scheduler/IOTask$$Lambda$69.0x0000000800d4e408.<init>',2,0,0)
f(22,156,40,2,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1',23,0,0)
f(23,156,40,2,'kyo/concurrent/scheduler/IOTask$$Lambda$69.0x0000000800d4e408.apply',23,0,0)
f(24,156,40,2,'kyo/concurrent/scheduler/IOTask.$anonfun$1',23,0,0)
f(25,157,39,2,'kyo/bench/InterruptBench$$anon$3.apply',22,0,0)
f(26,157,38,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',22,0,0)
f(27,160,22,1,'kyo/bench/InterruptBench$$Lambda$59.0x0000000800d44400.apply',6,0,0)
f(28,162,20,1,'kyo/bench/InterruptBench.$anonfun$adapted$1',4,0,0)
f(29,165,17,1,'kyo/bench/InterruptBench.$anonfun$3',1,0,0)
f(30,166,16,1,'kyo/bench/InterruptBench.iterate$2')
f(31,166,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(32,166,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial',1,0,0)
f(33,166,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(31,167,6,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1',6,0,0)
f(31,173,8,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',4,0,0)
f(32,175,6,2,'kyo/bench/InterruptBench$$anon$3.<init>',2,0,0)
f(33,175,6,2,'kyo/core$internal$KyoCont.<init>',2,0,0)
f(34,177,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(34,178,3,6,'kyo/core$internal$KyoCont.value',0,3,0)
f(31,181,1,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(32,181,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(27,182,12,2,'kyo/bench/InterruptBench$$anon$3.<init>',12,0,0)
f(28,183,11,2,'kyo/core$internal$KyoCont.<init>',11,0,0)
f(27,194,1,2,'scala/runtime/BoxesRunTime.unboxToBoolean',1,0,0)
f(28,194,1,2,'java/lang/Boolean.booleanValue',1,0,0)
f(26,195,1,1,'kyo/core$internal$KyoRoot.apply')
f(22,196,2,2,'kyo/concurrent/scheduler/Scheduler$.schedule',2,0,0)
f(23,196,2,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',2,0,0)
f(24,196,2,2,'kyo/concurrent/scheduler/Queue.offer',2,0,0)
f(25,196,2,2,'kyo/concurrent/scheduler/Queue.tryModify',2,0,0)
f(26,196,2,2,'scala/Function0.apply$mcZ$sp',2,0,0)
f(27,196,2,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47258.apply',2,0,0)
f(28,196,2,2,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1',2,0,0)
f(29,196,2,2,'scala/collection/mutable/PriorityQueue.addOne',2,0,0)
f(30,196,2,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize',2,0,0)
f(31,197,1,2,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize',1,0,0)
f(32,197,1,2,'scala/collection/mutable/ArrayBuffer$.scala$collection$mutable$ArrayBuffer$$ensureSize',1,0,0)
f(13,198,6,2,'scala/runtime/BoxesRunTime.boxToBoolean',6,0,0)
f(9,204,3,2,'kyo/concurrent/scheduler/IOTask.loop$2',3,0,0)
f(10,206,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(11,206,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(9,207,12,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,208,6,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',6,0,0)
f(11,208,6,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',6,0,0)
f(12,209,5,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',5,0,0)
f(10,214,5,2,'kyo/concurrent/scheduler/Scheduler$.schedule',4,0,0)
f(11,214,5,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',4,0,0)
f(12,214,5,2,'kyo/concurrent/scheduler/Queue.offer',4,0,0)
f(13,214,5,2,'kyo/concurrent/scheduler/Queue.tryModify',4,0,0)
f(14,216,3,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',2,0,0)
f(15,216,3,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',2,0,0)
f(16,218,1,3,'[unknown]')
f(17,218,1,3,'pthread_mutex_trylock')
f(9,219,17,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,219,17,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',10,0,0)
f(11,219,17,2,'kyo/concurrent/scheduler/IOPromise.complete',10,0,0)
f(12,219,17,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',10,0,0)
f(13,219,17,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',10,0,0)
f(14,221,15,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run',8,0,0)
f(15,221,8,3,'itable stub')
f(15,229,3,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,229,3,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,229,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,229,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,229,3,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,229,3,1,'jdk/internal/misc/Unsafe.unpark')
f(21,229,3,3,'pthread_cond_signal')
f(22,229,3,5,'entry_SYSCALL_64_after_hwframe')
f(23,229,3,5,'do_syscall_64')
f(24,229,3,5,'__x64_sys_futex')
f(25,229,3,5,'do_futex')
f(26,229,3,5,'futex_wake')
f(27,229,3,5,'wake_up_q')
f(28,229,3,5,'_raw_spin_unlock_irqrestore')
f(15,232,4,1,'scala/runtime/function/JProcedure1.apply')
f(16,234,2,1,'scala/runtime/function/JProcedure1.apply')
f(17,235,1,2,'kyo/concurrent/scheduler/IOTask$$Lambda$68.0x0000000800d4e000.applyVoid',1,0,0)
f(18,235,1,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',1,0,0)
f(19,235,1,2,'kyo/concurrent/scheduler/Scheduler$.schedule',1,0,0)
f(20,235,1,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',1,0,0)
f(21,235,1,2,'kyo/concurrent/scheduler/Queue.offer',1,0,0)
f(22,235,1,2,'kyo/concurrent/scheduler/Queue.tryModify',1,0,0)
f(23,235,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(24,235,1,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',1,0,0)
f(9,236,5,6,'kyo/core$internal$KyoCont.effect',0,5,0)
f(9,241,1,1,'kyo/ios$KyoIO.effect')
f(9,242,2,3,'vtable stub')
f(7,244,28,1,'kyo/concurrent/scheduler/Queue.poll',4,0,0)
f(8,247,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(9,247,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(10,247,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(8,248,24,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,248,16,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',16,0,0)
f(10,253,11,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',11,0,0)
f(11,257,7,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',7,0,0)
f(12,260,4,2,'java/util/Objects.requireNonNull',4,0,0)
f(9,264,8,2,'kyo/concurrent/scheduler/Queue$$Lambda$60.0x0000000800d495d0.apply',8,0,0)
f(10,264,8,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',8,0,0)
f(11,264,8,2,'scala/collection/mutable/PriorityQueue.dequeue',8,0,0)
f(12,267,4,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',4,0,0)
f(12,271,1,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',1,0,0)
f(7,272,2,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,272,2,1,'kyo/concurrent/scheduler/Worker.park')
f(9,272,2,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,272,2,1,'jdk/internal/misc/Unsafe.park')
f(11,272,2,3,'[unknown]')
f(12,272,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,272,2,5,'entry_SYSCALL_64_after_hwframe')
f(14,272,2,5,'do_syscall_64')
f(15,272,2,5,'__x64_sys_futex')
f(16,272,2,5,'do_futex')
f(17,272,2,5,'futex_wait')
f(18,272,2,5,'futex_wait_queue_me')
f(19,272,2,5,'schedule')
f(20,272,2,5,'__schedule')
f(21,272,2,5,'finish_task_switch.isra.0')
f(7,274,3,2,'kyo/concurrent/scheduler/Worker.stop$1',3,0,0)
f(8,276,1,2,'kyo/concurrent/scheduler/Scheduler$.stopWorker',1,0,0)
f(9,276,1,2,'java/util/concurrent/atomic/AtomicInteger.get',1,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 560px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(35);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,14626,3,'all')
f(1,0,14621,1,'java/lang/Thread.run')
f(2,0,14621,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,14621,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,1538,1,'java/util/concurrent/FutureTask.run')
f(5,0,1538,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,1538,1,'java/util/concurrent/FutureTask.run')
f(7,0,1538,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,1538,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1538,1,'java/lang/reflect/Method.invoke')
f(10,0,1538,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,1538,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,1538,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,1538,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,1538,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,1538,1,'kyo/bench/Bench.forkKyo')
f(16,0,129,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,129,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,129,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,95,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,0,95,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3ee58')
f(19,95,34,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3ee58')
f(16,129,134,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,129,134,2,'kyo.bench.Bench$$anon$1')
f(16,263,968,1,'kyo/bench/Bench.runLoop$2')
f(17,263,438,1,'kyo/bench/Bench$$anon$1.apply')
f(18,263,29,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,263,29,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c83220.apply')
f(20,263,29,1,'kyo/bench/Bench.$anonfun$2')
f(21,263,29,1,'kyo/concurrent/fibers$Fiber.block')
f(22,263,29,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,292,409,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,292,409,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,292,409,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84600.apply')
f(21,292,409,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,292,43,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,335,296,2,'kyo.concurrent.scheduler.IOTask')
f(22,631,70,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,631,70,2,'kyo.concurrent.fibers$Fiber')
f(17,701,530,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,701,530,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,701,530,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,701,530,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,701,225,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,701,225,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,701,116,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,817,109,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,817,109,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,926,156,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,1082,149,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,1082,149,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,1082,149,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,1231,307,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,1231,156,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1231,156,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1231,156,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1231,4,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(21,1231,4,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84600')
f(20,1235,152,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84600')
f(17,1387,123,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,1387,123,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,1510,28,1,'kyo/locals$Locals$.save')
f(18,1510,28,2,'kyo.locals$Locals$$anon$3')
f(4,1538,12,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ee28.run')
f(5,1538,12,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,1538,12,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,1538,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,1538,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,1538,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,1538,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,1538,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,1549,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,1549,1,2,'java.lang.String')
f(4,1550,12,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f050.run')
f(5,1550,12,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,1550,12,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,1550,12,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,1550,12,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,1550,12,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,1550,12,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$59+0x0000000800d49430')
f(4,1562,13059,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fd98.run')
f(5,1562,13059,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,1562,13059,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,1562,13053,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,1562,13053,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,1562,13004,1,'kyo/bench/NarrowBindBench$$anon$2.apply')
f(10,1562,13004,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(11,1562,13004,1,'kyo/bench/NarrowBindBench$$Lambda$57.0x0000000800d44400.apply')
f(12,1562,13004,1,'kyo/bench/NarrowBindBench.$anonfun$adapted$1')
f(13,1562,13004,1,'kyo/bench/NarrowBindBench.$anonfun$1')
f(14,1562,13004,1,'kyo/bench/NarrowBindBench.loop$1')
f(15,1562,2374,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,1562,2374,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,1562,2374,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,1562,2374,2,'kyo.bench.NarrowBindBench$$Lambda$57+0x0000000800d44400')
f(15,3936,4683,2,'kyo.bench.NarrowBindBench$$anon$1')
f(15,8619,5947,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(16,8619,5947,2,'kyo.bench.NarrowBindBench$$anon$2')
f(9,14566,49,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,14566,49,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,14566,49,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3ee58.apply')
f(12,14566,49,1,'kyo/bench/Bench.$anonfun$1')
f(13,14566,49,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,14566,49,1,'kyo/bench/NarrowBindBench.kyoBench')
f(15,14566,48,2,'kyo.bench.NarrowBindBench$$anon$4')
f(15,14614,1,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$2')
f(16,14614,1,2,'kyo.bench.NarrowBindBench$$anon$5')
f(7,14615,4,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,14615,4,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,14615,4,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,14615,4,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,14615,4,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(12,14615,4,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d47ca0')
f(7,14619,2,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,14619,2,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,14619,2,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,14619,2,1,'scala/runtime/ObjectRef.create')
f(11,14619,2,2,'scala.runtime.ObjectRef')
f(1,14621,5,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,14621,5,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,14621,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,14621,5,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,14621,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,14621,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,14621,1,1,'jdk/proxy1/$Proxy0.iterationResult')
f(8,14621,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient$$Lambda$8.0x0000000800c01c70.invoke')
f(9,14621,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.lambda$new$0')
f(10,14621,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushFrame')
f(11,14621,1,1,'java/io/ObjectOutputStream.writeObject')
f(12,14621,1,1,'java/io/ObjectOutputStream.writeObject0')
f(13,14621,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(14,14621,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(15,14621,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(16,14621,1,1,'java/io/ObjectOutputStream.writeObject0')
f(17,14621,1,1,'java/io/ObjectOutputStream.writeArray')
f(18,14621,1,1,'java/io/ObjectOutputStream.writeObject0')
f(19,14621,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(20,14621,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(21,14621,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(22,14621,1,1,'java/io/ObjectOutputStream.writeObject0')
f(23,14621,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(24,14621,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(25,14621,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(26,14621,1,1,'java/io/ObjectOutputStream.writeObject0')
f(27,14621,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(28,14621,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(29,14621,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(30,14621,1,1,'java/io/ObjectOutputStream.writeObject0')
f(31,14621,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(32,14621,1,1,'java/io/ObjectOutputStream$HandleTable.assign')
f(33,14621,1,1,'java/io/ObjectOutputStream$HandleTable.growEntries')
f(34,14621,1,2,'int[]')
f(7,14622,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,14622,1,2,'org.openjdk.jmh.infra.Control')
f(8,14623,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,14623,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,14623,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,14623,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,14623,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,14623,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 576px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(36);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,276,3,'all')
f(1,0,276,1,'java/lang/Thread.run')
f(2,0,276,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,276,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,14,1,'java/util/concurrent/FutureTask.run')
f(5,0,14,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,14,1,'java/util/concurrent/FutureTask.run')
f(7,0,14,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,14,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,14,1,'java/lang/reflect/Method.invoke')
f(10,0,14,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,14,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,14,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,14,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,14,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub',0,1,0)
f(15,0,14,1,'kyo/bench/Bench.forkKyo',1,0,0)
f(16,1,13,1,'kyo/bench/Bench.runLoop$2')
f(17,1,6,1,'kyo/bench/Bench$$anon$1.apply')
f(18,1,6,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,1,6,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,1,6,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84600.apply',1,0,0)
f(21,1,6,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',1,0,0)
f(22,1,1,2,'kyo/concurrent/scheduler/IOTask.<init>',1,0,0)
f(22,2,5,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,2,5,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,2,5,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,2,5,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,2,5,1,'jdk/internal/misc/Unsafe.unpark')
f(27,2,5,3,'pthread_cond_signal')
f(28,3,4,5,'entry_SYSCALL_64_after_hwframe')
f(29,3,4,5,'do_syscall_64')
f(30,3,4,5,'__x64_sys_futex')
f(31,3,4,5,'do_futex')
f(32,3,4,5,'futex_wake')
f(33,3,4,5,'wake_up_q')
f(34,3,4,5,'_raw_spin_unlock_irqrestore')
f(17,7,7,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,7,7,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,7,7,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,7,7,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,7,7,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,7,7,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,7,1,2,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead',1,0,0)
f(23,8,6,1,'java/util/concurrent/locks/LockSupport.park')
f(24,8,6,1,'jdk/internal/misc/Unsafe.park')
f(25,8,6,3,'[unknown]')
f(26,8,6,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,8,6,5,'entry_SYSCALL_64_after_hwframe')
f(28,8,6,5,'do_syscall_64')
f(29,8,6,5,'__x64_sys_futex')
f(30,8,6,5,'do_futex')
f(31,8,5,5,'futex_wait')
f(32,8,4,5,'futex_wait_queue_me')
f(33,8,4,5,'schedule')
f(34,8,4,5,'__schedule')
f(35,8,4,5,'finish_task_switch.isra.0')
f(32,12,1,5,'futex_wait_setup')
f(31,13,1,5,'futex_wait_setup')
f(4,14,262,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fd98.run')
f(5,14,262,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,14,262,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,14,147,2,'kyo/concurrent/scheduler/IOTask.run',54,0,0)
f(8,22,139,2,'kyo/concurrent/scheduler/IOTask.eval',131,0,0)
f(9,94,3,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(10,94,3,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(11,94,3,4,'MemAllocator::allocate() const')
f(12,94,1,4,'MemAllocator::Allocation::notify_allocation_jvmti_sampler()')
f(12,95,2,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(13,95,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,96,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(14,96,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(15,96,1,4,'G1AllocRegion::new_alloc_region_and_allocate(unsigned long, bool)')
f(16,96,1,4,'HeapRegion::set_eden()')
f(9,97,35,2,'kyo/bench/NarrowBindBench$$anon$2.apply',35,0,0)
f(10,121,1,2,'kyo/bench/NarrowBindBench$$anon$1.apply',1,0,0)
f(10,122,10,2,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1',10,0,0)
f(11,122,10,2,'kyo/bench/NarrowBindBench$$Lambda$57.0x0000000800d44400.apply',10,0,0)
f(12,122,10,2,'kyo/bench/NarrowBindBench.$anonfun$adapted$1',10,0,0)
f(13,125,7,2,'kyo/bench/NarrowBindBench.$anonfun$1',7,0,0)
f(14,125,7,2,'kyo/bench/NarrowBindBench.loop$1',7,0,0)
f(15,127,5,2,'kyo/bench/NarrowBindBench$$anon$1.<init>',5,0,0)
f(16,128,4,2,'kyo/ios$KyoIO.<init>',4,0,0)
f(17,129,3,2,'kyo/core$internal$Kyo.<init>',3,0,0)
f(18,131,1,2,'java/lang/Object.<init>',1,0,0)
f(9,132,24,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',24,0,0)
f(9,156,5,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,156,5,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,156,5,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,156,5,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,156,5,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,156,5,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,156,5,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,156,5,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,156,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,156,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,156,5,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,156,5,1,'jdk/internal/misc/Unsafe.unpark')
f(21,156,5,3,'pthread_cond_signal')
f(22,156,5,5,'entry_SYSCALL_64_after_hwframe')
f(23,156,5,5,'do_syscall_64')
f(24,156,5,5,'__x64_sys_futex')
f(25,156,5,5,'do_futex')
f(26,156,5,5,'futex_wake')
f(27,157,4,5,'wake_up_q')
f(28,157,4,5,'_raw_spin_unlock_irqrestore')
f(7,161,113,2,'kyo/concurrent/scheduler/Queue.poll',110,0,0)
f(8,161,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(9,161,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',2,0,0)
f(8,163,111,2,'kyo/concurrent/scheduler/Queue.modify',108,0,0)
f(9,163,56,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',56,0,0)
f(10,166,53,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',53,0,0)
f(11,188,31,2,'java/lang/invoke/VarForm.getMemberName',31,0,0)
f(9,219,55,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d45000.apply',52,0,0)
f(10,219,55,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',52,0,0)
f(11,225,2,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(12,225,2,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(13,225,2,4,'MemAllocator::allocate() const')
f(14,225,1,4,'MemAllocator::Allocation::notify_allocation_jvmti_sampler()')
f(14,226,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(15,226,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(16,226,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(17,226,1,3,'pthread_mutex_trylock')
f(11,227,47,2,'scala/collection/mutable/PriorityQueue.dequeue',46,0,0)
f(12,273,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(13,273,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(14,273,1,4,'MemAllocator::allocate() const')
f(15,273,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(16,273,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(17,273,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(7,274,2,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,274,2,1,'kyo/concurrent/scheduler/Worker.park')
f(9,274,2,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,274,2,1,'jdk/internal/misc/Unsafe.park')
f(11,274,2,3,'[unknown]')
f(12,274,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,274,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,274,1,5,'do_syscall_64')
f(15,274,1,5,'__x64_sys_futex')
f(12,275,1,3,'pthread_cond_timedwait')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 560px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(35);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,18856,3,'all')
f(1,0,18851,1,'java/lang/Thread.run')
f(2,0,18851,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,18851,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,18851,1,'java/util/concurrent/FutureTask.run')
f(5,0,18851,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,18851,1,'java/util/concurrent/FutureTask.run')
f(7,0,18851,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,18851,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,18851,1,'java/lang/reflect/Method.invoke')
f(10,0,18851,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,18851,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,18851,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,18851,1,'kyo/bench/jmh_generated/NarrowBindBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,18851,1,'kyo/bench/jmh_generated/NarrowBindBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,18851,1,'kyo/bench/Bench.syncKyo')
f(16,0,18850,1,'kyo/bench/Bench.runLoop$1')
f(17,0,18847,1,'kyo/bench/NarrowBindBench$$anon$2.apply')
f(18,0,18847,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(19,0,18847,1,'kyo/bench/NarrowBindBench$$Lambda$40.0x0000000800cd38c0.apply')
f(20,0,18847,1,'kyo/bench/NarrowBindBench.$anonfun$adapted$1')
f(21,0,18847,1,'kyo/bench/NarrowBindBench.$anonfun$1')
f(22,0,18847,1,'kyo/bench/NarrowBindBench.loop$1')
f(23,0,9422,2,'kyo.bench.NarrowBindBench$$anon$1')
f(23,9422,1,2,'kyo.bench.NarrowBindBench$$anon$3')
f(23,9423,9424,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(24,9423,9424,2,'kyo.bench.NarrowBindBench$$anon$2')
f(17,18847,3,1,'kyo/bench/NarrowBindBench$$anon$5.apply')
f(18,18847,3,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$2')
f(19,18847,3,1,'kyo/bench/NarrowBindBench$$Lambda$37.0x0000000800c2d568.apply')
f(20,18847,3,1,'kyo/bench/NarrowBindBench.$anonfun$adapted$2')
f(21,18847,3,1,'kyo/bench/NarrowBindBench.$anonfun$2')
f(22,18847,3,1,'kyo/bench/NarrowBindBench.loop$1')
f(23,18847,1,2,'kyo.bench.NarrowBindBench$$anon$1')
f(23,18848,2,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(24,18848,2,2,'kyo.bench.NarrowBindBench$$anon$2')
f(16,18850,1,1,'kyo/bench/NarrowBindBench.kyoBench')
f(17,18850,1,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$2')
f(18,18850,1,2,'kyo.bench.NarrowBindBench$$anon$5')
f(1,18851,5,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,18851,5,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,18851,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,18851,5,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,18851,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,18851,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,18851,1,1,'jdk/proxy1/$Proxy0.iterationResult')
f(8,18851,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient$$Lambda$8.0x0000000800c01c70.invoke')
f(9,18851,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.lambda$new$0')
f(10,18851,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushFrame')
f(11,18851,1,1,'java/io/ObjectOutputStream.writeObject')
f(12,18851,1,1,'java/io/ObjectOutputStream.writeObject0')
f(13,18851,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(14,18851,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(15,18851,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(16,18851,1,1,'java/io/ObjectOutputStream.writeObject0')
f(17,18851,1,1,'java/io/ObjectOutputStream.writeArray')
f(18,18851,1,1,'java/io/ObjectOutputStream.writeObject0')
f(19,18851,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(20,18851,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(21,18851,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(22,18851,1,1,'java/io/ObjectOutputStream.writeObject0')
f(23,18851,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(24,18851,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(25,18851,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(26,18851,1,1,'java/io/ObjectOutputStream.writeObject0')
f(27,18851,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(28,18851,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(29,18851,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(30,18851,1,1,'java/io/ObjectOutputStream.writeObject0')
f(31,18851,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(32,18851,1,1,'java/io/ObjectOutputStream$HandleTable.assign')
f(33,18851,1,1,'java/io/ObjectOutputStream$HandleTable.growEntries')
f(34,18851,1,2,'int[]')
f(7,18852,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,18852,1,2,'org.openjdk.jmh.runner.InfraControl')
f(8,18853,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,18853,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,18853,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,18853,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,18853,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,18853,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 560px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(35);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,300,3,'all')
f(1,0,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,2,3,'thread_native_entry(Thread*)')
f(3,0,2,4,'Thread::call_run()')
f(4,0,1,4,'JavaThread::thread_main_inner()')
f(5,0,1,4,'CompileBroker::compiler_thread_loop()')
f(6,0,1,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,1,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,1,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,1,4,'Compile::Code_Gen()')
f(10,0,1,4,'PhaseChaitin::Register_Allocate()')
f(11,0,1,4,'PhaseChaitin::post_allocate_copy_removal()')
f(4,1,1,4,'VMThread::run()')
f(5,1,1,4,'VMThread::inner_execute(VM_Operation*)')
f(6,1,1,4,'VMThread::evaluate_operation(VM_Operation*)')
f(7,1,1,4,'VM_Operation::evaluate()')
f(8,1,1,4,'VM_G1CollectForAllocation::doit()')
f(9,1,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint(double)')
f(10,1,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint_helper(double)')
f(11,1,1,4,'G1CollectedHeap::pre_evacuate_collection_set(G1EvacuationInfo&, G1ParScanThreadStateSet*)')
f(12,1,1,4,'WorkGang::run_task(AbstractGangTask*, unsigned int, bool)')
f(13,1,1,3,'sem_post')
f(14,1,1,5,'entry_SYSCALL_64_after_hwframe')
f(15,1,1,5,'do_syscall_64')
f(16,1,1,5,'__x64_sys_futex')
f(17,1,1,5,'do_futex')
f(18,1,1,5,'futex_wake')
f(19,1,1,5,'wake_up_q')
f(20,1,1,5,'_raw_spin_unlock_irqrestore')
f(1,2,1,3,'[unknown]')
f(2,2,1,3,'/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2')
f(1,3,297,1,'java/lang/Thread.run')
f(2,3,297,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,3,297,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,3,297,1,'java/util/concurrent/FutureTask.run')
f(5,3,297,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,3,297,1,'java/util/concurrent/FutureTask.run')
f(7,3,297,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,3,297,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,3,297,1,'java/lang/reflect/Method.invoke')
f(10,3,297,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,3,297,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,3,297,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,3,297,1,'kyo/bench/jmh_generated/NarrowBindBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,3,297,1,'kyo/bench/jmh_generated/NarrowBindBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub',0,1,0)
f(15,3,295,1,'kyo/bench/Bench.syncKyo',34,0,0)
f(16,3,295,1,'kyo/bench/Bench.runLoop$1',41,0,0)
f(17,125,173,2,'kyo/bench/NarrowBindBench$$anon$2.apply',170,0,0)
f(18,199,99,2,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1',96,0,0)
f(19,208,90,2,'kyo/bench/NarrowBindBench$$Lambda$40.0x0000000800cd38c0.apply',87,0,0)
f(20,209,89,2,'kyo/bench/NarrowBindBench.$anonfun$adapted$1',86,0,0)
f(21,209,89,2,'kyo/bench/NarrowBindBench.$anonfun$1',86,0,0)
f(22,209,89,2,'kyo/bench/NarrowBindBench.loop$1',86,0,0)
f(23,215,20,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',17,0,0)
f(24,215,20,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',17,0,0)
f(25,215,20,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',17,0,0)
f(26,232,3,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(27,232,3,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(28,232,1,4,'MemAllocator::Allocation::notify_allocation_jfr_sampler()')
f(28,233,2,4,'MemAllocator::allocate() const')
f(29,233,2,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(30,233,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(31,233,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(32,233,1,4,'MutatorAllocRegion::retire(bool)')
f(33,233,1,4,'G1MonitoringSupport::update_eden_size()')
f(34,233,1,3,'pthread_mutex_lock')
f(30,234,1,4,'ThreadLocalAllocBuffer::fill(HeapWordImpl**, HeapWordImpl**, unsigned long)')
f(23,235,63,2,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1',63,0,0)
f(24,259,39,2,'kyo/bench/NarrowBindBench$$anon$2.<init>',39,0,0)
f(25,269,29,2,'kyo/core$internal$KyoCont.<init>',29,0,0)
f(15,298,2,2,'org/openjdk/jmh/infra/Blackhole.consume',2,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 560px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(35);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,11996,3,'all')
f(1,0,11991,1,'java/lang/Thread.run')
f(2,0,11991,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,11991,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,802,1,'java/util/concurrent/FutureTask.run')
f(5,0,802,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,802,1,'java/util/concurrent/FutureTask.run')
f(7,0,802,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,802,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,802,1,'java/lang/reflect/Method.invoke')
f(10,0,802,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,802,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,802,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,802,1,'kyo/bench/jmh_generated/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,802,1,'kyo/bench/jmh_generated/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,802,1,'kyo/bench/Bench.forkKyo')
f(16,0,66,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,66,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,66,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,4,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,0,4,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c80820')
f(19,4,62,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c80820')
f(16,66,84,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,66,84,2,'kyo.bench.Bench$$anon$1')
f(16,150,479,1,'kyo/bench/Bench.runLoop$2')
f(17,150,229,1,'kyo/bench/Bench$$anon$1.apply')
f(18,150,55,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,150,55,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c85ba8.apply')
f(20,150,55,1,'kyo/bench/Bench.$anonfun$2')
f(21,150,55,1,'kyo/concurrent/fibers$Fiber.block')
f(22,150,55,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,205,174,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,205,174,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,205,174,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c81f78.apply')
f(21,205,174,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,205,174,2,'kyo.concurrent.scheduler.IOTask')
f(17,379,250,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,379,250,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,379,250,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,379,250,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,379,54,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,379,54,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,379,1,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,380,53,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,380,53,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,433,33,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,466,163,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,466,163,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,466,163,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,629,173,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,629,173,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,629,173,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,629,173,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,629,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(21,629,11,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c81f78')
f(20,640,162,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c81f78')
f(4,802,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e478.run')
f(5,802,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,802,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,802,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,802,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,802,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,802,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,802,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,812,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,812,1,2,'java.lang.String')
f(4,813,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e6a0.run')
f(5,813,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,813,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,813,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,813,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,813,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,813,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$69+0x0000000800d4cec0')
f(4,824,11167,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d22b68.run')
f(5,824,11167,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,824,11167,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,824,11167,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,824,11167,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,824,11067,1,'kyo/bench/NarrowBindMapBench$$anon$12.apply')
f(10,824,553,1,'kyo/bench/NarrowBindMapBench$$anon$11.apply')
f(11,824,553,1,'kyo/bench/NarrowBindMapBench$$anon$10.apply')
f(12,824,553,1,'kyo/bench/NarrowBindMapBench$$anon$9.apply')
f(13,824,553,1,'kyo/bench/NarrowBindMapBench$$anon$8.apply')
f(14,824,553,1,'kyo/bench/NarrowBindMapBench$$anon$7.apply')
f(15,824,553,1,'kyo/bench/NarrowBindMapBench$$anon$6.apply')
f(16,824,553,1,'kyo/bench/NarrowBindMapBench$$anon$5.apply')
f(17,824,553,1,'kyo/bench/NarrowBindMapBench$$anon$4.apply')
f(18,824,553,1,'kyo/bench/NarrowBindMapBench$$anon$3.apply')
f(19,824,553,1,'kyo/bench/NarrowBindMapBench$$anon$2.apply')
f(20,824,553,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(21,824,553,1,'kyo/bench/NarrowBindMapBench$$Lambda$57.0x0000000800d48c90.apply')
f(22,824,553,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$1')
f(23,824,553,1,'kyo/bench/NarrowBindMapBench.$anonfun$1')
f(24,824,553,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(25,824,553,1,'java/lang/Integer.valueOf')
f(26,824,553,2,'java.lang.Integer')
f(10,1377,10514,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11')
f(11,1377,10514,1,'kyo/bench/NarrowBindMapBench$$Lambda$67.0x0000000800d4c830.apply')
f(12,1377,10514,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$11')
f(13,1377,10514,1,'kyo/bench/NarrowBindMapBench.$anonfun$11')
f(14,1377,10514,1,'kyo/bench/NarrowBindMapBench.loop$1')
f(15,1377,522,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,1377,522,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,1377,522,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,1377,522,2,'kyo.bench.NarrowBindMapBench$$Lambda$67+0x0000000800d4c830')
f(15,1899,464,2,'kyo.bench.NarrowBindMapBench$$anon$1')
f(15,2363,801,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(16,2363,801,2,'kyo.bench.NarrowBindMapBench$$anon$2')
f(15,3164,800,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$transformLoop$2')
f(16,3164,800,2,'kyo.bench.NarrowBindMapBench$$anon$3')
f(15,3964,1064,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$transformLoop$3')
f(16,3964,1064,2,'kyo.bench.NarrowBindMapBench$$anon$4')
f(15,5028,629,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$transformLoop$4')
f(16,5028,629,2,'kyo.bench.NarrowBindMapBench$$anon$5')
f(15,5657,1188,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$transformLoop$5')
f(16,5657,1188,2,'kyo.bench.NarrowBindMapBench$$anon$6')
f(15,6845,530,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$transformLoop$6')
f(16,6845,530,2,'kyo.bench.NarrowBindMapBench$$anon$7')
f(15,7375,1364,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$transformLoop$7')
f(16,7375,1364,2,'kyo.bench.NarrowBindMapBench$$anon$8')
f(15,8739,338,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$transformLoop$8')
f(16,8739,338,2,'kyo.bench.NarrowBindMapBench$$anon$9')
f(15,9077,1405,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$transformLoop$9')
f(16,9077,1405,2,'kyo.bench.NarrowBindMapBench$$anon$10')
f(15,10482,541,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$transformLoop$10')
f(16,10482,541,2,'kyo.bench.NarrowBindMapBench$$anon$11')
f(15,11023,868,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11')
f(16,11023,868,2,'kyo.bench.NarrowBindMapBench$$anon$12')
f(9,11891,100,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,11891,100,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,11891,100,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c80820.apply')
f(12,11891,100,1,'kyo/bench/Bench.$anonfun$1')
f(13,11891,100,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,11891,100,1,'kyo/bench/NarrowBindMapBench.kyoBench')
f(15,11891,100,2,'kyo.bench.NarrowBindMapBench$$anon$14')
f(1,11991,5,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,11991,5,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,11991,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,11991,5,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,11991,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,11991,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,11991,2,1,'jdk/proxy1/$Proxy0.iterationResult')
f(8,11991,2,1,'org/openjdk/jmh/runner/link/BinaryLinkClient$$Lambda$8.0x0000000800c01c70.invoke')
f(9,11991,2,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.lambda$new$0')
f(10,11991,2,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushFrame')
f(11,11991,2,1,'java/io/ObjectOutputStream.writeObject')
f(12,11991,2,1,'java/io/ObjectOutputStream.writeObject0')
f(13,11991,2,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(14,11991,2,1,'java/io/ObjectOutputStream.writeSerialData')
f(15,11991,2,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(16,11991,2,1,'java/io/ObjectOutputStream.writeObject0')
f(17,11991,2,1,'java/io/ObjectOutputStream.writeArray')
f(18,11991,2,1,'java/io/ObjectOutputStream.writeObject0')
f(19,11991,2,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(20,11991,2,1,'java/io/ObjectOutputStream.writeSerialData')
f(21,11991,2,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(22,11991,2,1,'java/io/ObjectOutputStream.writeObject0')
f(23,11991,2,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(24,11991,2,1,'java/io/ObjectOutputStream.writeSerialData')
f(25,11991,2,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(26,11991,2,1,'java/io/ObjectOutputStream.writeObject0')
f(27,11991,2,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(28,11991,2,1,'java/io/ObjectOutputStream.writeSerialData')
f(29,11991,2,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(30,11991,2,1,'java/io/ObjectOutputStream.writeObject0')
f(31,11991,2,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(32,11991,2,1,'java/io/ObjectOutputStream$HandleTable.assign')
f(33,11991,2,1,'java/io/ObjectOutputStream$HandleTable.growEntries')
f(34,11991,1,2,'int[]')
f(34,11992,1,2,'java.lang.Object[]')
f(7,11993,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,11993,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,11993,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,11993,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,11993,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,11993,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,11993,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 560px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(35);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,292,3,'all')
f(1,0,1,3,'[unknown_Java]')
f(2,0,1,1,'kyo/bench/NarrowBindMapBench$$anon$12.apply')
f(1,1,291,1,'java/lang/Thread.run')
f(2,1,291,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,1,291,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,1,2,1,'java/util/concurrent/FutureTask.run')
f(5,1,2,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,1,2,1,'java/util/concurrent/FutureTask.run')
f(7,1,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,1,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,1,2,1,'java/lang/reflect/Method.invoke')
f(10,1,2,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,1,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,1,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,1,2,1,'kyo/bench/jmh_generated/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,1,2,0,'kyo/bench/jmh_generated/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub',0,0,1)
f(15,2,1,1,'kyo/bench/Bench.forkKyo')
f(16,2,1,1,'kyo/bench/Bench.runLoop$2')
f(17,2,1,1,'kyo/bench/Bench$$anon$1.apply')
f(18,2,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,2,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,2,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c81f78.apply')
f(21,2,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,2,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,2,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,2,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,2,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,2,1,1,'jdk/internal/misc/Unsafe.unpark')
f(27,2,1,3,'pthread_cond_signal')
f(28,2,1,5,'entry_SYSCALL_64_after_hwframe')
f(29,2,1,5,'do_syscall_64')
f(30,2,1,5,'__x64_sys_futex')
f(31,2,1,5,'do_futex')
f(32,2,1,5,'futex_wake')
f(33,2,1,5,'wake_up_q')
f(34,2,1,5,'_raw_spin_unlock_irqrestore')
f(4,3,289,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d22b68.run')
f(5,3,289,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,3,1,1,'kyo/bench/NarrowBindMapBench$$anon$12.apply')
f(7,3,1,2,'kyo/bench/NarrowBindMapBench$$anon$11.apply',1,0,0)
f(8,3,1,2,'kyo/bench/NarrowBindMapBench$$anon$10.apply',1,0,0)
f(9,3,1,2,'kyo/bench/NarrowBindMapBench$$anon$9.apply',1,0,0)
f(10,3,1,2,'kyo/bench/NarrowBindMapBench$$anon$8.apply',1,0,0)
f(11,3,1,2,'kyo/bench/NarrowBindMapBench$$anon$7.apply',1,0,0)
f(12,3,1,2,'kyo/bench/NarrowBindMapBench$$anon$6.apply',1,0,0)
f(13,3,1,2,'kyo/bench/NarrowBindMapBench$$anon$5.apply',1,0,0)
f(14,3,1,2,'kyo/bench/NarrowBindMapBench$$anon$4.apply',1,0,0)
f(15,3,1,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$transformLoop$3',1,0,0)
f(6,4,288,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,4,286,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,4,286,1,'kyo/concurrent/scheduler/IOTask.eval',13,0,0)
f(9,15,270,1,'kyo/bench/NarrowBindMapBench$$anon$12.apply')
f(10,15,270,2,'kyo/bench/NarrowBindMapBench$$anon$11.apply',270,0,0)
f(11,15,270,2,'kyo/bench/NarrowBindMapBench$$anon$10.apply',270,0,0)
f(12,20,265,2,'kyo/bench/NarrowBindMapBench$$anon$9.apply',265,0,0)
f(13,21,264,2,'kyo/bench/NarrowBindMapBench$$anon$8.apply',264,0,0)
f(14,21,264,2,'kyo/bench/NarrowBindMapBench$$anon$7.apply',264,0,0)
f(15,23,262,2,'kyo/bench/NarrowBindMapBench$$anon$6.apply',262,0,0)
f(16,24,261,2,'kyo/bench/NarrowBindMapBench$$anon$5.apply',261,0,0)
f(17,30,248,2,'kyo/bench/NarrowBindMapBench$$anon$4.apply',248,0,0)
f(18,30,178,2,'kyo/bench/NarrowBindMapBench$$anon$3.apply',178,0,0)
f(19,64,95,2,'kyo/bench/NarrowBindMapBench$$anon$2.apply',95,0,0)
f(20,133,15,2,'kyo/bench/NarrowBindMapBench$$anon$1.apply',15,0,0)
f(21,143,5,2,'kyo/bench/NarrowBindMapBench$$anon$1.apply',5,0,0)
f(22,147,1,2,'scala/runtime/BoxesRunTime.boxToInteger',1,0,0)
f(20,148,11,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1',11,0,0)
f(21,150,9,2,'kyo/bench/NarrowBindMapBench$$Lambda$57.0x0000000800d49320.apply',9,0,0)
f(22,154,5,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$1',5,0,0)
f(19,159,49,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$transformLoop$2',49,0,0)
f(20,193,2,2,'kyo/bench/NarrowBindMapBench$$Lambda$58.0x0000000800d4a3f8.apply',2,0,0)
f(20,195,4,2,'scala/runtime/BoxesRunTime.boxToInteger',4,0,0)
f(20,199,9,2,'scala/runtime/BoxesRunTime.unboxToInt',9,0,0)
f(18,208,70,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$transformLoop$3',70,0,0)
f(19,271,7,2,'kyo/bench/NarrowBindMapBench$$Lambda$59.0x0000000800d4a9f0.apply',7,0,0)
f(20,271,7,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$3',7,0,0)
f(21,271,6,2,'kyo/bench/NarrowBindMapBench.$anonfun$3',6,0,0)
f(21,277,1,2,'scala/runtime/BoxesRunTime.unboxToInt',1,0,0)
f(17,278,7,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$transformLoop$4',7,0,0)
f(18,279,4,2,'kyo/bench/NarrowBindMapBench$$Lambda$60.0x0000000800d4adb8.apply',4,0,0)
f(19,279,4,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$4',4,0,0)
f(20,279,4,2,'scala/runtime/BoxesRunTime.unboxToInt',4,0,0)
f(18,283,2,2,'scala/runtime/BoxesRunTime.unboxToInt',2,0,0)
f(9,285,2,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',2,0,0)
f(9,287,3,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,287,3,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,287,3,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,287,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,287,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,287,3,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,287,3,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,287,3,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,287,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,287,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,287,3,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,287,3,1,'jdk/internal/misc/Unsafe.unpark')
f(21,287,3,3,'pthread_cond_signal')
f(22,287,3,5,'entry_SYSCALL_64_after_hwframe')
f(23,287,3,5,'do_syscall_64')
f(24,287,3,5,'__x64_sys_futex')
f(25,287,3,5,'do_futex')
f(26,287,3,5,'futex_wake')
f(27,287,3,5,'wake_up_q')
f(28,288,2,5,'_raw_spin_unlock_irqrestore')
f(7,290,2,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,290,2,1,'kyo/concurrent/scheduler/Worker.park')
f(9,290,2,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,290,2,1,'jdk/internal/misc/Unsafe.park')
f(11,290,2,3,'[unknown]')
f(12,290,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,290,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,290,1,5,'do_syscall_64')
f(15,290,1,5,'__x64_sys_futex')
f(16,290,1,5,'do_futex')
f(17,290,1,5,'futex_wait')
f(18,290,1,5,'futex_wait_queue_me')
f(19,290,1,5,'schedule')
f(20,290,1,5,'__schedule')
f(21,290,1,5,'finish_task_switch.isra.0')
f(12,291,1,3,'pthread_cond_timedwait')
search();
</script></body></html>
This file has been truncated, but you can view the full file.
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 432px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(27);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search
View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment