Skip to content

Instantly share code, notes, and snippets.

@fwbrasil
Created June 10, 2023 23:35
Show Gist options
  • Save fwbrasil/98ce2cafc4814a5d525968c1cb263d86 to your computer and use it in GitHub Desktop.
Save fwbrasil/98ce2cafc4814a5d525968c1cb263d86 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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 49433.33448662027,
"scoreError" : 34330.11858202846,
"scoreConfidence" : [
15103.215904591809,
83763.45306864873
],
"scorePercentiles" : {
"0.0" : 47263.14791797159,
"50.0" : 50425.15716790559,
"90.0" : 50611.69837398363,
"95.0" : 50611.69837398363,
"99.0" : 50611.69837398363,
"99.9" : 50611.69837398363,
"99.99" : 50611.69837398363,
"99.999" : 50611.69837398363,
"99.9999" : 50611.69837398363,
"100.0" : 50611.69837398363
},
"scoreUnit" : "ops/s",
"rawData" : [
[
47263.14791797159,
50425.15716790559,
50611.69837398363
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 206898.30022461692,
"scoreError" : 6776.222625366475,
"scoreConfidence" : [
200122.07759925045,
213674.5228499834
],
"scorePercentiles" : {
"0.0" : 206529.94104873907,
"50.0" : 206892.23754442838,
"90.0" : 207272.7220806833,
"95.0" : 207272.7220806833,
"99.0" : 207272.7220806833,
"99.9" : 207272.7220806833,
"99.99" : 207272.7220806833,
"99.999" : 207272.7220806833,
"99.9999" : 207272.7220806833,
"100.0" : 207272.7220806833
},
"scoreUnit" : "ops/s",
"rawData" : [
[
206529.94104873907,
206892.23754442838,
207272.7220806833
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1275.243264502704,
"scoreError" : 516.7970787034675,
"scoreConfidence" : [
758.4461857992366,
1792.0403432061717
],
"scorePercentiles" : {
"0.0" : 1242.8589479379984,
"50.0" : 1287.4500554092315,
"90.0" : 1295.4207901608825,
"95.0" : 1295.4207901608825,
"99.0" : 1295.4207901608825,
"99.9" : 1295.4207901608825,
"99.99" : 1295.4207901608825,
"99.999" : 1295.4207901608825,
"99.9999" : 1295.4207901608825,
"100.0" : 1295.4207901608825
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1287.4500554092315,
1242.8589479379984,
1295.4207901608825
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1298.0390031137492,
"scoreError" : 343.4312501078767,
"scoreConfidence" : [
954.6077530058726,
1641.4702532216259
],
"scorePercentiles" : {
"0.0" : 1278.7880408822239,
"50.0" : 1298.92280980844,
"90.0" : 1316.4061586505834,
"95.0" : 1316.4061586505834,
"99.0" : 1316.4061586505834,
"99.9" : 1316.4061586505834,
"99.99" : 1316.4061586505834,
"99.999" : 1316.4061586505834,
"99.9999" : 1316.4061586505834,
"100.0" : 1316.4061586505834
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1316.4061586505834,
1298.92280980844,
1278.7880408822239
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 22300.945314991393,
"scoreError" : 10475.672395511208,
"scoreConfidence" : [
11825.272919480185,
32776.6177105026
],
"scorePercentiles" : {
"0.0" : 21958.323609726827,
"50.0" : 21980.655313584208,
"90.0" : 22963.857021663152,
"95.0" : 22963.857021663152,
"99.0" : 22963.857021663152,
"99.9" : 22963.857021663152,
"99.99" : 22963.857021663152,
"99.999" : 22963.857021663152,
"99.9999" : 22963.857021663152,
"100.0" : 22963.857021663152
},
"scoreUnit" : "ops/s",
"rawData" : [
[
21958.323609726827,
21980.655313584208,
22963.857021663152
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 39834.95875813011,
"scoreError" : 566.2607136318119,
"scoreConfidence" : [
39268.6980444983,
40401.21947176192
],
"scorePercentiles" : {
"0.0" : 39805.4068228711,
"50.0" : 39832.17309753384,
"90.0" : 39867.29635398537,
"95.0" : 39867.29635398537,
"99.0" : 39867.29635398537,
"99.9" : 39867.29635398537,
"99.99" : 39867.29635398537,
"99.999" : 39867.29635398537,
"99.9999" : 39867.29635398537,
"100.0" : 39867.29635398537
},
"scoreUnit" : "ops/s",
"rawData" : [
[
39832.17309753384,
39805.4068228711,
39867.29635398537
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 10748.72382434513,
"scoreError" : 1560.6558390002772,
"scoreConfidence" : [
9188.067985344853,
12309.379663345408
],
"scorePercentiles" : {
"0.0" : 10657.507309526227,
"50.0" : 10761.5056358044,
"90.0" : 10827.158527704767,
"95.0" : 10827.158527704767,
"99.0" : 10827.158527704767,
"99.9" : 10827.158527704767,
"99.99" : 10827.158527704767,
"99.999" : 10827.158527704767,
"99.9999" : 10827.158527704767,
"100.0" : 10827.158527704767
},
"scoreUnit" : "ops/s",
"rawData" : [
[
10761.5056358044,
10827.158527704767,
10657.507309526227
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 11282.113185765957,
"scoreError" : 1533.2535607449834,
"scoreConfidence" : [
9748.859625020974,
12815.36674651094
],
"scorePercentiles" : {
"0.0" : 11219.14563229502,
"50.0" : 11249.647702348995,
"90.0" : 11377.546222653855,
"95.0" : 11377.546222653855,
"99.0" : 11377.546222653855,
"99.9" : 11377.546222653855,
"99.99" : 11377.546222653855,
"99.999" : 11377.546222653855,
"99.9999" : 11377.546222653855,
"100.0" : 11377.546222653855
},
"scoreUnit" : "ops/s",
"rawData" : [
[
11219.14563229502,
11249.647702348995,
11377.546222653855
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 20914.897374984885,
"scoreError" : 2906.2915548140086,
"scoreConfidence" : [
18008.605820170877,
23821.188929798893
],
"scorePercentiles" : {
"0.0" : 20800.716960439982,
"50.0" : 20847.08851646488,
"90.0" : 21096.8866480498,
"95.0" : 21096.8866480498,
"99.0" : 21096.8866480498,
"99.9" : 21096.8866480498,
"99.99" : 21096.8866480498,
"99.999" : 21096.8866480498,
"99.9999" : 21096.8866480498,
"100.0" : 21096.8866480498
},
"scoreUnit" : "ops/s",
"rawData" : [
[
21096.8866480498,
20800.716960439982,
20847.08851646488
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 40637.517749842285,
"scoreError" : 987.0646396179663,
"scoreConfidence" : [
39650.45311022432,
41624.58238946025
],
"scorePercentiles" : {
"0.0" : 40593.80663134862,
"50.0" : 40620.7173446569,
"90.0" : 40698.02927352134,
"95.0" : 40698.02927352134,
"99.0" : 40698.02927352134,
"99.9" : 40698.02927352134,
"99.99" : 40698.02927352134,
"99.999" : 40698.02927352134,
"99.9999" : 40698.02927352134,
"100.0" : 40698.02927352134
},
"scoreUnit" : "ops/s",
"rawData" : [
[
40620.7173446569,
40593.80663134862,
40698.02927352134
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1334.5810974859405,
"scoreError" : 354.7071984565343,
"scoreConfidence" : [
979.8738990294062,
1689.2882959424749
],
"scorePercentiles" : {
"0.0" : 1316.5359684664104,
"50.0" : 1332.036531316716,
"90.0" : 1355.1707926746951,
"95.0" : 1355.1707926746951,
"99.0" : 1355.1707926746951,
"99.9" : 1355.1707926746951,
"99.99" : 1355.1707926746951,
"99.999" : 1355.1707926746951,
"99.9999" : 1355.1707926746951,
"100.0" : 1355.1707926746951
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1316.5359684664104,
1355.1707926746951,
1332.036531316716
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1620.6018822748945,
"scoreError" : 7.771453890247212,
"scoreConfidence" : [
1612.8304283846473,
1628.3733361651416
],
"scorePercentiles" : {
"0.0" : 1620.1733098090165,
"50.0" : 1620.6071162168155,
"90.0" : 1621.025220798851,
"95.0" : 1621.025220798851,
"99.0" : 1621.025220798851,
"99.9" : 1621.025220798851,
"99.99" : 1621.025220798851,
"99.999" : 1621.025220798851,
"99.9999" : 1621.025220798851,
"100.0" : 1621.025220798851
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1621.025220798851,
1620.6071162168155,
1620.1733098090165
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1937.9922991903356,
"scoreError" : 252.89008028290567,
"scoreConfidence" : [
1685.10221890743,
2190.882379473241
],
"scorePercentiles" : {
"0.0" : 1929.7792332557156,
"50.0" : 1930.2010376750782,
"90.0" : 1953.9966266402134,
"95.0" : 1953.9966266402134,
"99.0" : 1953.9966266402134,
"99.9" : 1953.9966266402134,
"99.99" : 1953.9966266402134,
"99.999" : 1953.9966266402134,
"99.9999" : 1953.9966266402134,
"100.0" : 1953.9966266402134
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1930.2010376750782,
1929.7792332557156,
1953.9966266402134
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1802.3165711336114,
"scoreError" : 481.72320210056097,
"scoreConfidence" : [
1320.5933690330505,
2284.0397732341726
],
"scorePercentiles" : {
"0.0" : 1771.9494873427825,
"50.0" : 1815.134199138353,
"90.0" : 1819.866026919698,
"95.0" : 1819.866026919698,
"99.0" : 1819.866026919698,
"99.9" : 1819.866026919698,
"99.99" : 1819.866026919698,
"99.999" : 1819.866026919698,
"99.9999" : 1819.866026919698,
"100.0" : 1819.866026919698
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1815.134199138353,
1819.866026919698,
1771.9494873427825
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 578.7050924093872,
"scoreError" : 121.2221710330861,
"scoreConfidence" : [
457.48292137630114,
699.9272634424733
],
"scorePercentiles" : {
"0.0" : 573.2089384188636,
"50.0" : 576.8169125437895,
"90.0" : 586.0894262655086,
"95.0" : 586.0894262655086,
"99.0" : 586.0894262655086,
"99.9" : 586.0894262655086,
"99.99" : 586.0894262655086,
"99.999" : 586.0894262655086,
"99.9999" : 586.0894262655086,
"100.0" : 586.0894262655086
},
"scoreUnit" : "ops/s",
"rawData" : [
[
586.0894262655086,
576.8169125437895,
573.2089384188636
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 597.7933606684827,
"scoreError" : 22.994164262810017,
"scoreConfidence" : [
574.7991964056727,
620.7875249312928
],
"scorePercentiles" : {
"0.0" : 596.3626719833528,
"50.0" : 598.2775672736881,
"90.0" : 598.7398427484071,
"95.0" : 598.7398427484071,
"99.0" : 598.7398427484071,
"99.9" : 598.7398427484071,
"99.99" : 598.7398427484071,
"99.999" : 598.7398427484071,
"99.9999" : 598.7398427484071,
"100.0" : 598.7398427484071
},
"scoreUnit" : "ops/s",
"rawData" : [
[
596.3626719833528,
598.2775672736881,
598.7398427484071
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 4153.848922266585,
"scoreError" : 558.2482359217848,
"scoreConfidence" : [
3595.6006863448,
4712.09715818837
],
"scorePercentiles" : {
"0.0" : 4118.828539262177,
"50.0" : 4167.296218679997,
"90.0" : 4175.42200885758,
"95.0" : 4175.42200885758,
"99.0" : 4175.42200885758,
"99.9" : 4175.42200885758,
"99.99" : 4175.42200885758,
"99.999" : 4175.42200885758,
"99.9999" : 4175.42200885758,
"100.0" : 4175.42200885758
},
"scoreUnit" : "ops/s",
"rawData" : [
[
4175.42200885758,
4167.296218679997,
4118.828539262177
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 4128.949635962572,
"scoreError" : 701.984792408956,
"scoreConfidence" : [
3426.964843553616,
4830.934428371528
],
"scorePercentiles" : {
"0.0" : 4084.99584266194,
"50.0" : 4145.303680178411,
"90.0" : 4156.549385047366,
"95.0" : 4156.549385047366,
"99.0" : 4156.549385047366,
"99.9" : 4156.549385047366,
"99.99" : 4156.549385047366,
"99.999" : 4156.549385047366,
"99.9999" : 4156.549385047366,
"100.0" : 4156.549385047366
},
"scoreUnit" : "ops/s",
"rawData" : [
[
4145.303680178411,
4156.549385047366,
4084.99584266194
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 9732.468681231496,
"scoreError" : 3340.5307197468783,
"scoreConfidence" : [
6391.9379614846175,
13072.999400978373
],
"scorePercentiles" : {
"0.0" : 9521.052217335973,
"50.0" : 9835.934424044171,
"90.0" : 9840.419402314343,
"95.0" : 9840.419402314343,
"99.0" : 9840.419402314343,
"99.9" : 9840.419402314343,
"99.99" : 9840.419402314343,
"99.999" : 9840.419402314343,
"99.9999" : 9840.419402314343,
"100.0" : 9840.419402314343
},
"scoreUnit" : "ops/s",
"rawData" : [
[
9840.419402314343,
9835.934424044171,
9521.052217335973
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 14456.161446693653,
"scoreError" : 227.21907994191756,
"scoreConfidence" : [
14228.942366751737,
14683.38052663557
],
"scorePercentiles" : {
"0.0" : 14442.06186085621,
"50.0" : 14460.757787201306,
"90.0" : 14465.664692023449,
"95.0" : 14465.664692023449,
"99.0" : 14465.664692023449,
"99.9" : 14465.664692023449,
"99.99" : 14465.664692023449,
"99.999" : 14465.664692023449,
"99.9999" : 14465.664692023449,
"100.0" : 14465.664692023449
},
"scoreUnit" : "ops/s",
"rawData" : [
[
14442.06186085621,
14465.664692023449,
14460.757787201306
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1452.007784652554,
"scoreError" : 106.07838435122866,
"scoreConfidence" : [
1345.9294003013254,
1558.0861690037825
],
"scorePercentiles" : {
"0.0" : 1446.2685077604135,
"50.0" : 1451.8601228396567,
"90.0" : 1457.8947233575914,
"95.0" : 1457.8947233575914,
"99.0" : 1457.8947233575914,
"99.9" : 1457.8947233575914,
"99.99" : 1457.8947233575914,
"99.999" : 1457.8947233575914,
"99.9999" : 1457.8947233575914,
"100.0" : 1457.8947233575914
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1451.8601228396567,
1457.8947233575914,
1446.2685077604135
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1693.2743704231862,
"scoreError" : 8.17226909853723,
"scoreConfidence" : [
1685.1021013246489,
1701.4466395217235
],
"scorePercentiles" : {
"0.0" : 1692.8537822468709,
"50.0" : 1693.2239192827165,
"90.0" : 1693.7454097399711,
"95.0" : 1693.7454097399711,
"99.0" : 1693.7454097399711,
"99.9" : 1693.7454097399711,
"99.99" : 1693.7454097399711,
"99.999" : 1693.7454097399711,
"99.9999" : 1693.7454097399711,
"100.0" : 1693.7454097399711
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1693.7454097399711,
1692.8537822468709,
1693.2239192827165
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 2135.70409064813,
"scoreError" : 68.70587300339884,
"scoreConfidence" : [
2066.9982176447315,
2204.409963651529
],
"scorePercentiles" : {
"0.0" : 2131.9124879888395,
"50.0" : 2135.755827579256,
"90.0" : 2139.443956376294,
"95.0" : 2139.443956376294,
"99.0" : 2139.443956376294,
"99.9" : 2139.443956376294,
"99.99" : 2139.443956376294,
"99.999" : 2139.443956376294,
"99.9999" : 2139.443956376294,
"100.0" : 2139.443956376294
},
"scoreUnit" : "ops/s",
"rawData" : [
[
2131.9124879888395,
2139.443956376294,
2135.755827579256
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 2144.7254334418526,
"scoreError" : 115.1372779312219,
"scoreConfidence" : [
2029.5881555106307,
2259.8627113730745
],
"scorePercentiles" : {
"0.0" : 2137.942490264558,
"50.0" : 2145.809682890136,
"90.0" : 2150.4241271708643,
"95.0" : 2150.4241271708643,
"99.0" : 2150.4241271708643,
"99.9" : 2150.4241271708643,
"99.99" : 2150.4241271708643,
"99.999" : 2150.4241271708643,
"99.9999" : 2150.4241271708643,
"100.0" : 2150.4241271708643
},
"scoreUnit" : "ops/s",
"rawData" : [
[
2150.4241271708643,
2145.809682890136,
2137.942490264558
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1747.4642316396282,
"scoreError" : 288.27505969217964,
"scoreConfidence" : [
1459.1891719474486,
2035.7392913318079
],
"scorePercentiles" : {
"0.0" : 1731.442260893152,
"50.0" : 1747.9151686859611,
"90.0" : 1763.0352653397708,
"95.0" : 1763.0352653397708,
"99.0" : 1763.0352653397708,
"99.9" : 1763.0352653397708,
"99.99" : 1763.0352653397708,
"99.999" : 1763.0352653397708,
"99.9999" : 1763.0352653397708,
"100.0" : 1763.0352653397708
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1731.442260893152,
1747.9151686859611,
1763.0352653397708
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1681.904961659089,
"scoreError" : 615.5788135891949,
"scoreConfidence" : [
1066.326148069894,
2297.4837752482836
],
"scorePercentiles" : {
"0.0" : 1645.107611376209,
"50.0" : 1689.2137503922386,
"90.0" : 1711.3935232088193,
"95.0" : 1711.3935232088193,
"99.0" : 1711.3935232088193,
"99.9" : 1711.3935232088193,
"99.99" : 1711.3935232088193,
"99.999" : 1711.3935232088193,
"99.9999" : 1711.3935232088193,
"100.0" : 1711.3935232088193
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1689.2137503922386,
1711.3935232088193,
1645.107611376209
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1215.9739503311228,
"scoreError" : 480.7138929787986,
"scoreConfidence" : [
735.2600573523241,
1696.6878433099214
],
"scorePercentiles" : {
"0.0" : 1189.5009888716554,
"50.0" : 1216.2225309633043,
"90.0" : 1242.1983311584086,
"95.0" : 1242.1983311584086,
"99.0" : 1242.1983311584086,
"99.9" : 1242.1983311584086,
"99.99" : 1242.1983311584086,
"99.999" : 1242.1983311584086,
"99.9999" : 1242.1983311584086,
"100.0" : 1242.1983311584086
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1189.5009888716554,
1216.2225309633043,
1242.1983311584086
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1211.293026244287,
"scoreError" : 383.9267277263602,
"scoreConfidence" : [
827.3662985179267,
1595.2197539706472
],
"scorePercentiles" : {
"0.0" : 1194.6404896696008,
"50.0" : 1204.2933965054146,
"90.0" : 1234.945192557845,
"95.0" : 1234.945192557845,
"99.0" : 1234.945192557845,
"99.9" : 1234.945192557845,
"99.99" : 1234.945192557845,
"99.999" : 1234.945192557845,
"99.9999" : 1234.945192557845,
"100.0" : 1234.945192557845
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1194.6404896696008,
1204.2933965054146,
1234.945192557845
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 60846.74656167853,
"scoreError" : 6337.974183456605,
"scoreConfidence" : [
54508.772378221925,
67184.72074513513
],
"scorePercentiles" : {
"0.0" : 60447.85269517231,
"50.0" : 61009.40329725908,
"90.0" : 61082.98369260418,
"95.0" : 61082.98369260418,
"99.0" : 61082.98369260418,
"99.9" : 61082.98369260418,
"99.99" : 61082.98369260418,
"99.999" : 61082.98369260418,
"99.9999" : 61082.98369260418,
"100.0" : 61082.98369260418
},
"scoreUnit" : "ops/s",
"rawData" : [
[
60447.85269517231,
61082.98369260418,
61009.40329725908
]
]
},
"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" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1134252.9717662383,
"scoreError" : 12961.879371651097,
"scoreConfidence" : [
1121291.0923945874,
1147214.8511378893
],
"scorePercentiles" : {
"0.0" : 1133532.2966785636,
"50.0" : 1134273.8117846232,
"90.0" : 1134952.8068355287,
"95.0" : 1134952.8068355287,
"99.0" : 1134952.8068355287,
"99.9" : 1134952.8068355287,
"99.99" : 1134952.8068355287,
"99.999" : 1134952.8068355287,
"99.9999" : 1134952.8068355287,
"100.0" : 1134952.8068355287
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1134952.8068355287,
1133532.2966785636,
1134273.8117846232
]
]
},
"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: 384px}
</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(24);
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,45,3,'all')
f(1,0,45,1,'java/lang/Thread.run')
f(2,0,45,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,45,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,39,1,'java/util/concurrent/FutureTask.run')
f(5,0,39,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,39,1,'java/util/concurrent/FutureTask.run')
f(7,0,39,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,39,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,39,1,'java/lang/reflect/Method.invoke')
f(10,0,39,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,39,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,39,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,39,1,'kyo/bench/jmh_generated/BroadFlatMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,39,1,'kyo/bench/jmh_generated/BroadFlatMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,39,1,'kyo/bench/Bench.forkKyo')
f(16,0,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,2,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3e9f8')
f(16,2,3,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,2,3,2,'kyo.bench.Bench$$anon$1')
f(16,5,26,1,'kyo/bench/Bench.runLoop$2')
f(17,5,18,1,'kyo/bench/Bench$$anon$1.apply')
f(18,5,1,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,5,1,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c82da8.apply')
f(20,5,1,1,'kyo/bench/Bench.$anonfun$2')
f(21,5,1,1,'kyo/concurrent/fibers$Fiber.block')
f(22,5,1,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,6,17,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,6,17,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,6,17,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(21,6,17,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,6,2,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,8,13,2,'kyo.concurrent.scheduler.IOTask')
f(22,21,2,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,21,2,2,'kyo.concurrent.fibers$Fiber')
f(17,23,8,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,23,8,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,23,8,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,23,8,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,23,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,23,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,23,2,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(21,25,2,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,27,4,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,27,4,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,27,4,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,31,8,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,7,1,'kyo/locals$Locals$.save')
f(18,32,7,2,'kyo.locals$Locals$$anon$3')
f(4,39,6,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,39,6,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,39,6,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,39,6,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,39,6,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,39,6,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,39,6,1,'scala/runtime/ObjectRef.create')
f(11,39,6,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: 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,198,3,'all')
f(1,0,2,3,'[unknown_Java]')
f(2,0,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(1,2,196,1,'java/lang/Thread.run')
f(2,2,196,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,2,196,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,2,64,1,'java/util/concurrent/FutureTask.run')
f(5,2,64,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,2,64,1,'java/util/concurrent/FutureTask.run')
f(7,2,64,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,2,64,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,2,64,1,'java/lang/reflect/Method.invoke')
f(10,2,64,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,2,64,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,2,64,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,2,64,1,'kyo/bench/jmh_generated/BroadFlatMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,2,64,1,'kyo/bench/jmh_generated/BroadFlatMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,2,64,1,'kyo/bench/Bench.forkKyo')
f(16,2,62,1,'kyo/bench/Bench.runLoop$2')
f(17,2,29,1,'kyo/bench/Bench$$anon$1.apply')
f(18,2,29,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,2,29,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,2,29,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply',2,0,0)
f(21,2,29,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',2,0,0)
f(22,2,1,2,'kyo/concurrent/scheduler/IOTask.<init>',1,0,0)
f(23,2,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(24,2,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(25,2,1,2,'java/util/concurrent/atomic/AtomicReference.<init>',1,0,0)
f(22,3,28,1,'kyo/concurrent/scheduler/Scheduler$.schedule',1,0,0)
f(23,3,28,1,'kyo/concurrent/scheduler/Scheduler$.submit',1,0,0)
f(24,3,28,1,'kyo/concurrent/scheduler/Worker.enqueue',1,0,0)
f(25,3,27,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,3,27,1,'jdk/internal/misc/Unsafe.unpark')
f(27,3,1,3,'Unsafe_Unpark')
f(28,3,1,4,'ThreadsListHandle::cv_internal_thread_to_JavaThread(_jobject*, JavaThread**, oopDesc**)')
f(27,4,26,3,'pthread_cond_signal')
f(28,6,24,5,'entry_SYSCALL_64_after_hwframe')
f(29,6,24,5,'do_syscall_64')
f(30,6,24,5,'__x64_sys_futex')
f(31,6,24,5,'do_futex')
f(32,6,23,5,'futex_wake')
f(33,7,22,5,'wake_up_q')
f(34,7,22,5,'_raw_spin_unlock_irqrestore')
f(32,29,1,5,'hash_futex')
f(25,30,1,2,'kyo/concurrent/scheduler/Queue.offer',1,0,0)
f(26,30,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(27,30,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(28,30,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(17,31,33,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,31,33,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,31,33,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,31,33,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,31,33,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,31,33,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,31,33,1,'java/util/concurrent/locks/LockSupport.park')
f(24,31,33,1,'jdk/internal/misc/Unsafe.park')
f(25,31,1,4,'AccessInternal::PostRuntimeDispatch<G1BarrierSet::AccessBarrier<548964ul, G1BarrierSet>, (AccessInternal::BarrierType)2, 548964ul>::oop_access_barrier(void*)')
f(25,32,2,3,'Unsafe_Park')
f(26,32,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,32,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,32,1,5,'do_syscall_64')
f(29,32,1,5,'syscall_enter_from_user_mode')
f(26,33,1,4,'Parker::park(bool, long)')
f(25,34,30,3,'[unknown]')
f(26,34,30,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,36,28,5,'entry_SYSCALL_64_after_hwframe')
f(28,36,1,5,'__x64_sys_futex')
f(28,37,27,5,'do_syscall_64')
f(29,37,23,5,'__x64_sys_futex')
f(30,37,23,5,'do_futex')
f(31,37,23,5,'futex_wait')
f(32,39,1,5,'__get_user_nocheck_4')
f(32,40,17,5,'futex_wait_queue_me')
f(33,40,17,5,'schedule')
f(34,41,16,5,'__schedule')
f(35,43,14,5,'finish_task_switch.isra.0')
f(32,57,1,5,'futex_wait_setup')
f(32,58,1,5,'hash_futex')
f(32,59,1,5,'plist_add')
f(29,60,4,5,'syscall_enter_from_user_mode')
f(16,64,2,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,64,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,64,2,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply',2,0,0)
f(19,64,2,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',2,0,0)
f(20,64,1,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',1,0,0)
f(21,64,1,2,'kyo/ios$KyoIO.<init>',1,0,0)
f(22,64,1,2,'kyo/core$internal$Kyo.<init>',1,0,0)
f(23,64,1,5,'asm_exc_page_fault')
f(24,64,1,5,'exc_page_fault')
f(25,64,1,5,'do_user_addr_fault')
f(26,64,1,5,'handle_mm_fault')
f(27,64,1,5,'__handle_mm_fault')
f(28,64,1,5,'do_huge_pmd_anonymous_page')
f(29,64,1,5,'__do_huge_pmd_anonymous_page')
f(30,64,1,5,'clear_huge_page')
f(31,64,1,5,'clear_page_erms')
f(20,65,1,2,'kyo/concurrent/scheduler/Scheduler$.schedule',1,0,0)
f(21,65,1,2,'kyo/concurrent/scheduler/Scheduler$.submit',1,0,0)
f(22,65,1,2,'kyo/concurrent/scheduler/Worker.enqueue',1,0,0)
f(23,65,1,2,'kyo/concurrent/scheduler/Queue.offer',1,0,0)
f(24,65,1,2,'kyo/concurrent/scheduler/Queue.tryModify',1,0,0)
f(25,65,1,2,'scala/Function0.apply$mcZ$sp',1,0,0)
f(26,65,1,2,'kyo/concurrent/scheduler/Queue$$Lambda$54.0x0000000800d43cd0.apply',1,0,0)
f(27,65,1,2,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1',1,0,0)
f(28,65,1,2,'scala/collection/mutable/PriorityQueue.addOne',1,0,0)
f(29,65,1,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize',1,0,0)
f(30,65,1,2,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize',1,0,0)
f(31,65,1,2,'scala/collection/mutable/ArrayBuffer.array_$eq',1,0,0)
f(4,66,132,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,66,132,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,66,132,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,66,91,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,66,91,1,'kyo/concurrent/scheduler/IOTask.eval',2,0,0)
f(9,66,58,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply',1,0,0)
f(10,66,58,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply',1,0,0)
f(11,66,58,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e9f8.apply',1,0,0)
f(12,67,57,1,'kyo/bench/Bench.$anonfun$1')
f(13,67,57,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,67,57,1,'kyo/bench/BroadFlatMapBench.kyoBench')
f(15,67,57,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(16,67,20,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(17,67,20,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(18,67,20,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(19,67,20,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,67,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(21,67,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(22,67,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(23,67,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,67,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,67,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(26,67,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,67,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,67,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,67,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(30,67,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,67,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,67,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,67,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(34,67,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,67,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,67,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,67,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,67,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,68,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,68,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,68,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,68,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,68,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,68,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(30,68,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,68,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,68,1,2,'scala/math/BigInt$.apply',1,0,0)
f(28,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,69,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,69,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply',1,0,0)
f(32,69,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(20,70,17,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,70,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(22,70,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(23,70,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,70,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,70,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,70,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(27,70,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,70,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,70,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,70,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(31,70,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,70,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,70,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,71,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,71,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,71,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,71,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,71,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,71,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,71,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(25,72,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,72,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,72,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(28,72,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,72,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(35,72,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d44400.newInvokeSpecial',1,0,0)
f(36,72,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.<init>',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.kyoFib$1')
f(29,73,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,73,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(21,74,13,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,74,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,74,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(24,74,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,74,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,74,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,74,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(28,74,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,74,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,74,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,74,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(32,74,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,74,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,74,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,74,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,74,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,75,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,75,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(33,75,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,76,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,76,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,76,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(29,76,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply',1,0,0)
f(30,76,3,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(31,77,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,77,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,77,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(34,77,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,77,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,77,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,77,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,77,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,78,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,78,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,78,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(35,78,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,78,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,78,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,78,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(39,78,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,78,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,78,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,79,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,79,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,79,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(31,79,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,79,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,79,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,79,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,79,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,79,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,79,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(38,79,1,2,'scala/math/BigInt.<init>',1,0,0)
f(34,80,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,80,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,82,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,82,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,82,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(25,82,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,82,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,82,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(30,82,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,82,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,82,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(34,82,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$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,'scala/math/BigInt$.apply',1,0,0)
f(38,82,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(23,83,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,83,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,83,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(26,83,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,83,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,83,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,83,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,83,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,83,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(32,83,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,83,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,83,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,84,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,84,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,84,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,84,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(24,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,85,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,85,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(29,85,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,85,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,85,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(33,85,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,86,1,2,'scala/math/BigInt$.apply',1,0,0)
f(25,86,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(16,87,37,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(17,89,13,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(18,89,13,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(19,89,13,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(20,89,13,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,89,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(22,89,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(23,89,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,89,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,89,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,89,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(27,89,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,89,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,89,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(30,89,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply',1,0,0)
f(31,90,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,90,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,90,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,90,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(35,90,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,90,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,90,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,90,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(39,90,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,90,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,90,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(42,90,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(43,90,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(44,90,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(45,90,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(46,90,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(47,90,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply',1,0,0)
f(48,90,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(49,90,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$1',1,0,0)
f(29,91,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,91,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,91,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(32,91,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply',1,0,0)
f(31,92,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,92,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,92,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,92,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,92,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(25,93,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,93,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,93,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(28,93,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,93,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,93,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,93,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,93,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(33,93,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d44400.newInvokeSpecial',1,0,0)
f(34,93,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.<init>',1,0,0)
f(26,94,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,94,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,94,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,94,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,94,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(21,95,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,95,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,95,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(24,95,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,95,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,95,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,95,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(28,95,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,95,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,95,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,95,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,95,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,95,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,95,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,95,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,95,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,95,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,96,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,96,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,97,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,97,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,97,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,97,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(30,97,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,97,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,97,1,2,'scala/math/BigInt$.apply',1,0,0)
f(22,98,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,98,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,98,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(25,98,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,98,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,98,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,98,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(29,98,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,98,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,98,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,98,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,98,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(34,98,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,98,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,98,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,99,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,99,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,99,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(30,99,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,99,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,99,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,99,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(34,99,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,99,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,99,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,99,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply',1,0,0)
f(28,100,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,100,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,100,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,100,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,100,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,101,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,101,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,101,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,101,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(27,101,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,101,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,101,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,101,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,101,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,101,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(17,102,22,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(18,102,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(19,102,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(20,102,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(21,102,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,102,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,102,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(24,102,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,102,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,102,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,102,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(28,102,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,102,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,102,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,102,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(32,102,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,102,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,102,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,102,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,102,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,102,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,102,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(22,103,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,103,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,103,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(25,103,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,103,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,103,1,2,'scala/math/BigInt$.apply',1,0,0)
f(23,104,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,104,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,104,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(26,104,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,104,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,104,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,104,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(30,104,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,104,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,104,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,104,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(34,104,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,104,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,104,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,104,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,104,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(39,104,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,104,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,104,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,104,1,2,'scala/math/BigInt$.apply',1,0,0)
f(43,104,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,105,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,105,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,105,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(35,105,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,105,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,105,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,105,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(39,105,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,105,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,106,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,106,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(31,106,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,106,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,106,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(36,106,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,107,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,107,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,107,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(27,107,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,107,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,107,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,107,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(31,107,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,107,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,107,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,107,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(35,107,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,107,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,107,1,2,'scala/math/BigInt$.apply',1,0,0)
f(25,108,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,108,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,108,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(28,108,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,108,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,108,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,108,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(32,108,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,108,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,109,1,2,'scala/math/BigInt$.apply',1,0,0)
f(18,110,14,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(19,110,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(20,110,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(21,110,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(22,110,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,110,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,110,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(25,110,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,110,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,110,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,110,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,110,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,110,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,110,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply',1,0,0)
f(29,111,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,111,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(23,112,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,112,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,112,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,112,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,112,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(28,112,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$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.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,112,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(33,112,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,112,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,112,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,112,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,112,1,2,'scala/math/BigInt$.getCached',1,0,0)
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.0x0000000800d47a98.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.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,113,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(33,113,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,113,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,113,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,113,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,113,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(38,113,1,2,'scala/math/BigInt.<init>',1,0,0)
f(19,114,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,114,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(21,114,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(22,114,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(23,114,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,114,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,114,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,114,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,114,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(28,114,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,114,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,114,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,114,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(32,114,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,114,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,115,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,115,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(22,115,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(23,115,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,115,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,115,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,115,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(27,115,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,115,5,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.0x0000000800d47a98.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,2,'scala/math/BigInt$.apply',1,0,0)
f(34,116,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,117,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,117,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(31,117,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply',2,0,0)
f(32,118,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(33,119,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,120,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,120,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,120,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,120,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(25,120,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,121,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,121,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,121,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(26,121,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$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,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,121,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply')
f(32,121,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,121,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,121,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,122,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,122,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,122,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(27,122,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d47a98.apply',1,0,0)
f(23,123,1,2,'scala/math/BigInt$.apply',1,0,0)
f(24,123,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(9,124,33,1,'kyo/concurrent/scheduler/IOTask.loop$8',1,0,0)
f(10,124,33,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',1,0,0)
f(11,125,32,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,125,32,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,125,32,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,125,32,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,125,32,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,125,32,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,125,32,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,125,32,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,125,32,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,125,32,1,'jdk/internal/misc/Unsafe.unpark')
f(21,126,31,3,'pthread_cond_signal')
f(22,127,30,5,'entry_SYSCALL_64_after_hwframe')
f(23,127,30,5,'do_syscall_64')
f(24,127,28,5,'__x64_sys_futex')
f(25,127,28,5,'do_futex')
f(26,127,1,5,'_raw_spin_lock')
f(26,128,27,5,'futex_wake')
f(27,129,26,5,'wake_up_q')
f(28,129,26,5,'_raw_spin_unlock_irqrestore')
f(24,155,2,5,'syscall_enter_from_user_mode')
f(7,157,3,2,'kyo/concurrent/scheduler/Queue.poll',3,0,0)
f(8,157,3,2,'kyo/concurrent/scheduler/Queue.modify',3,0,0)
f(9,157,3,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47148.apply',3,0,0)
f(10,158,2,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',2,0,0)
f(7,160,38,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,160,1,1,'java/util/AbstractQueue.add')
f(9,160,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.offer')
f(10,160,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.producerChunkForIndex')
f(11,160,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.appendNextChunks')
f(12,160,1,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.newOrPooledChunk',1,0,0)
f(13,160,1,2,'org/jctools/queues/SpscArrayQueue.poll',1,0,0)
f(14,160,1,2,'org/jctools/util/UnsafeRefArrayAccess.lvRefElement',1,0,0)
f(15,160,1,2,'sun/misc/Unsafe.getObjectVolatile',1,0,0)
f(8,161,37,1,'kyo/concurrent/scheduler/Worker.park')
f(9,161,37,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,161,37,1,'jdk/internal/misc/Unsafe.park')
f(11,162,1,4,'JavaThread::threadObj() const')
f(11,163,4,3,'Unsafe_Park')
f(12,163,3,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,163,3,5,'entry_SYSCALL_64_after_hwframe')
f(14,163,3,5,'do_syscall_64')
f(15,163,3,5,'syscall_enter_from_user_mode')
f(12,166,1,3,'pthread_mutex_unlock')
f(11,167,31,3,'[unknown]')
f(12,167,31,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,168,30,5,'entry_SYSCALL_64_after_hwframe')
f(14,168,30,5,'do_syscall_64')
f(15,168,28,5,'__x64_sys_futex')
f(16,170,1,5,'_copy_from_user')
f(16,171,23,5,'do_futex')
f(17,171,23,5,'futex_wait')
f(18,172,20,5,'futex_wait_queue_me')
f(19,172,1,5,'hrtimer_sleeper_start_expires')
f(20,172,1,5,'_raw_spin_unlock_irqrestore')
f(19,173,19,5,'schedule')
f(20,174,18,5,'__schedule')
f(21,174,18,5,'finish_task_switch.isra.0')
f(18,192,1,5,'futex_wait_setup')
f(18,193,1,5,'hrtimer_cancel')
f(19,193,1,5,'hrtimer_active')
f(16,194,2,5,'get_timespec64')
f(17,194,1,5,'copy_user_enhanced_fast_string')
f(17,195,1,5,'copy_user_generic_unrolled')
f(15,196,1,5,'syscall_enter_from_user_mode')
f(15,197,1,5,'syscall_exit_to_user_mode')
f(16,197,1,5,'exit_to_user_mode_prepare')
f(17,197,1,5,'exit_to_user_mode_loop')
f(18,197,1,5,'__rseq_handle_notify_resume')
f(19,197,1,5,'__put_user_nocheck_8')
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: 736px}
</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(46);
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,9,3,'[unknown_Java]')
f(2,0,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(1,9,290,1,'java/lang/Thread.run')
f(2,9,290,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,9,290,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,9,290,1,'java/util/concurrent/FutureTask.run')
f(5,9,290,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,9,290,1,'java/util/concurrent/FutureTask.run')
f(7,9,290,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,9,290,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,9,290,1,'java/lang/reflect/Method.invoke')
f(10,9,290,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,9,290,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,9,290,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,9,290,1,'kyo/bench/jmh_generated/BroadFlatMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,9,290,1,'kyo/bench/jmh_generated/BroadFlatMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,9,290,1,'kyo/bench/Bench.syncKyo')
f(16,9,290,1,'kyo/bench/BroadFlatMapBench.kyoBench')
f(17,9,290,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(18,9,113,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(19,9,113,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(20,9,113,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(21,9,113,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,9,45,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,9,45,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(24,9,45,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,9,45,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,9,17,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,9,17,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,9,17,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,9,17,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,9,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,9,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,9,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,9,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,9,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,9,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,9,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,9,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,9,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(39,9,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(40,9,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(41,9,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,9,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,9,1,2,'scala/math/BigInt$.apply',1,0,0)
f(44,9,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(38,10,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,10,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(40,10,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(41,10,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(34,11,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,11,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,11,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,11,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,11,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,12,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,12,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,12,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,12,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,12,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,13,13,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,13,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,13,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,13,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,13,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,15,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,15,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,15,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,15,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,15,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,15,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,16,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,16,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,16,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,17,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,17,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,17,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,18,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,18,1,2,'scala/math/BigInt$.apply',1,0,0)
f(43,18,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(44,18,1,2,'scala/math/BigInt.<init>',1,0,0)
f(31,19,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,20,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,20,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,20,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,20,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,20,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,20,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,20,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(32,21,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,21,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,21,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,21,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,21,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,21,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,21,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,21,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,21,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,22,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,22,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,22,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,22,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,22,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,23,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,24,2,2,'scala/math/BigInt$.apply',2,0,0)
f(37,24,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(26,26,28,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,26,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(28,26,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(29,26,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(27,27,9,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,27,9,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,27,9,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,27,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,27,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,27,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,27,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,27,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,27,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,27,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,27,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,27,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(36,28,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,28,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,28,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,28,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,28,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,29,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,30,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,30,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,30,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,30,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,30,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,30,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,30,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,30,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(36,31,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,31,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,32,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,32,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,32,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,32,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,32,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,33,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,33,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,33,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,33,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,33,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,33,1,2,'scala/math/BigInt$.apply',1,0,0)
f(43,33,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(44,33,1,2,'scala/math/BigInt.<init>',1,0,0)
f(33,34,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,34,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,34,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,34,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,34,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,34,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,34,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,35,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,35,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,36,16,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,36,9,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,36,9,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,36,9,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,36,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,36,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,36,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,36,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,36,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,36,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,36,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,37,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,37,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,37,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,37,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,37,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,38,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,38,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,39,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,39,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(34,39,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(35,39,3,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',2,0,0)
f(36,41,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,42,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,42,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,42,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,42,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,42,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(35,43,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,43,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,43,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,43,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,43,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,43,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,43,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(36,44,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,44,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,44,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,44,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,45,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,45,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,45,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,45,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,45,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,45,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,45,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,45,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,45,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,45,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,45,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,45,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,45,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,45,1,2,'scala/math/BigInt.<init>',1,0,0)
f(29,46,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,46,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,46,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,46,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,46,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,46,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,46,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,46,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,47,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,48,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,48,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,48,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,48,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,48,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,48,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,48,2,2,'scala/math/BigInt$.apply',2,0,0)
f(37,48,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(31,50,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,50,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,50,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,50,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,50,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,50,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,50,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,51,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,51,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,52,2,2,'scala/math/BigInt$.apply',2,0,0)
f(28,52,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(22,54,68,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,54,36,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,54,36,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(25,54,36,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,54,36,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,54,12,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,54,12,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,54,12,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,54,12,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,54,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,54,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,54,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,54,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,55,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,55,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,55,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,55,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,55,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(40,55,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(41,55,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(39,56,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,56,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,56,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,57,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,57,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,57,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,58,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,58,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,59,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,60,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,60,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,60,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,60,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,60,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,60,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,60,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,61,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,61,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,61,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(33,62,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,62,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,62,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,62,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,62,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,62,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,62,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(40,62,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,63,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,63,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,63,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,63,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(35,64,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,64,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,64,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,64,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,64,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,64,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,65,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,65,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,66,24,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,66,11,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,66,11,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,66,11,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,66,11,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,66,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,66,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,66,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,66,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,66,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,66,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,67,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,67,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,67,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,68,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,69,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,69,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,69,1,2,'scala/math/BigInt$.apply',1,0,0)
f(42,69,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(39,70,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,70,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,71,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,71,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,71,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,71,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(36,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,72,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,72,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,72,1,2,'scala/math/BigInt.<init>',1,0,0)
f(33,73,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,73,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,73,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,73,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,74,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,74,2,2,'scala/math/BigInt$.apply',2,0,0)
f(37,74,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(34,76,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,76,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(36,76,1,2,'scala/math/BigInt.<init>',1,0,0)
f(37,76,1,2,'scala/math/ScalaNumber.<init>',1,0,0)
f(38,76,1,2,'java/lang/Number.<init>',1,0,0)
f(28,77,13,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,77,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,77,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,77,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,77,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,77,5,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(34,77,5,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(35,78,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(36,79,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,80,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,80,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,80,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,80,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,81,1,2,'scala/math/BigInt$.apply',1,0,0)
f(43,81,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(44,81,1,2,'scala/math/BigInt.<init>',1,0,0)
f(33,82,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,82,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,82,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$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,2,'scala/math/BigInt$.apply',1,0,0)
f(36,83,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,84,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,84,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,84,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,84,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,84,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,84,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$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(40,85,1,2,'scala/math/BigInt.<init>',1,0,0)
f(30,86,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,86,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,86,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,86,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,86,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,86,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,86,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,86,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,86,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,87,2,2,'scala/math/BigInt$.apply',2,0,0)
f(37,87,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(31,89,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,89,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(23,90,32,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,90,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,90,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(26,90,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,90,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,90,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,90,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,90,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,90,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,90,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,90,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,90,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,90,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,90,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,90,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,90,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,90,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$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,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,91,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,91,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(38,91,1,2,'scala/math/BigInt.<init>',1,0,0)
f(28,92,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,92,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,92,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,92,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,92,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,92,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,92,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,92,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,92,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,92,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,92,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,92,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,93,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,93,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(31,93,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(32,93,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',2,0,0)
f(30,95,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,95,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,95,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,95,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,95,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,95,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,95,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(31,96,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,96,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,97,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,97,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,98,23,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,98,10,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(26,98,10,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(27,99,9,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,99,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,99,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,99,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,99,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,99,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,99,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,99,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,99,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,99,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,100,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,101,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,101,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(31,101,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(32,101,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',2,0,0)
f(30,103,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,103,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,103,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,103,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,103,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,103,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,103,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,104,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,104,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,104,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,105,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,105,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,105,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,105,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,105,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,105,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,106,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,106,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,106,1,2,'scala/math/BigInt.<init>',1,0,0)
f(29,107,1,2,'scala/math/BigInt$.apply',1,0,0)
f(25,108,13,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,108,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,108,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,108,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,108,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,108,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,108,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,108,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,108,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,108,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,108,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,108,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,108,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,108,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,108,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,108,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,108,1,2,'scala/math/BigInt.<init>',1,0,0)
f(34,109,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,109,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,109,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,109,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,110,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,111,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,111,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,111,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,111,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,111,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(35,112,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,112,1,2,'scala/math/BigInt$.apply',1,0,0)
f(26,113,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,113,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(28,113,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(29,114,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,114,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,114,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,114,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,114,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,114,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,114,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,114,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,114,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,114,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,114,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,115,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,115,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,115,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,116,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,116,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,116,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,116,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(32,117,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,117,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,117,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,117,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,117,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,117,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,118,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,118,1,2,'scala/math/BigInt$.apply',1,0,0)
f(27,119,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,119,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,119,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,119,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,119,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,119,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,119,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,119,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,119,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,119,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,119,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,119,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,121,1,2,'scala/math/BigInt$.apply',1,0,0)
f(25,121,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(18,122,177,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(19,122,75,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(20,122,75,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(21,122,75,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(22,122,75,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,122,33,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(24,122,33,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(25,123,32,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,123,32,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,123,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,123,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,123,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,123,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,123,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,123,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,123,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,123,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,123,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,123,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,123,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,123,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,123,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,123,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,123,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,124,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,124,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,124,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,124,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,124,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,124,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,124,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,125,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,125,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,125,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,126,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,126,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,126,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,126,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,126,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,126,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,126,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,126,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,126,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,127,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,127,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(38,127,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(39,127,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(40,128,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,128,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,128,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,129,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,129,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(39,129,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(40,129,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(41,129,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,130,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,130,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,130,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,130,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,130,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,130,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,130,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,130,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,130,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,130,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,130,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,130,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,131,23,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,131,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,131,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,131,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,131,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,132,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,132,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,132,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,132,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,132,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,133,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,133,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,133,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,133,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,133,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,133,1,2,'scala/math/BigInt$.apply',1,0,0)
f(43,133,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(44,133,1,2,'scala/math/BigInt.<init>',1,0,0)
f(37,134,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,134,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,134,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,135,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,136,3,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,2,'scala/math/BigInt$.apply',1,0,0)
f(39,136,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,137,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,137,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,137,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,137,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,137,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,137,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,137,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,137,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,137,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,138,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,138,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,138,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,139,15,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,140,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,140,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,140,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,140,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,140,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,140,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,141,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,141,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,141,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,141,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,142,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,142,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,143,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,143,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,143,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,143,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,143,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,143,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,143,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,143,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,143,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,143,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,143,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,144,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,144,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,144,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,144,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,144,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,145,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,145,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,145,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,145,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,145,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,146,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,146,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,147,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,148,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,148,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,148,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,148,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,148,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,148,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,148,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,148,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,148,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,149,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,149,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,149,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,149,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,149,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,150,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,150,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,151,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,151,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,151,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,151,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(33,152,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,152,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,153,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,153,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,154,1,2,'scala/math/BigInt$.apply',1,0,0)
f(23,155,42,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,155,16,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,155,16,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(26,155,16,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,155,16,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,155,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(29,155,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(30,155,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(31,156,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,156,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,156,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,156,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,156,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,156,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,156,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,156,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(32,157,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,157,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,157,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,157,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,157,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,157,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,158,1,2,'scala/math/BigInt$.apply',1,0,0)
f(28,159,12,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,159,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,159,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,159,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,159,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,159,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,159,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,159,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,159,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,159,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,159,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,159,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,160,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,160,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,160,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,160,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,160,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,160,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,160,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,160,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,160,1,2,'scala/math/BigInt$.apply',1,0,0)
f(42,160,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,161,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,162,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(29,163,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,163,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,163,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,163,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,163,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,163,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,163,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,163,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,163,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,163,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,163,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,163,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,163,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,163,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,163,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(44,163,1,2,'scala/math/BigInt$.apply',1,0,0)
f(45,163,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,164,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,164,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,164,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,164,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,165,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,166,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,166,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,166,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,166,3,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(39,166,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,167,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,167,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,167,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,167,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,167,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(40,167,1,2,'scala/math/BigInt.<init>',1,0,0)
f(36,168,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,168,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,169,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,169,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,169,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,170,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,170,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,171,26,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,171,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(26,171,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(27,172,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,172,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,172,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,172,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,172,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,172,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,172,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,172,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,172,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,172,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,172,2,2,'scala/math/BigInt$.apply',2,0,0)
f(29,174,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,174,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,174,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,174,3,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(33,175,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,175,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,175,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,175,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,176,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,176,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,176,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,176,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(30,177,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,177,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,177,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,177,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,177,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,178,1,2,'scala/math/BigInt$.apply',1,0,0)
f(25,179,18,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,179,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,179,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,179,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,179,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,179,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,179,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,179,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,179,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,179,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,179,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,179,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,179,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,179,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,179,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,179,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,179,1,2,'scala/math/BigInt.<init>',1,0,0)
f(34,180,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,180,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,180,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,180,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(36,181,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,181,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,181,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,181,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(40,181,1,2,'scala/math/BigInt.<init>',1,0,0)
f(30,182,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,182,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,182,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,182,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,182,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,182,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,182,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,182,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(35,183,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,183,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,183,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,183,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,183,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,183,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,184,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
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(26,185,12,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,185,6,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(28,185,6,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(29,186,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(30,187,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,187,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,187,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,187,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,187,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,187,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,187,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,188,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,188,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,188,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,189,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,189,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,189,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,190,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,190,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,191,6,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,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,191,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(35,191,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(33,192,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,192,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,193,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,193,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,193,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,193,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,193,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,193,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,193,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,193,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,193,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,193,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,193,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,194,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,194,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,194,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,194,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,194,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,194,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(35,194,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,195,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,195,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,195,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,196,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,196,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(19,197,102,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,197,41,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(21,197,41,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(22,197,41,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(23,197,41,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,198,20,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,198,20,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(26,198,20,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,198,20,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,198,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(29,198,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(30,198,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(31,199,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,199,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,199,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,199,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,199,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,199,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,199,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,199,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,199,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,200,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,200,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,200,1,2,'scala/math/BigInt$.apply',1,0,0)
f(43,200,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,201,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,201,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,201,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,201,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(36,202,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,202,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,202,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,203,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,203,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,203,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,203,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,203,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,203,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(39,203,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(40,203,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(41,203,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,203,1,2,'scala/math/BigInt$.apply',1,0,0)
f(43,203,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(38,204,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,204,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,205,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,205,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,205,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,205,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,206,12,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,206,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,206,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,206,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,206,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,206,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,206,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,206,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,206,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,206,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,206,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,206,2,2,'scala/math/BigInt$.apply',2,0,0)
f(40,206,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(41,207,1,2,'scala/math/BigInt.<init>',1,0,0)
f(33,208,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,208,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,208,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,208,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$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(34,209,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,209,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,209,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,209,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,209,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,209,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,210,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,210,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,210,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,210,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(33,211,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,211,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,211,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,211,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,211,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(36,212,2,2,'scala/math/BigInt$.apply',2,0,0)
f(37,212,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(38,213,1,2,'scala/math/BigInt.<init>',1,0,0)
f(39,213,1,2,'scala/math/ScalaNumber.<init>',1,0,0)
f(40,213,1,2,'java/lang/Number.<init>',1,0,0)
f(30,214,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,214,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,214,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,214,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,214,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,214,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,214,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,214,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,214,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,215,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,215,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,215,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,216,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,216,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,216,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,216,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,216,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,216,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,216,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,216,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,216,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,217,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,217,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,218,20,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,218,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,218,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,218,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,218,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,218,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,218,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,218,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,218,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,218,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,218,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,218,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,218,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,219,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,219,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,219,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,219,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,219,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,219,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,219,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,219,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,219,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(35,220,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,220,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,220,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,220,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,220,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(40,220,1,2,'scala/math/BigInt.<init>',1,0,0)
f(36,221,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,221,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,222,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,222,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,222,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,222,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,222,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,222,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,223,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,223,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,223,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,223,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(35,224,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,225,13,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,226,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,226,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,226,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,226,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,226,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,226,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,227,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,227,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,227,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,227,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,227,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,227,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,227,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,227,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,227,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,227,1,2,'scala/math/BigInt$.apply',1,0,0)
f(42,227,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,228,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,228,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,228,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,228,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,228,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,228,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,228,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,228,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,228,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,228,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(40,228,1,2,'scala/math/BigInt.<init>',1,0,0)
f(31,229,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,229,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,229,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,229,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,229,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,230,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,230,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,230,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,230,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(40,230,1,2,'scala/math/BigInt.<init>',1,0,0)
f(32,231,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,231,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,231,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,231,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,231,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(26,232,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,232,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,232,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,232,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,232,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,232,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,232,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,232,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,232,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,232,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,232,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,232,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,232,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,232,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,233,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,233,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,233,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,233,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,233,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(40,233,1,2,'scala/math/BigInt.<init>',1,0,0)
f(31,234,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,234,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,234,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,234,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,234,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,234,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(37,234,1,2,'scala/math/BigInt.<init>',1,0,0)
f(33,235,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,235,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,235,1,2,'scala/math/BigInt.<init>',1,0,0)
f(27,236,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,236,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(29,236,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(30,236,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(28,237,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,237,1,2,'scala/math/BigInt$.apply',1,0,0)
f(20,238,61,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,238,25,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(22,238,25,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(23,238,25,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,238,25,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,238,9,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,238,9,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,238,9,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,238,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,238,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,238,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,238,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,238,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,238,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,238,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,238,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,238,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,238,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,238,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,238,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,238,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,238,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,238,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,238,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(44,238,1,2,'scala/math/BigInt$.apply',1,0,0)
f(45,238,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,239,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,239,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,239,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,239,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,239,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,239,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,239,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,240,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,240,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,240,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,240,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,240,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,240,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,240,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,240,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,240,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,241,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,241,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,241,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,242,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,243,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,243,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,243,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(33,243,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(34,244,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(32,245,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,245,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,245,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,245,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,245,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,245,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,245,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,245,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,246,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,246,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(25,247,16,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,247,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,247,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,247,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,247,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,247,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,247,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,247,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,247,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,247,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,247,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,247,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,247,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(38,248,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,248,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,249,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,249,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,249,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,249,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,249,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,249,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,249,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,250,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,250,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,250,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,250,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,250,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,250,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,251,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,252,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,252,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,253,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,253,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,253,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,253,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,253,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,253,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,253,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,253,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,253,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,253,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,253,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,253,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,253,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,253,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,253,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,253,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,253,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,253,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,254,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,254,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,254,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,255,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,255,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,255,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,255,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,256,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,256,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(29,256,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(30,256,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(28,257,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,257,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,257,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,257,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,257,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,257,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,258,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,258,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,258,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,258,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,258,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,259,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,259,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,259,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,259,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(36,260,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,260,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,260,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,261,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,261,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,261,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,261,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,261,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,261,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,262,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,262,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,262,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,262,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,262,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,262,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,262,1,2,'scala/math/BigInt$.apply',1,0,0)
f(21,263,36,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,263,18,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,263,18,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(24,263,18,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,263,18,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,263,10,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,263,10,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,263,10,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,263,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,263,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,263,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,263,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,263,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,263,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,263,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,263,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,263,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,263,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,263,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,263,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,263,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,263,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,264,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,264,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,264,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,264,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,264,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,264,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(36,264,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(37,265,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(35,266,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,267,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,267,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,267,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,267,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,267,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,268,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,268,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,268,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,268,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,268,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,268,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,269,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,269,2,2,'scala/math/BigInt$.apply',2,0,0)
f(33,271,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,271,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,272,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,272,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,273,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,273,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,273,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,273,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,273,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,273,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,273,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,273,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,273,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,274,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,274,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,274,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(35,275,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,275,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,275,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,276,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,276,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,276,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,276,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,276,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,276,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,276,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,277,1,2,'scala/math/BigInt$.apply',1,0,0)
f(27,278,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,278,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,278,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,279,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,279,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,280,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,280,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(22,281,18,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,281,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,281,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(25,281,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,281,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,281,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,281,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,281,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,281,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,281,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,281,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,281,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,281,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,281,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,281,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,282,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,282,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,282,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,282,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,282,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,282,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,282,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,283,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,283,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(37,283,1,2,'scala/math/BigInt.<init>',1,0,0)
f(33,284,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,284,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,285,1,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(33,285,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,285,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,285,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,285,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,286,13,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,286,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,286,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(26,286,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,286,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,286,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,286,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,286,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,286,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,286,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,287,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,287,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,287,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(35,288,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,289,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,289,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,289,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,290,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,290,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,291,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,291,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,291,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,291,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,291,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,291,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,291,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,291,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,291,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,291,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,291,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,291,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,291,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,292,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,292,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,292,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,293,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,293,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,293,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,293,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,293,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,293,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,293,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,293,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,293,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,293,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,294,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,294,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,294,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,295,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,295,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(33,295,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(34,295,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(25,296,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,296,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(27,296,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(28,296,3,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(29,297,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,298,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,298,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,298,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,298,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,298,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,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: 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,8839,3,'all')
f(1,0,8836,1,'java/lang/Thread.run')
f(2,0,8836,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,8836,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,709,1,'java/util/concurrent/FutureTask.run')
f(5,0,709,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,709,1,'java/util/concurrent/FutureTask.run')
f(7,0,709,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,709,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,709,1,'java/lang/reflect/Method.invoke')
f(10,0,709,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,709,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,709,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,709,1,'kyo/bench/jmh_generated/ChainedForkBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,708,1,'kyo/bench/jmh_generated/ChainedForkBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,708,1,'kyo/bench/Bench.forkKyo')
f(16,0,98,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,98,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,98,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,98,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3f088')
f(16,98,69,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,98,69,2,'kyo.bench.Bench$$anon$1')
f(16,167,387,1,'kyo/bench/Bench.runLoop$2')
f(17,167,193,1,'kyo/bench/Bench$$anon$1.apply')
f(18,167,82,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,167,82,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c83420.apply')
f(20,167,82,1,'kyo/bench/Bench.$anonfun$2')
f(21,167,82,1,'kyo/concurrent/fibers$Fiber.block')
f(22,167,82,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,249,111,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,249,111,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,249,111,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(21,249,111,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,249,111,2,'kyo.concurrent.scheduler.IOTask')
f(17,360,194,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,360,194,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,360,194,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,360,194,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,360,72,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,360,72,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,360,70,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,430,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,430,2,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,432,14,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,446,108,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,446,108,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,446,108,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,554,154,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,554,100,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,554,100,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,554,100,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,554,100,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(17,654,27,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,654,27,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,681,27,1,'kyo/locals$Locals$.save')
f(18,681,27,2,'kyo.locals$Locals$$anon$3')
f(14,708,1,1,'org/openjdk/jmh/results/ThroughputResult.<init>')
f(15,708,1,1,'org/openjdk/jmh/results/Result.of')
f(16,708,1,2,'org.openjdk.jmh.util.SingletonStatistics')
f(4,709,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f2b8.run')
f(5,709,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,709,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,709,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,709,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,709,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,709,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,709,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,720,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f4e0.run')
f(5,720,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,720,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,720,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,720,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,720,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,720,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$70+0x0000000800d4ea70')
f(4,731,8105,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fda8.run')
f(5,731,8105,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,731,8105,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,731,8105,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,731,8105,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,731,2975,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,731,2975,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,731,2975,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,731,2975,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(13,731,2975,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,731,479,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(14,1210,1903,2,'kyo.concurrent.scheduler.IOTask')
f(14,3113,593,1,'kyo/concurrent/fibers$Fiber$.promise')
f(15,3113,593,2,'kyo.concurrent.fibers$Fiber')
f(9,3706,1,1,'kyo/bench/ChainedForkBench$$anon$4.apply')
f(10,3706,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,3706,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,3706,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(13,3706,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,3706,1,2,'kyo.concurrent.scheduler.IOTask')
f(9,3707,5129,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,3707,5129,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,3707,84,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3f088.apply')
f(12,3707,84,1,'kyo/bench/Bench.$anonfun$1')
f(13,3707,84,1,'kyo/bench/ChainedForkBench.kyoBenchFiber')
f(14,3707,84,1,'kyo/concurrent/fibers$Fibers.promise')
f(15,3707,84,2,'kyo.concurrent.fibers$Fibers$$anon$31')
f(11,3791,5045,1,'kyo/bench/ChainedForkBench$$Lambda$61.0x0000000800d4a2e8.apply')
f(12,3791,5045,1,'kyo/bench/ChainedForkBench.$anonfun$3')
f(13,3791,5045,1,'kyo/bench/ChainedForkBench.iterate$2')
f(14,3791,1009,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4c800.linkToTargetMethod')
f(15,3791,1009,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(16,3791,1009,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,3791,1009,2,'kyo.bench.ChainedForkBench$$Lambda$61+0x0000000800d4a2e8')
f(14,4800,1255,1,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2')
f(15,4800,1255,2,'kyo.bench.ChainedForkBench$$anon$2')
f(14,6055,2781,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(15,6055,1154,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,6055,1154,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,6055,1154,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,6055,1154,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(15,7209,1154,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(16,7209,1154,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(15,8363,473,1,'kyo/locals$Locals$.save')
f(16,8363,473,2,'kyo.locals$Locals$$anon$3')
f(1,8836,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,8836,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,8836,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,8836,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,8836,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,8836,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,8836,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,8836,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,8836,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,8836,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,8836,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,8836,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,8836,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,295,3,'all')
f(1,0,4,3,'[unknown_Java]')
f(2,0,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(2,1,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(2,2,2,1,'kyo/ios$KyoIO.effect')
f(1,4,291,1,'java/lang/Thread.run')
f(2,4,291,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,4,291,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,4,2,1,'java/util/concurrent/FutureTask.run')
f(5,4,2,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,4,2,1,'java/util/concurrent/FutureTask.run')
f(7,4,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,4,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,4,2,1,'java/lang/reflect/Method.invoke')
f(10,4,2,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,4,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,4,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,4,2,1,'kyo/bench/jmh_generated/ChainedForkBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,4,2,1,'kyo/bench/jmh_generated/ChainedForkBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,4,2,1,'kyo/bench/Bench.forkKyo')
f(16,4,2,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.0x0000000800c84800.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,4,2,5,'entry_SYSCALL_64_after_hwframe')
f(29,4,2,5,'do_syscall_64')
f(30,4,2,5,'__x64_sys_futex')
f(31,4,2,5,'do_futex')
f(32,4,2,5,'futex_wake')
f(33,4,2,5,'wake_up_q')
f(34,4,2,5,'_raw_spin_unlock_irqrestore')
f(4,6,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f2b8.run')
f(5,6,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,6,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(4,7,288,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fda8.run')
f(5,7,288,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,7,288,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,29,217,1,'kyo/concurrent/scheduler/IOTask.run',27,0,0)
f(8,29,217,1,'kyo/concurrent/scheduler/IOTask.eval',27,0,0)
f(9,67,106,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,77,1,2,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2',1,0,0)
f(10,78,95,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,86,87,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,86,69,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply',69,0,0)
f(13,87,68,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',68,0,0)
f(14,98,9,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',9,0,0)
f(15,98,9,2,'kyo/ios$KyoIO.<init>',9,0,0)
f(14,107,42,2,'kyo/concurrent/scheduler/IOTask.<init>',42,0,0)
f(15,116,33,2,'kyo/concurrent/scheduler/IOPromise.<init>',33,0,0)
f(16,117,32,2,'kyo/concurrent/scheduler/IOPromise.<init>',32,0,0)
f(17,121,28,2,'java/util/concurrent/atomic/AtomicReference.<init>',28,0,0)
f(14,149,6,2,'kyo/concurrent/scheduler/Scheduler$.schedule',6,0,0)
f(12,155,18,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',18,0,0)
f(13,170,3,2,'kyo/core$internal$KyoCont.<init>',3,0,0)
f(14,172,1,2,'kyo/ios$KyoIO.value',1,0,0)
f(9,173,38,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,174,37,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',29,0,0)
f(11,175,36,2,'kyo/bench/ChainedForkBench$$Lambda$61.0x0000000800d4a518.apply',28,0,0)
f(12,176,35,2,'kyo/bench/ChainedForkBench.$anonfun$3',27,0,0)
f(13,176,35,2,'kyo/bench/ChainedForkBench.iterate$2',27,0,0)
f(14,179,3,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d4c800.linkToTargetMethod',3,0,0)
f(15,179,3,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial',3,0,0)
f(16,179,3,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',3,0,0)
f(14,182,16,2,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2',16,0,0)
f(15,197,1,2,'kyo/bench/ChainedForkBench$$anon$2.<init>',1,0,0)
f(14,198,13,2,'kyo/concurrent/fibers$Fibers.forkFiber',5,0,0)
f(15,199,3,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',3,0,0)
f(16,199,3,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',3,0,0)
f(17,199,3,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',3,0,0)
f(15,202,8,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(16,203,7,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply',7,0,0)
f(17,203,7,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',7,0,0)
f(18,203,6,2,'kyo/concurrent/scheduler/IOTask.<init>',6,0,0)
f(19,203,6,2,'kyo/concurrent/scheduler/IOPromise.<init>',6,0,0)
f(20,203,6,2,'kyo/concurrent/scheduler/IOPromise.<init>',6,0,0)
f(21,203,6,2,'java/util/concurrent/atomic/AtomicReference.<init>',6,0,0)
f(18,209,1,2,'kyo/concurrent/scheduler/Scheduler$.schedule',1,0,0)
f(19,209,1,2,'kyo/concurrent/scheduler/Worker$.apply',1,0,0)
f(15,210,1,2,'kyo/locals$Locals$.save',1,0,0)
f(9,211,7,1,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf')
f(9,218,15,2,'kyo/concurrent/scheduler/IOTask.loop$8',9,0,0)
f(10,230,3,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,230,3,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,230,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,230,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,230,3,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,230,3,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,230,3,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,230,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,230,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,230,3,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,230,3,1,'jdk/internal/misc/Unsafe.unpark')
f(21,230,1,3,'Unsafe_Unpark')
f(21,231,2,3,'pthread_cond_signal')
f(22,231,2,5,'entry_SYSCALL_64_after_hwframe')
f(23,231,2,5,'do_syscall_64')
f(24,231,2,5,'__x64_sys_futex')
f(25,231,2,5,'do_futex')
f(26,231,2,5,'futex_wake')
f(27,231,2,5,'wake_up_q')
f(28,231,2,5,'_raw_spin_unlock_irqrestore')
f(9,233,9,6,'kyo/core$internal$KyoCont.effect',0,9,0)
f(9,242,2,1,'kyo/ios$KyoIO.effect')
f(9,244,2,3,'vtable stub')
f(7,246,47,1,'kyo/concurrent/scheduler/Queue.poll',2,0,0)
f(8,253,2,2,'kyo/concurrent/scheduler/Queue.isEmpty',1,0,0)
f(9,254,1,1,'kyo/concurrent/scheduler/Queue.items')
f(8,255,38,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,257,22,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',22,0,0)
f(10,265,14,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',14,0,0)
f(11,267,12,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',12,0,0)
f(12,271,8,2,'java/util/Objects.requireNonNull',8,0,0)
f(9,279,14,2,'kyo/concurrent/scheduler/Queue$$Lambda$60.0x0000000800d4a258.apply',14,0,0)
f(10,279,14,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',14,0,0)
f(11,280,13,2,'scala/collection/mutable/PriorityQueue.dequeue',13,0,0)
f(12,284,9,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',9,0,0)
f(7,293,1,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,293,1,1,'kyo/concurrent/scheduler/Worker.park')
f(9,293,1,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,293,1,1,'jdk/internal/misc/Unsafe.park')
f(11,293,1,3,'[unknown]')
f(12,293,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,293,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,293,1,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,'schedule')
f(20,293,1,5,'__schedule')
f(21,293,1,5,'finish_task_switch.isra.0')
f(7,294,1,1,'kyo/concurrent/scheduler/Worker.stop$1')
f(8,294,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,9443,3,'all')
f(1,0,9440,1,'java/lang/Thread.run')
f(2,0,9440,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,9440,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,1011,1,'java/util/concurrent/FutureTask.run')
f(5,0,1011,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,1011,1,'java/util/concurrent/FutureTask.run')
f(7,0,1011,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,1011,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1011,1,'java/lang/reflect/Method.invoke')
f(10,0,1011,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,1011,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,1011,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,1011,1,'kyo/bench/jmh_generated/ChainedForkBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,1010,1,'kyo/bench/jmh_generated/ChainedForkBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,1010,1,'kyo/bench/Bench.syncKyo')
f(16,0,458,1,'kyo/bench/Bench.runLoop$1')
f(17,0,244,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,244,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,244,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,244,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,167,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,167,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,90,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,90,77,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,90,77,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,167,66,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,233,11,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,233,11,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,233,11,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,244,214,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,244,194,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,244,194,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,244,194,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,244,116,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,244,116,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,244,116,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(24,244,116,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,244,115,2,'kyo.concurrent.scheduler.IOTask')
f(25,359,1,1,'kyo/concurrent/fibers$Fiber$.promise')
f(26,359,1,2,'kyo.concurrent.fibers$Fiber')
f(21,360,78,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,360,78,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c83420.apply')
f(23,360,78,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,360,78,1,'kyo/concurrent/fibers$Fiber.join')
f(25,360,78,1,'kyo/concurrent/fibers$Fibers.get')
f(26,360,78,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,360,78,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,438,20,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,438,20,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c83c20.apply')
f(20,438,20,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,438,20,1,'kyo/concurrent/fibers$Fiber.block')
f(22,438,20,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,458,552,1,'kyo/bench/ChainedForkBench.kyoBench')
f(17,458,69,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,458,69,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,458,69,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,458,69,2,'kyo.bench.ChainedForkBench$$Lambda$37+0x0000000800c3f088')
f(17,527,271,1,'kyo/concurrent/fibers$Fibers.block')
f(18,527,72,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,527,72,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,599,124,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,599,124,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,723,75,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,723,75,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,798,212,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,798,69,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,798,69,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,798,69,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,798,69,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c83420')
f(18,867,88,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,867,72,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,867,72,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,867,72,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,867,72,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(19,939,16,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,939,16,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(18,955,55,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,955,55,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(14,1010,1,1,'org/openjdk/jmh/results/ThroughputResult.<init>')
f(15,1010,1,2,'java.lang.StringBuilder')
f(4,1011,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f2b8.run')
f(5,1011,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,1011,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,1011,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,1011,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,1011,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,1011,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,1011,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,1022,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1f4e0.run')
f(5,1022,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,1022,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,1022,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,1022,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,1022,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,1022,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$70+0x0000000800d4e7b0')
f(4,1033,8407,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d1fda8.run')
f(5,1033,8407,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,1033,8407,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,1033,7870,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,1033,7870,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,1033,3053,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,1033,3053,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,1033,3053,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,1033,3053,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(13,1033,3053,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,1033,440,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(14,1473,1903,2,'kyo.concurrent.scheduler.IOTask')
f(14,3376,710,1,'kyo/concurrent/fibers$Fiber$.promise')
f(15,3376,710,2,'kyo.concurrent.fibers$Fiber')
f(9,4086,2,1,'kyo/bench/ChainedForkBench$$anon$4.apply')
f(10,4086,2,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,4086,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,4086,2,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(13,4086,2,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,4086,1,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(14,4087,1,2,'kyo.concurrent.scheduler.IOTask')
f(9,4088,4814,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,4088,4814,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,4088,4814,1,'kyo/bench/ChainedForkBench$$Lambda$62.0x0000000800d4a2e8.apply')
f(12,4088,4814,1,'kyo/bench/ChainedForkBench.$anonfun$3')
f(13,4088,4814,1,'kyo/bench/ChainedForkBench.iterate$2')
f(14,4088,954,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4c800.linkToTargetMethod')
f(15,4088,954,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(16,4088,954,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,4088,954,2,'kyo.bench.ChainedForkBench$$Lambda$62+0x0000000800d4a2e8')
f(14,5042,1218,1,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2')
f(15,5042,1218,2,'kyo.bench.ChainedForkBench$$anon$2')
f(14,6260,2642,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(15,6260,769,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,6260,769,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,6260,769,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,6260,769,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(15,7029,1018,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(16,7029,1018,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(15,8047,855,1,'kyo/locals$Locals$.save')
f(16,8047,855,2,'kyo.locals$Locals$$anon$3')
f(9,8902,1,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,8902,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,8902,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,8903,537,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,8903,537,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,8903,537,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,8903,537,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,8903,537,2,'kyo.concurrent.scheduler.Queue$$Lambda$56+0x0000000800d45000')
f(1,9440,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,9440,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,9440,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,9440,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,9440,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,9440,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,9440,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,9440,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,9440,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,9440,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,9440,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,9440,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,9440,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,293,3,'all')
f(1,0,2,3,'[unknown_Java]')
f(2,0,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(2,1,1,1,'kyo/ios$KyoIO.effect')
f(1,2,291,1,'java/lang/Thread.run')
f(2,2,291,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,2,291,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_syncKyo_jmhTest.syncKyo_Throughput')
f(14,2,2,1,'kyo/bench/jmh_generated/ChainedForkBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,2,2,1,'kyo/bench/Bench.syncKyo')
f(16,2,2,1,'kyo/bench/Bench.runLoop$1')
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,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,2,2,5,'entry_SYSCALL_64_after_hwframe')
f(28,2,2,5,'do_syscall_64')
f(29,2,2,5,'__x64_sys_futex')
f(30,2,2,5,'do_futex')
f(31,2,2,5,'futex_wait')
f(32,2,2,5,'futex_wait_queue_me')
f(33,2,2,5,'schedule')
f(34,2,2,5,'__schedule')
f(35,2,2,5,'finish_task_switch.isra.0')
f(4,4,289,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d1fda8.run')
f(5,4,289,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,4,289,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,11,221,1,'kyo/concurrent/scheduler/IOTask.run',44,0,0)
f(8,14,218,1,'kyo/concurrent/scheduler/IOTask.eval',44,0,0)
f(9,39,113,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,39,113,2,'kyo/concurrent/fibers$Fibers$$anon$33.apply',112,0,0)
f(11,56,96,2,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',95,0,0)
f(12,75,42,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply',41,0,0)
f(13,80,37,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',36,0,0)
f(14,92,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(15,92,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(16,92,1,4,'MemAllocator::Allocation::notify_allocation_jfr_sampler()')
f(14,93,2,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',2,0,0)
f(15,93,2,2,'kyo/ios$KyoIO.<init>',2,0,0)
f(14,95,1,2,'kyo/concurrent/scheduler/IOTask$.apply$default$3',1,0,0)
f(14,96,18,2,'kyo/concurrent/scheduler/IOTask.<init>',18,0,0)
f(15,102,12,2,'kyo/concurrent/scheduler/IOPromise.<init>',12,0,0)
f(16,102,12,2,'kyo/concurrent/scheduler/IOPromise.<init>',12,0,0)
f(17,102,12,2,'java/util/concurrent/atomic/AtomicReference.<init>',12,0,0)
f(14,114,3,2,'kyo/concurrent/scheduler/Scheduler$.schedule',3,0,0)
f(15,116,1,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',1,0,0)
f(16,116,1,2,'kyo/concurrent/scheduler/Queue.offer',1,0,0)
f(17,116,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(18,116,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(19,116,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(12,117,35,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',35,0,0)
f(13,135,17,2,'kyo/core$internal$KyoCont.<init>',17,0,0)
f(14,146,2,2,'kyo/core$internal$Kyo.<init>',2,0,0)
f(15,146,2,2,'java/lang/Object.<init>',2,0,0)
f(14,148,4,2,'kyo/ios$KyoIO.effect',4,0,0)
f(15,149,3,2,'kyo/ios$KyoIO.effect',3,0,0)
f(9,152,43,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,157,38,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',28,0,0)
f(11,160,35,2,'kyo/bench/ChainedForkBench$$Lambda$62.0x0000000800d4a2e8.apply',25,0,0)
f(12,160,35,2,'kyo/bench/ChainedForkBench.$anonfun$3',25,0,0)
f(13,160,35,2,'kyo/bench/ChainedForkBench.iterate$2',25,0,0)
f(14,161,3,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d4c800.linkToTargetMethod',3,0,0)
f(15,161,3,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial',3,0,0)
f(16,161,3,2,'kyo/bench/ChainedForkBench$$Lambda$62.0x0000000800d4a2e8.<init>',3,0,0)
f(14,164,15,2,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2',15,0,0)
f(15,177,2,2,'kyo/bench/ChainedForkBench$$anon$2.<init>',2,0,0)
f(16,177,2,2,'kyo/core$internal$KyoCont.<init>',2,0,0)
f(14,179,16,2,'kyo/concurrent/fibers$Fibers.forkFiber',6,0,0)
f(15,180,4,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',4,0,0)
f(16,180,4,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',4,0,0)
f(17,180,4,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',4,0,0)
f(15,184,10,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(16,193,1,4,'ClassLoaderData::holder_phantom() const')
f(15,194,1,2,'kyo/locals$Locals$.save',1,0,0)
f(9,195,17,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',17,0,0)
f(9,212,10,2,'kyo/concurrent/scheduler/IOTask.loop$8',6,0,0)
f(10,213,9,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',6,0,0)
f(11,219,3,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,219,1,1,'java/util/concurrent/atomic/AtomicReference.compareAndSet')
f(13,219,1,1,'java/lang/invoke/VarHandleGuards.guard_LLL_Z')
f(14,219,1,1,'java/lang/invoke/VarForm.getMemberName')
f(12,220,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,220,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,220,2,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,220,1,3,'itable stub')
f(15,221,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,221,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,221,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,221,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,221,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,221,1,1,'jdk/internal/misc/Unsafe.unpark')
f(21,221,1,3,'pthread_cond_signal')
f(22,221,1,5,'entry_SYSCALL_64_after_hwframe')
f(23,221,1,5,'do_syscall_64')
f(24,221,1,5,'__x64_sys_futex')
f(25,221,1,5,'do_futex')
f(26,221,1,5,'futex_wake')
f(27,221,1,5,'wake_up_q')
f(28,221,1,5,'_raw_spin_unlock_irqrestore')
f(9,222,9,6,'kyo/core$internal$KyoCont.effect',0,9,0)
f(9,231,1,3,'vtable stub')
f(7,232,59,1,'kyo/concurrent/scheduler/Queue.poll',19,0,0)
f(8,234,15,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',11,0,0)
f(9,239,10,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',6,0,0)
f(10,240,9,2,'kyo/concurrent/scheduler/Queue$$Lambda$56.0x0000000800d45000.<init>',6,0,0)
f(8,249,7,2,'kyo/concurrent/scheduler/Queue.isEmpty',6,0,0)
f(9,250,6,2,'kyo/concurrent/scheduler/Queue.items',5,0,0)
f(8,256,35,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,257,21,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',21,0,0)
f(10,263,15,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',15,0,0)
f(11,269,9,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',9,0,0)
f(12,271,7,2,'java/util/Objects.requireNonNull',7,0,0)
f(9,278,13,2,'kyo/concurrent/scheduler/Queue$$Lambda$61.0x0000000800d4a028.apply',13,0,0)
f(10,278,13,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',13,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,2,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,291,2,1,'kyo/concurrent/scheduler/Worker.park')
f(9,291,2,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,291,2,1,'jdk/internal/misc/Unsafe.park')
f(11,291,2,3,'[unknown]')
f(12,291,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,292,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,292,1,5,'do_syscall_64')
f(15,292,1,5,'__x64_sys_futex')
f(16,292,1,5,'do_futex')
f(17,292,1,5,'futex_wait')
f(18,292,1,5,'__get_user_nocheck_4')
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,14998,3,'all')
f(1,0,14995,1,'java/lang/Thread.run')
f(2,0,14995,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,14995,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,2221,1,'java/util/concurrent/FutureTask.run')
f(5,0,2221,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,2221,1,'java/util/concurrent/FutureTask.run')
f(7,0,2221,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,2221,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,2221,1,'java/lang/reflect/Method.invoke')
f(10,0,2221,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,2221,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,2221,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,2221,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,2221,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,2221,1,'kyo/bench/Bench.forkKyo')
f(16,0,105,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,105,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,105,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,105,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3fb00')
f(16,105,264,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,105,264,2,'kyo.bench.Bench$$anon$1')
f(16,369,1425,1,'kyo/bench/Bench.runLoop$2')
f(17,369,630,1,'kyo/bench/Bench$$anon$1.apply')
f(18,369,175,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,369,175,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c81000.apply')
f(20,369,175,1,'kyo/bench/Bench.$anonfun$2')
f(21,369,175,1,'kyo/concurrent/fibers$Fiber.block')
f(22,369,175,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,544,455,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,544,455,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,544,455,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85290.apply')
f(21,544,455,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,544,35,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,579,342,2,'kyo.concurrent.scheduler.IOTask')
f(22,921,78,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,921,78,2,'kyo.concurrent.fibers$Fiber')
f(17,999,795,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,999,795,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,999,795,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,999,795,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,999,454,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,999,454,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,999,125,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,1124,329,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,1124,329,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,1453,190,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,1643,151,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,1643,151,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,1643,151,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,1794,427,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,1794,160,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1794,160,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1794,160,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1794,160,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c85290')
f(17,1954,181,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,1954,181,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,2135,86,1,'kyo/locals$Locals$.save')
f(18,2135,86,2,'kyo.locals$Locals$$anon$3')
f(4,2221,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f4b8.run')
f(5,2221,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,2221,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,2221,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,2221,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,2221,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,2221,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,2221,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,2232,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f6e0.run')
f(5,2232,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,2232,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,2232,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,2232,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,2232,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,2232,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,2232,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$60+0x0000000800d55000')
f(4,2243,12752,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d243c0.run')
f(5,2243,12752,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,2243,12752,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,2243,12736,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,2243,12736,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,2243,9271,1,'kyo/bench/CollectAllBench$$anon$2.apply')
f(10,2243,3444,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(11,2243,2330,2,'kyo.bench.CollectAllBench$$anon$2')
f(11,4573,1114,1,'kyo/bench/CollectAllBench$$Lambda$58.0x0000000800d56000.apply')
f(12,4573,1114,1,'kyo/bench/CollectAllBench.$anonfun$2')
f(13,4573,1113,1,'scala/collection/AbstractIterable.sum')
f(14,4573,1113,1,'scala/collection/IterableOnceOps.sum$')
f(15,4573,1113,1,'scala/collection/IterableOnceOps.sum')
f(16,4573,1113,1,'scala/collection/AbstractIterable.reduce')
f(17,4573,1113,1,'scala/collection/IterableOnceOps.reduce$')
f(18,4573,1113,1,'scala/collection/IterableOnceOps.reduce')
f(19,4573,1113,1,'scala/collection/AbstractIterable.reduceLeft')
f(20,4573,1113,1,'scala/collection/IterableOnceOps.reduceLeft$')
f(21,4573,1113,1,'scala/collection/IterableOnceOps.reduceLeft')
f(22,4573,1113,1,'scala/collection/IterableOnceOps$$Lambda$59.0x0000000800d57638.apply')
f(23,4573,1113,1,'scala/collection/IterableOnceOps.$anonfun$sum$1')
f(24,4573,1113,1,'scala/math/Numeric$IntIsIntegral$.plus')
f(25,4573,1113,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(26,4573,1113,1,'java/lang/Integer.valueOf')
f(27,4573,1113,2,'java.lang.Integer')
f(13,5686,1,1,'scala/runtime/BoxesRunTime.boxToLong')
f(14,5686,1,1,'java/lang/Long.valueOf')
f(15,5686,1,2,'java.lang.Long')
f(10,5687,5827,1,'kyo/lists$Lists$$anon$11.apply')
f(11,5687,5827,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(12,5687,5827,1,'kyo/lists$Lists$$Lambda$57.0x0000000800d53b78.apply')
f(13,5687,5827,1,'kyo/lists$Lists.$anonfun$5')
f(14,5687,4093,1,'kyo/lists$Lists.loop$2')
f(15,5687,1709,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,5687,1709,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,5687,1709,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,5687,1709,2,'kyo.lists$Lists$$Lambda$57+0x0000000800d53b78')
f(15,7396,2384,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(16,7396,2384,2,'kyo.lists$Lists$$anon$11')
f(14,9780,1734,1,'scala/collection/mutable/ListBuffer.addOne')
f(15,9780,1734,2,'scala.collection.immutable.$colon$colon')
f(9,11514,3465,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,11514,3465,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,11514,3465,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3fb00.apply')
f(12,11514,3465,1,'kyo/bench/Bench.$anonfun$1')
f(13,11514,3465,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,11514,3465,1,'kyo/bench/CollectAllBench.kyoBench')
f(15,11514,1,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(16,11514,1,2,'kyo.bench.CollectAllBench$$anon$2')
f(15,11515,9,1,'kyo/lists$Lists.collect')
f(16,11515,4,2,'java.lang.Object[]')
f(16,11519,3,1,'kyo/lists$Lists.loop$2')
f(17,11519,3,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(18,11519,3,2,'kyo.lists$Lists$$anon$11')
f(16,11522,2,1,'scala/collection/mutable/ListBuffer$.apply')
f(17,11522,2,1,'scala/collection/IterableFactory.apply$')
f(18,11522,2,1,'scala/collection/IterableFactory.apply')
f(19,11522,2,1,'scala/collection/mutable/ListBuffer$.from')
f(20,11522,2,1,'scala/collection/mutable/ListBuffer$.from')
f(21,11522,2,2,'scala.collection.mutable.ListBuffer')
f(15,11524,1838,1,'scala/collection/AbstractIterable.toList')
f(16,11524,1838,1,'scala/collection/IterableOnceOps.toList$')
f(17,11524,1838,1,'scala/collection/IterableOnceOps.toList')
f(18,11524,1838,1,'scala/collection/immutable/List.prependedAll')
f(19,11524,1836,2,'scala.collection.immutable.$colon$colon')
f(19,13360,2,1,'scala/collection/immutable/Vector.iterator')
f(20,13360,2,2,'scala.collection.immutable.NewVectorIterator')
f(15,13362,1617,1,'scala/collection/immutable/Range.map')
f(16,13362,1163,1,'kyo/bench/CollectAllBench$$Lambda$56.0x0000000800d44a30.apply')
f(17,13362,1163,1,'kyo/bench/CollectAllBench.$anonfun$adapted$1')
f(18,13362,1163,1,'kyo/bench/CollectAllBench.$anonfun$1')
f(19,13362,1163,2,'kyo.bench.CollectAllBench$$anon$1')
f(16,14525,116,1,'scala/collection/SeqFactory$Delegate.newBuilder')
f(17,14525,116,1,'scala/collection/immutable/Vector$.newBuilder')
f(18,14525,116,1,'scala/collection/immutable/Vector$.newBuilder')
f(19,14525,104,2,'scala.collection.immutable.VectorBuilder')
f(19,14629,12,1,'scala/collection/immutable/VectorBuilder.<init>')
f(20,14629,12,2,'java.lang.Object[]')
f(16,14641,323,1,'scala/collection/immutable/VectorBuilder.addOne')
f(17,14641,323,1,'scala/collection/immutable/VectorBuilder.addOne')
f(18,14641,323,1,'scala/collection/immutable/VectorBuilder.advance')
f(19,14641,323,1,'scala/collection/immutable/VectorBuilder.advance1')
f(20,14641,15,2,'java.lang.Object[][]')
f(20,14656,308,2,'java.lang.Object[]')
f(16,14964,15,1,'scala/collection/immutable/VectorBuilder.result')
f(17,14964,15,1,'scala/collection/immutable/VectorBuilder.result')
f(18,14964,6,1,'java/util/Arrays.copyOf')
f(19,14964,6,2,'java.lang.Object[]')
f(18,14970,5,1,'java/util/Arrays.copyOfRange')
f(19,14970,5,2,'java.lang.Object[][]')
f(18,14975,4,2,'scala.collection.immutable.Vector2')
f(7,14979,15,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,14979,15,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,14979,15,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,14979,15,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,14979,15,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(12,14979,15,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d45230')
f(7,14994,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,14994,1,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,14994,1,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,14994,1,1,'scala/runtime/ObjectRef.create')
f(11,14994,1,2,'scala.runtime.ObjectRef')
f(1,14995,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,14995,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,14995,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,14995,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,14995,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,14995,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,14995,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,14995,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,14995,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,14995,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,14995,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,14995,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,14995,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,243,3,'all')
f(1,0,4,3,'[unknown_Java]')
f(2,0,4,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(1,4,239,1,'java/lang/Thread.run')
f(2,4,239,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,4,239,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,4,32,1,'java/util/concurrent/FutureTask.run')
f(5,4,32,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,4,32,1,'java/util/concurrent/FutureTask.run')
f(7,4,32,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,4,32,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,4,32,1,'java/lang/reflect/Method.invoke')
f(10,4,32,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,4,32,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,4,32,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,4,32,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,4,32,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,4,32,1,'kyo/bench/Bench.forkKyo',2,0,0)
f(16,4,1,2,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1',1,0,0)
f(17,4,1,2,'kyo/bench/Bench$$anon$1.<init>',1,0,0)
f(16,5,31,1,'kyo/bench/Bench.runLoop$2',1,0,0)
f(17,5,14,1,'kyo/bench/Bench$$anon$1.apply')
f(18,5,14,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,5,14,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,5,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(21,5,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(22,5,1,4,'MemAllocator::allocate() const')
f(23,5,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(24,5,1,4,'G1Allocator::unsafe_max_tlab_alloc()')
f(20,6,13,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85290.apply')
f(21,6,13,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,6,13,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,6,13,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,6,12,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,6,12,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,6,12,1,'jdk/internal/misc/Unsafe.unpark')
f(27,6,1,3,'Unsafe_Unpark')
f(28,6,1,4,'AccessInternal::PostRuntimeDispatch<G1BarrierSet::AccessBarrier<548964ul, G1BarrierSet>, (AccessInternal::BarrierType)2, 548964ul>::oop_access_barrier(void*)')
f(27,7,11,3,'pthread_cond_signal')
f(28,7,11,5,'entry_SYSCALL_64_after_hwframe')
f(29,7,11,5,'do_syscall_64')
f(30,7,11,5,'__x64_sys_futex')
f(31,7,11,5,'do_futex')
f(32,7,11,5,'futex_wake')
f(33,7,1,5,'wake_q_add_safe')
f(33,8,10,5,'wake_up_q')
f(34,8,10,5,'_raw_spin_unlock_irqrestore')
f(24,18,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.poll')
f(17,19,17,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply',1,0,0)
f(18,19,17,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply',1,0,0)
f(19,19,17,1,'kyo/concurrent/scheduler/IOPromise.block',1,0,0)
f(20,19,17,1,'kyo/concurrent/scheduler/IOPromise.loop$4',1,0,0)
f(21,19,16,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,19,16,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,19,16,1,'java/util/concurrent/locks/LockSupport.park')
f(24,19,16,1,'jdk/internal/misc/Unsafe.park')
f(25,19,2,3,'Unsafe_Park')
f(26,19,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,19,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,19,1,5,'do_syscall_64')
f(29,19,1,5,'__x64_sys_futex')
f(26,20,1,3,'pthread_mutex_unlock')
f(25,21,14,3,'[unknown]')
f(26,21,13,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,22,12,5,'entry_SYSCALL_64_after_hwframe')
f(28,22,12,5,'do_syscall_64')
f(29,22,10,5,'__x64_sys_futex')
f(30,22,10,5,'do_futex')
f(31,22,10,5,'futex_wait')
f(32,24,7,5,'futex_wait_queue_me')
f(33,24,7,5,'schedule')
f(34,24,7,5,'__schedule')
f(35,24,7,5,'finish_task_switch.isra.0')
f(32,31,1,5,'plist_add')
f(29,32,2,5,'syscall_exit_to_user_mode')
f(30,32,2,5,'exit_to_user_mode_prepare')
f(31,32,2,5,'exit_to_user_mode_loop')
f(32,33,1,5,'__rseq_handle_notify_resume')
f(33,33,1,5,'__put_user_nocheck_8')
f(26,34,1,3,'pthread_cond_wait')
f(21,35,1,2,'kyo/concurrent/scheduler/IOPromise.loop$5',1,0,0)
f(22,35,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(23,35,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(4,36,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f4b8.run')
f(5,36,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,36,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,36,1,1,'java/lang/Thread.sleep')
f(8,36,1,3,'[unknown]')
f(9,36,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,36,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,36,1,5,'do_syscall_64')
f(12,36,1,5,'__x64_sys_futex')
f(13,36,1,5,'do_futex')
f(14,36,1,5,'futex_wait')
f(15,36,1,5,'futex_wait_queue_me')
f(16,36,1,5,'schedule')
f(17,36,1,5,'__schedule')
f(18,36,1,5,'finish_task_switch.isra.0')
f(4,37,206,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d243c0.run')
f(5,37,206,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,37,206,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,37,182,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,37,182,1,'kyo/concurrent/scheduler/IOTask.eval',35,0,0)
f(9,48,91,1,'kyo/bench/CollectAllBench$$anon$2.apply',21,0,0)
f(10,48,29,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(11,48,29,1,'kyo/bench/CollectAllBench$$Lambda$58.0x0000000800d56000.apply')
f(12,48,29,1,'kyo/bench/CollectAllBench.$anonfun$2')
f(13,48,29,1,'scala/collection/AbstractIterable.sum')
f(14,48,29,1,'scala/collection/IterableOnceOps.sum$')
f(15,48,29,1,'scala/collection/IterableOnceOps.sum')
f(16,48,29,2,'scala/collection/AbstractIterable.reduce',29,0,0)
f(17,48,29,2,'scala/collection/IterableOnceOps.reduce$',29,0,0)
f(18,48,29,2,'scala/collection/IterableOnceOps.reduce',29,0,0)
f(19,48,29,2,'scala/collection/AbstractIterable.reduceLeft',29,0,0)
f(20,48,29,2,'scala/collection/IterableOnceOps.reduceLeft$',29,0,0)
f(21,48,29,2,'scala/collection/IterableOnceOps.reduceLeft',29,0,0)
f(22,48,26,2,'scala/collection/IterableOnceOps$$Lambda$59.0x0000000800d57638.apply',26,0,0)
f(23,48,26,2,'scala/collection/IterableOnceOps.$anonfun$sum$1',26,0,0)
f(24,48,26,2,'scala/math/Numeric$IntIsIntegral$.plus',26,0,0)
f(25,48,25,2,'scala/runtime/BoxesRunTime.boxToInteger',25,0,0)
f(26,70,3,2,'java/lang/Integer.valueOf',3,0,0)
f(25,73,1,2,'scala/runtime/BoxesRunTime.unboxToInt',1,0,0)
f(22,74,3,2,'scala/collection/StrictOptimizedLinearSeqOps$$anon$1.next',3,0,0)
f(10,77,62,2,'kyo/lists$Lists$$anon$11.apply',21,0,0)
f(11,80,18,2,'kyo/bench/CollectAllBench$$anon$1.apply',18,0,0)
f(12,81,17,2,'kyo/bench/CollectAllBench$$anon$1.apply',17,0,0)
f(13,81,17,2,'scala/runtime/BoxesRunTime.boxToInteger',17,0,0)
f(11,98,41,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(12,98,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(13,98,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(14,98,1,4,'MemAllocator::allocate() const')
f(15,98,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(16,98,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(17,98,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(18,98,1,4,'MutatorAllocRegion::retire(bool)')
f(19,98,1,4,'G1CollectionSet::add_eden_region(HeapRegion*)')
f(12,99,36,2,'kyo/lists$Lists$$Lambda$57.0x0000000800d53b78.apply',35,0,0)
f(13,99,36,2,'kyo/lists$Lists.$anonfun$5',35,0,0)
f(14,99,18,2,'kyo/lists$Lists.loop$2',17,0,0)
f(15,113,3,2,'scala/collection/immutable/List.equals',3,0,0)
f(16,113,3,2,'scala/collection/immutable/List.listEq$1',3,0,0)
f(17,115,1,2,'scala/collection/immutable/List.isEmpty',1,0,0)
f(15,116,1,1,'scala/collection/mutable/ListBuffer.toList')
f(14,117,18,2,'scala/collection/mutable/ListBuffer.addOne',18,0,0)
f(15,118,2,2,'scala/collection/immutable/$colon$colon.<init>',2,0,0)
f(16,118,1,2,'scala/collection/immutable/List.<init>',1,0,0)
f(17,118,1,2,'scala/collection/immutable/AbstractSeq.<init>',1,0,0)
f(18,118,1,2,'scala/collection/AbstractSeq.<init>',1,0,0)
f(19,118,1,2,'scala/collection/AbstractIterable.<init>',1,0,0)
f(20,118,1,2,'java/lang/Object.<init>',1,0,0)
f(16,119,1,2,'scala/runtime/Statics.releaseFence',1,0,0)
f(17,119,1,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d1c400.invoke_MT',1,0,0)
f(15,120,1,2,'scala/collection/immutable/$colon$colon.next_$eq',1,0,0)
f(15,121,8,2,'scala/collection/mutable/ListBuffer.first_$eq',8,0,0)
f(15,129,6,2,'scala/collection/mutable/ListBuffer.last0_$eq',6,0,0)
f(12,135,4,2,'kyo/lists$Lists$$anon$11.<init>',4,0,0)
f(13,135,4,2,'kyo/core$internal$KyoCont.<init>',4,0,0)
f(14,135,1,2,'kyo/core$internal$Kyo.<init>',1,0,0)
f(14,136,1,2,'kyo/ios$KyoIO.effect',1,0,0)
f(14,137,2,2,'kyo/ios$KyoIO.value',2,0,0)
f(9,139,58,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,139,58,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,139,58,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3fb00.apply')
f(12,139,58,2,'kyo/bench/Bench.$anonfun$1',55,0,0)
f(13,139,58,2,'kyo/bench/Bench.kyoBenchFiber',55,0,0)
f(14,139,58,2,'kyo/bench/CollectAllBench.kyoBench',55,0,0)
f(15,139,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(15,140,36,2,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1',36,0,0)
f(16,140,36,2,'kyo/bench/CollectAllBench$$Lambda$58.0x0000000800d56000.apply',36,0,0)
f(17,140,36,2,'kyo/bench/CollectAllBench.$anonfun$2',36,0,0)
f(18,140,36,2,'scala/runtime/BoxesRunTime.boxToLong',36,0,0)
f(15,176,1,1,'kyo/lists$Lists.collect')
f(16,176,1,1,'kyo/lists$Lists.loop$2')
f(17,176,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(18,176,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(15,177,1,1,'scala/collection/AbstractIterable.toList')
f(16,177,1,1,'scala/collection/IterableOnceOps.toList$')
f(17,177,1,1,'scala/collection/IterableOnceOps.toList')
f(18,177,1,1,'scala/collection/immutable/List.prependedAll')
f(19,177,1,1,'scala/collection/immutable/NewVectorIterator.next')
f(20,177,1,1,'scala/collection/immutable/NewVectorIterator.advance')
f(21,177,1,1,'scala/collection/immutable/NewVectorIterator.advanceA')
f(15,178,14,2,'scala/collection/immutable/Range.map',13,0,0)
f(16,179,12,2,'scala/collection/SeqFactory$Delegate.newBuilder',12,0,0)
f(16,191,1,1,'scala/collection/immutable/VectorBuilder.addOne')
f(17,191,1,1,'scala/collection/immutable/VectorBuilder.addOne')
f(18,191,1,1,'scala/collection/immutable/VectorBuilder.advance')
f(19,191,1,1,'scala/collection/immutable/VectorBuilder.advance1')
f(20,191,1,4,'OptoRuntime::new_array_C(Klass*, int, JavaThread*)')
f(21,191,1,4,'InstanceKlass::allocate_objArray(int, int, JavaThread*)')
f(22,191,1,4,'MemAllocator::allocate() const')
f(23,191,1,4,'G1Allocator::unsafe_max_tlab_alloc()')
f(15,192,5,2,'scala/runtime/RichInt$.until$extension',5,0,0)
f(16,192,5,2,'scala/collection/immutable/Range$Exclusive.<init>',5,0,0)
f(17,192,5,2,'scala/collection/immutable/Range.<init>',5,0,0)
f(18,192,5,2,'scala/collection/immutable/Range.longLength',5,0,0)
f(19,194,2,2,'scala/collection/immutable/Range.gap',2,0,0)
f(19,196,1,2,'scala/collection/immutable/Range.hasStub',1,0,0)
f(9,197,20,1,'kyo/concurrent/scheduler/IOTask.loop$8',1,0,0)
f(10,197,20,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',1,0,0)
f(11,197,20,1,'kyo/concurrent/scheduler/IOPromise.complete',1,0,0)
f(12,197,20,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush',1,0,0)
f(13,198,19,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,198,19,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,198,19,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,198,19,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,198,19,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,198,19,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,198,19,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,198,19,1,'jdk/internal/misc/Unsafe.unpark')
f(21,198,2,3,'Unsafe_Unpark')
f(21,200,17,3,'pthread_cond_signal')
f(22,200,17,5,'entry_SYSCALL_64_after_hwframe')
f(23,200,17,5,'do_syscall_64')
f(24,200,16,5,'__x64_sys_futex')
f(25,200,16,5,'do_futex')
f(26,200,16,5,'futex_wake')
f(27,201,15,5,'wake_up_q')
f(28,201,15,5,'_raw_spin_unlock_irqrestore')
f(24,216,1,5,'syscall_enter_from_user_mode')
f(9,217,2,2,'kyo/concurrent/scheduler/IOTask.st',2,0,0)
f(7,219,2,2,'kyo/concurrent/scheduler/Queue.poll',2,0,0)
f(8,219,2,2,'kyo/concurrent/scheduler/Queue.modify',2,0,0)
f(9,219,2,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d45230.apply',2,0,0)
f(10,219,2,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',2,0,0)
f(11,219,2,2,'kyo/concurrent/scheduler/Queue.isEmpty',2,0,0)
f(12,219,2,2,'kyo/concurrent/scheduler/Queue.items',2,0,0)
f(7,221,22,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,221,22,1,'kyo/concurrent/scheduler/Worker.park')
f(9,221,22,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,221,22,1,'jdk/internal/misc/Unsafe.park')
f(11,223,1,4,'JavaThread::threadObj() const')
f(11,224,4,3,'Unsafe_Park')
f(12,224,3,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,224,3,5,'entry_SYSCALL_64_after_hwframe')
f(14,224,3,5,'do_syscall_64')
f(15,224,3,5,'__x64_sys_futex')
f(16,224,3,5,'do_futex')
f(17,224,1,5,'futex_wake')
f(17,225,2,5,'hash_futex')
f(12,227,1,3,'clock_gettime')
f(13,227,1,3,'[vdso]')
f(11,228,15,3,'[unknown]')
f(12,228,15,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,231,12,5,'entry_SYSCALL_64_after_hwframe')
f(14,231,12,5,'do_syscall_64')
f(15,231,10,5,'__x64_sys_futex')
f(16,231,10,5,'do_futex')
f(17,231,10,5,'futex_wait')
f(18,231,9,5,'futex_wait_queue_me')
f(19,231,1,5,'rcu_all_qs')
f(19,232,8,5,'schedule')
f(20,232,8,5,'__schedule')
f(21,232,8,5,'finish_task_switch.isra.0')
f(18,240,1,5,'plist_add')
f(15,241,2,5,'syscall_exit_to_user_mode')
f(16,241,2,5,'exit_to_user_mode_prepare')
f(17,241,2,5,'exit_to_user_mode_loop')
f(18,242,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: 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,13864,3,'all')
f(1,0,13861,1,'java/lang/Thread.run')
f(2,0,13861,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,13861,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,13861,1,'java/util/concurrent/FutureTask.run')
f(5,0,13861,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,13861,1,'java/util/concurrent/FutureTask.run')
f(7,0,13861,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,13861,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,13861,1,'java/lang/reflect/Method.invoke')
f(10,0,13861,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,13861,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,13861,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,13861,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,13861,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,13861,1,'kyo/bench/Bench.syncKyo')
f(16,0,10193,1,'kyo/bench/Bench.runLoop$1')
f(17,0,10193,1,'kyo/bench/CollectAllBench$$anon$2.apply')
f(18,0,3267,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(19,0,2125,2,'kyo.bench.CollectAllBench$$anon$2')
f(19,2125,1142,1,'kyo/bench/CollectAllBench$$Lambda$41.0x0000000800d24940.apply')
f(20,2125,1142,1,'kyo/bench/CollectAllBench.$anonfun$2')
f(21,2125,1142,1,'scala/collection/AbstractIterable.sum')
f(22,2125,1142,1,'scala/collection/IterableOnceOps.sum$')
f(23,2125,1142,1,'scala/collection/IterableOnceOps.sum')
f(24,2125,1142,1,'scala/collection/AbstractIterable.reduce')
f(25,2125,1142,1,'scala/collection/IterableOnceOps.reduce$')
f(26,2125,1142,1,'scala/collection/IterableOnceOps.reduce')
f(27,2125,1142,1,'scala/collection/AbstractIterable.reduceLeft')
f(28,2125,1142,1,'scala/collection/IterableOnceOps.reduceLeft$')
f(29,2125,1142,1,'scala/collection/IterableOnceOps.reduceLeft')
f(30,2125,1142,1,'scala/collection/IterableOnceOps$$Lambda$42.0x0000000800d2a090.apply')
f(31,2125,1142,1,'scala/collection/IterableOnceOps.$anonfun$sum$1')
f(32,2125,1142,1,'scala/math/Numeric$IntIsIntegral$.plus')
f(33,2125,1142,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(34,2125,1142,1,'java/lang/Integer.valueOf')
f(35,2125,1142,2,'java.lang.Integer')
f(18,3267,6926,1,'kyo/lists$Lists$$anon$11.apply')
f(19,3267,6926,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(20,3267,6926,1,'kyo/lists$Lists$$Lambda$40.0x0000000800d0fb38.apply')
f(21,3267,6926,1,'kyo/lists$Lists.$anonfun$5')
f(22,3267,4381,1,'kyo/lists$Lists.loop$2')
f(23,3267,1711,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(24,3267,1711,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(25,3267,1711,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(26,3267,1711,2,'kyo.lists$Lists$$Lambda$40+0x0000000800d0fb38')
f(23,4978,2670,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(24,4978,2670,2,'kyo.lists$Lists$$anon$11')
f(22,7648,2545,1,'scala/collection/mutable/ListBuffer.addOne')
f(23,7648,2545,2,'scala.collection.immutable.$colon$colon')
f(16,10193,3668,1,'kyo/bench/CollectAllBench.kyoBench')
f(17,10193,8,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(18,10193,8,2,'kyo.bench.CollectAllBench$$anon$2')
f(17,10201,8,1,'kyo/lists$Lists.collect')
f(18,10201,8,1,'scala/collection/mutable/ListBuffer$.apply')
f(19,10201,8,1,'scala/collection/IterableFactory.apply$')
f(20,10201,8,1,'scala/collection/IterableFactory.apply')
f(21,10201,8,1,'scala/collection/mutable/ListBuffer$.from')
f(22,10201,8,1,'scala/collection/mutable/ListBuffer$.from')
f(23,10201,8,2,'scala.collection.mutable.ListBuffer')
f(17,10209,1954,1,'scala/collection/AbstractIterable.toList')
f(18,10209,1954,1,'scala/collection/IterableOnceOps.toList$')
f(19,10209,1954,1,'scala/collection/IterableOnceOps.toList')
f(20,10209,1954,1,'scala/collection/immutable/List.prependedAll')
f(21,10209,1945,2,'scala.collection.immutable.$colon$colon')
f(21,12154,9,1,'scala/collection/immutable/Vector.iterator')
f(22,12154,9,2,'scala.collection.immutable.NewVectorIterator')
f(17,12163,1698,1,'scala/collection/immutable/Range.map')
f(18,12163,1148,1,'kyo/bench/CollectAllBench$$Lambda$39.0x0000000800cbeb88.apply')
f(19,12163,1148,1,'kyo/bench/CollectAllBench.$anonfun$adapted$1')
f(20,12163,1148,1,'kyo/bench/CollectAllBench.$anonfun$1')
f(21,12163,1148,2,'kyo.bench.CollectAllBench$$anon$1')
f(18,13311,8,1,'scala/collection/SeqFactory$Delegate.newBuilder')
f(19,13311,8,1,'scala/collection/immutable/Vector$.newBuilder')
f(20,13311,8,1,'scala/collection/immutable/Vector$.newBuilder')
f(21,13311,8,1,'scala/collection/immutable/VectorBuilder.<init>')
f(22,13311,8,2,'java.lang.Object[]')
f(18,13319,524,1,'scala/collection/immutable/VectorBuilder.addOne')
f(19,13319,524,1,'scala/collection/immutable/VectorBuilder.addOne')
f(20,13319,524,1,'scala/collection/immutable/VectorBuilder.advance')
f(21,13319,524,1,'scala/collection/immutable/VectorBuilder.advance1')
f(22,13319,10,2,'java.lang.Object[][]')
f(22,13329,514,2,'java.lang.Object[]')
f(18,13843,18,1,'scala/collection/immutable/VectorBuilder.result')
f(19,13843,18,1,'scala/collection/immutable/VectorBuilder.result')
f(20,13843,18,1,'java/util/Arrays.copyOfRange')
f(21,13843,18,2,'java.lang.Object[][]')
f(1,13861,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,13861,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,13861,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,13861,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,13861,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,13861,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,13861,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,13861,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,13861,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,13861,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,13861,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,13861,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,13861,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,'G1CollectedHeap::post_evacuate_collection_set(G1EvacuationInfo&, G1RedirtyCardsQueueSet*, G1ParScanThreadStateSet*)')
f(12,0,1,4,'G1CollectedHeap::post_evacuate_cleanup_2(PreservedMarksSet*, G1RedirtyCardsQueueSet*, G1EvacuationInfo*, unsigned long const*)')
f(13,0,1,4,'WorkGang::run_task(AbstractGangTask*, unsigned int, bool)')
f(14,0,1,3,'sem_post')
f(15,0,1,5,'entry_SYSCALL_64_after_hwframe')
f(16,0,1,5,'do_syscall_64')
f(17,0,1,5,'__x64_sys_futex')
f(18,0,1,5,'do_futex')
f(19,0,1,5,'futex_wake')
f(20,0,1,5,'wake_up_q')
f(21,0,1,5,'_raw_spin_unlock_irqrestore')
f(1,1,297,1,'java/lang/Thread.run')
f(2,1,297,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,1,297,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,1,297,1,'java/util/concurrent/FutureTask.run')
f(5,1,297,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,1,297,1,'java/util/concurrent/FutureTask.run')
f(7,1,297,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,1,297,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,1,297,1,'java/lang/reflect/Method.invoke')
f(10,1,297,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,1,297,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,1,297,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,1,297,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,1,297,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,9,289,1,'kyo/bench/Bench.syncKyo',89,0,0)
f(16,9,160,1,'kyo/bench/Bench.runLoop$1',17,0,0)
f(17,15,154,1,'kyo/bench/CollectAllBench$$anon$2.apply',11,0,0)
f(18,17,64,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1',9,0,0)
f(19,17,55,1,'kyo/bench/CollectAllBench$$Lambda$41.0x0000000800d24940.apply')
f(20,17,55,2,'kyo/bench/CollectAllBench.$anonfun$2',46,0,0)
f(21,17,55,2,'scala/collection/AbstractIterable.sum',46,0,0)
f(22,17,55,2,'scala/collection/IterableOnceOps.sum$',46,0,0)
f(23,17,55,2,'scala/collection/IterableOnceOps.sum',46,0,0)
f(24,17,55,2,'scala/collection/AbstractIterable.reduce',46,0,0)
f(25,17,55,2,'scala/collection/IterableOnceOps.reduce$',46,0,0)
f(26,17,55,2,'scala/collection/IterableOnceOps.reduce',46,0,0)
f(27,17,55,2,'scala/collection/AbstractIterable.reduceLeft',46,0,0)
f(28,17,55,2,'scala/collection/IterableOnceOps.reduceLeft$',46,0,0)
f(29,17,55,2,'scala/collection/IterableOnceOps.reduceLeft',46,0,0)
f(30,20,41,2,'scala/collection/IterableOnceOps$$Lambda$42.0x0000000800d2a090.apply',32,0,0)
f(31,20,41,2,'scala/collection/IterableOnceOps.$anonfun$sum$1',32,0,0)
f(32,20,41,2,'scala/math/Numeric$IntIsIntegral$.plus',32,0,0)
f(33,20,41,2,'scala/runtime/BoxesRunTime.boxToInteger',32,0,0)
f(34,50,11,1,'java/lang/Integer.valueOf',2,0,0)
f(35,52,9,1,'java/lang/Integer.<init>')
f(36,52,9,1,'java/lang/Number.<init>')
f(30,61,11,2,'scala/collection/StrictOptimizedLinearSeqOps$$anon$1.next',11,0,0)
f(31,69,3,2,'scala/collection/immutable/$colon$colon.head',3,0,0)
f(19,72,9,2,'kyo/bench/CollectAllBench$$anon$2.<init>',9,0,0)
f(20,72,9,2,'kyo/core$internal$KyoCont.<init>',9,0,0)
f(18,81,88,1,'kyo/lists$Lists$$anon$11.apply')
f(19,86,65,2,'kyo/bench/CollectAllBench$$anon$1.apply',65,0,0)
f(20,86,65,2,'kyo/bench/CollectAllBench$$anon$1.apply',65,0,0)
f(21,86,65,2,'scala/runtime/BoxesRunTime.boxToInteger',65,0,0)
f(19,151,18,2,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5',18,0,0)
f(20,154,15,2,'kyo/lists$Lists$$Lambda$40.0x0000000800d0fb38.apply',15,0,0)
f(21,156,13,2,'kyo/lists$Lists.$anonfun$5',13,0,0)
f(22,156,13,2,'scala/collection/mutable/ListBuffer.addOne',13,0,0)
f(23,161,4,2,'scala/collection/immutable/$colon$colon.<init>',4,0,0)
f(24,161,4,2,'scala/runtime/Statics.releaseFence',4,0,0)
f(25,161,4,2,'java/lang/invoke/LambdaForm$MH.0x0000000800ca0400.invoke_MT',4,0,0)
f(23,165,4,2,'scala/collection/mutable/ListBuffer.last0_$eq',4,0,0)
f(16,169,129,2,'kyo/bench/CollectAllBench.kyoBench',72,0,0)
f(17,177,55,1,'scala/collection/AbstractIterable.toList')
f(18,177,55,1,'scala/collection/IterableOnceOps.toList$')
f(19,177,55,1,'scala/collection/IterableOnceOps.toList')
f(20,177,55,1,'scala/collection/immutable/List.prependedAll')
f(21,181,51,2,'scala/collection/immutable/NewVectorIterator.next',51,0,0)
f(22,188,44,2,'scala/collection/immutable/NewVectorIterator.advance',44,0,0)
f(23,189,43,2,'scala/collection/immutable/NewVectorIterator.advanceA',43,0,0)
f(17,232,47,2,'scala/collection/immutable/Range.map',45,0,0)
f(18,234,21,2,'kyo/bench/CollectAllBench$$Lambda$39.0x0000000800cbeb88.apply',21,0,0)
f(19,237,18,2,'kyo/bench/CollectAllBench.$anonfun$adapted$1',18,0,0)
f(20,248,7,2,'kyo/bench/CollectAllBench.$anonfun$1',7,0,0)
f(18,255,5,2,'scala/collection/SeqFactory$Delegate.newBuilder',5,0,0)
f(19,255,5,2,'scala/collection/immutable/Vector$.newBuilder',5,0,0)
f(20,259,1,2,'scala/collection/immutable/Vector$.newBuilder',1,0,0)
f(21,259,1,2,'scala/collection/immutable/VectorBuilder.<init>',1,0,0)
f(22,259,1,2,'java/lang/Object.<init>',1,0,0)
f(18,260,8,2,'scala/collection/immutable/Range.iterator',8,0,0)
f(19,263,5,2,'scala/collection/immutable/RangeIterator.<init>',5,0,0)
f(20,263,5,2,'scala/collection/AbstractIterator.<init>',5,0,0)
f(21,267,1,2,'java/lang/Object.<init>',1,0,0)
f(18,268,2,2,'scala/collection/immutable/RangeIterator.next',2,0,0)
f(19,268,2,2,'scala/collection/immutable/RangeIterator.next',2,0,0)
f(18,270,9,2,'scala/collection/immutable/VectorBuilder.addOne',7,0,0)
f(19,270,9,2,'scala/collection/immutable/VectorBuilder.addOne',7,0,0)
f(20,277,2,1,'scala/collection/immutable/VectorBuilder.advance')
f(21,277,2,1,'scala/collection/immutable/VectorBuilder.advance1')
f(17,279,19,2,'scala/runtime/RichInt$.until$extension',19,0,0)
f(18,279,19,2,'scala/collection/immutable/Range$Exclusive.<init>',19,0,0)
f(19,279,19,2,'scala/collection/immutable/Range.<init>',19,0,0)
f(20,280,6,2,'scala/collection/immutable/AbstractSeq.<init>',6,0,0)
f(21,281,5,2,'scala/collection/AbstractSeq.<init>',5,0,0)
f(22,285,1,2,'scala/collection/AbstractIterable.<init>',1,0,0)
f(20,286,12,2,'scala/collection/immutable/Range.longLength',12,0,0)
f(21,292,6,2,'scala/collection/immutable/Range.hasStub',6,0,0)
f(22,292,6,2,'scala/collection/immutable/Range.isExact',6,0,0)
f(23,292,6,2,'scala/collection/immutable/Range.gap',6,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: 496px}
</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(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,19547,3,'all')
f(1,0,19544,1,'java/lang/Thread.run')
f(2,0,19544,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,19544,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,3402,1,'java/util/concurrent/FutureTask.run')
f(5,0,3402,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,3402,1,'java/util/concurrent/FutureTask.run')
f(7,0,3402,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,3402,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,3402,1,'java/lang/reflect/Method.invoke')
f(10,0,3402,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,3402,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,3402,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,3402,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,3402,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,3402,1,'kyo/bench/Bench.forkKyo')
f(16,0,240,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,240,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,240,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,91,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,0,91,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c81350')
f(19,91,149,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c81350')
f(16,240,378,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,240,378,2,'kyo.bench.Bench$$anon$1')
f(16,618,2118,1,'kyo/bench/Bench.runLoop$2')
f(17,618,964,1,'kyo/bench/Bench$$anon$1.apply')
f(18,618,80,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,618,80,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c88000.apply')
f(20,618,80,1,'kyo/bench/Bench.$anonfun$2')
f(21,618,80,1,'kyo/concurrent/fibers$Fiber.block')
f(22,618,80,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,698,884,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,698,884,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,698,884,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply')
f(21,698,884,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,698,117,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,815,473,2,'kyo.concurrent.scheduler.IOTask')
f(22,1288,288,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,1288,288,2,'kyo.concurrent.fibers$Fiber')
f(22,1576,6,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,1576,6,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,1576,6,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,1576,6,1,'kyo/concurrent/scheduler/Queue.offer')
f(26,1576,6,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(27,1576,6,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(28,1576,6,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(29,1576,6,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(30,1576,6,2,'kyo.concurrent.scheduler.Queue$$Lambda$54+0x0000000800d478c8')
f(17,1582,1154,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,1582,1154,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,1582,1154,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,1582,1154,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,1582,565,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,1582,565,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,1582,274,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,1856,291,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,1856,291,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,2147,274,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,2421,315,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,2421,315,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,2421,315,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,2736,666,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,2736,179,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,2736,179,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,2736,179,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,2736,179,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c82aa8')
f(17,2915,347,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,2915,347,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,3262,140,1,'kyo/locals$Locals$.save')
f(18,3262,140,2,'kyo.locals$Locals$$anon$3')
f(4,3402,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ee58.run')
f(5,3402,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,3402,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,3402,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,3402,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,3402,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,3402,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,3402,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,3413,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f080.run')
f(5,3413,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,3413,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,3413,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,3413,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,3413,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,3413,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,3413,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$68+0x0000000800d4ed20')
f(4,3424,16120,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23480.run')
f(5,3424,16120,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,3424,16120,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,3424,16044,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,3424,16044,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,3424,15948,1,'kyo/bench/CountdownLatchBench$$anon$1.apply')
f(10,3424,15945,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(11,3424,15945,1,'kyo/bench/CountdownLatchBench$$Lambda$62.0x0000000800d4d100.apply')
f(12,3424,15945,1,'kyo/bench/CountdownLatchBench.$anonfun$1')
f(13,3424,15945,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(14,3424,7182,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod')
f(15,3424,7182,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial')
f(16,3424,7182,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,3424,7182,2,'kyo.bench.CountdownLatchBench$$Lambda$62+0x0000000800d4d100')
f(14,10606,8763,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(15,10606,8763,2,'kyo.bench.CountdownLatchBench$$anon$1')
f(10,19369,3,1,'kyo/concurrent/latches$$anon$4.apply')
f(11,19369,3,1,'kyo/concurrent/latches$$anon$4.apply')
f(12,19369,3,1,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete')
f(13,19369,3,1,'kyo/concurrent/fibers$Fiber$Promise.loop$23')
f(14,19369,3,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(15,19369,3,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(16,19369,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(17,19369,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(18,19369,3,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(19,19369,3,1,'scala/runtime/function/JProcedure1.apply')
f(20,19369,3,1,'scala/runtime/function/JProcedure1.apply')
f(21,19369,3,1,'kyo/concurrent/scheduler/IOTask$$Lambda$64.0x0000000800d4dad8.applyVoid')
f(22,19369,3,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(23,19369,3,2,'kyo.concurrent.scheduler.IOTask')
f(9,19372,4,1,'kyo/bench/CountdownLatchBench$$anon$3.apply')
f(10,19372,4,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,19372,4,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,19372,4,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply')
f(13,19372,4,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,19372,1,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(14,19373,3,1,'kyo/concurrent/fibers$Fiber$.promise')
f(15,19373,3,2,'kyo.concurrent.fibers$Fiber')
f(9,19376,10,1,'kyo/bench/CountdownLatchBench$$anon$4.apply')
f(10,19376,6,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$4')
f(11,19376,6,1,'kyo/bench/CountdownLatchBench$$Lambda$57.0x0000000800d4a700.apply')
f(12,19376,6,1,'kyo/bench/CountdownLatchBench.$anonfun$2')
f(13,19376,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(14,19376,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(15,19376,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,19376,1,2,'kyo.bench.CountdownLatchBench$$Lambda$58+0x0000000800d4c3e8')
f(16,19377,1,2,'kyo.bench.CountdownLatchBench$$Lambda$59+0x0000000800d4c6a8')
f(13,19378,1,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$3')
f(14,19378,1,2,'kyo.bench.CountdownLatchBench$$anon$3')
f(13,19379,3,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(14,19379,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(15,19379,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(16,19379,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,19379,2,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c82aa8')
f(14,19381,1,1,'kyo/locals$Locals$.save')
f(15,19381,1,2,'kyo.locals$Locals$$anon$3')
f(10,19382,4,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(11,19382,4,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(12,19382,1,2,'kyo.concurrent.latches$$anon$3')
f(12,19383,3,1,'kyo/concurrent/latches$$anon$3.<init>')
f(13,19383,2,2,'kyo.concurrent.latches$$anon$4')
f(13,19385,1,1,'kyo/concurrent/fibers$Fiber.join')
f(14,19385,1,1,'kyo/concurrent/fibers$Fibers.get')
f(15,19385,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(16,19385,1,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(9,19386,77,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,19386,77,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,19386,75,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c81350.apply')
f(12,19386,75,1,'kyo/bench/Bench.$anonfun$1')
f(13,19386,75,1,'kyo/bench/CountdownLatchBench.kyoBenchFiber')
f(14,19386,1,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$4')
f(15,19386,1,2,'kyo.bench.CountdownLatchBench$$anon$4')
f(14,19387,74,1,'kyo/concurrent/latches$Latches$.init')
f(15,19387,74,1,'kyo/concurrent/latches$Latches$.kyo$concurrent$latches$Latches$$$_$transformLoop$1')
f(16,19387,74,1,'kyo/concurrent/latches$Latches$$$Lambda$56.0x0000000800d49640.apply')
f(17,19387,74,1,'kyo/concurrent/latches$Latches$.$anonfun$adapted$1')
f(18,19387,74,1,'kyo/concurrent/latches$Latches$.$anonfun$1')
f(19,19387,74,2,'kyo.concurrent.latches$Latches$$anon$2')
f(11,19461,2,1,'kyo/bench/CountdownLatchBench$$Lambda$58.0x0000000800d4c3e8.apply')
f(12,19461,2,1,'kyo/bench/CountdownLatchBench.$anonfun$3')
f(13,19461,2,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(14,19461,1,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod')
f(15,19461,1,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial')
f(16,19461,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,19461,1,2,'kyo.bench.CountdownLatchBench$$Lambda$62+0x0000000800d4d100')
f(14,19462,1,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(15,19462,1,2,'kyo.bench.CountdownLatchBench$$anon$1')
f(9,19463,2,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,19463,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,19463,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,19463,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,19463,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$63+0x0000000800d4d6d0')
f(10,19464,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,19464,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(9,19465,3,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,19465,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,19465,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,19465,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,19465,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$64+0x0000000800d4dad8')
f(10,19466,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,19466,2,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,19468,75,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,19468,75,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,19468,75,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,19468,75,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,19468,75,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(12,19468,75,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d48000')
f(7,19543,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,19543,1,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,19543,1,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,19543,1,1,'scala/runtime/ObjectRef.create')
f(11,19543,1,2,'scala.runtime.ObjectRef')
f(1,19544,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,19544,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,19544,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,19544,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,19544,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,19544,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,19544,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,19544,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,19544,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,19544,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,19544,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,19544,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,19544,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,279,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,'PhaseCFG::PhaseCFG(Arena*, RootNode*, Matcher&)')
f(11,0,1,4,'CProjNode::is_block_proj() const')
f(1,1,1,3,'[unknown]')
f(2,1,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(3,1,1,5,'entry_SYSCALL_64_after_hwframe')
f(4,1,1,5,'do_syscall_64')
f(5,1,1,5,'__x64_sys_futex')
f(6,1,1,5,'do_futex')
f(7,1,1,5,'futex_wait')
f(8,1,1,5,'futex_wait_queue_me')
f(9,1,1,5,'schedule')
f(10,1,1,5,'__schedule')
f(11,1,1,5,'finish_task_switch.isra.0')
f(1,2,4,3,'[unknown_Java]')
f(2,2,4,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(1,6,273,1,'java/lang/Thread.run')
f(2,6,273,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,6,273,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,6,12,1,'java/util/concurrent/FutureTask.run')
f(5,6,12,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,6,12,1,'java/util/concurrent/FutureTask.run')
f(7,6,12,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,6,12,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,6,12,1,'java/lang/reflect/Method.invoke')
f(10,6,12,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,6,12,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,6,12,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,6,12,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,6,12,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,6,12,1,'kyo/bench/Bench.forkKyo')
f(16,6,12,1,'kyo/bench/Bench.runLoop$2')
f(17,6,7,1,'kyo/bench/Bench$$anon$1.apply')
f(18,6,7,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,6,7,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,6,6,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply',1,0,0)
f(21,6,6,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',1,0,0)
f(22,6,6,1,'kyo/concurrent/scheduler/Scheduler$.schedule',1,0,0)
f(23,6,6,1,'kyo/concurrent/scheduler/Scheduler$.submit',1,0,0)
f(24,6,6,1,'kyo/concurrent/scheduler/Worker.enqueue',1,0,0)
f(25,6,5,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,6,5,1,'jdk/internal/misc/Unsafe.unpark')
f(27,6,1,3,'Unsafe_Unpark')
f(28,6,1,4,'ThreadsListHandle::cv_internal_thread_to_JavaThread(_jobject*, JavaThread**, oopDesc**)')
f(27,7,4,3,'pthread_cond_signal')
f(28,7,4,5,'entry_SYSCALL_64_after_hwframe')
f(29,7,4,5,'do_syscall_64')
f(30,7,4,5,'__x64_sys_futex')
f(31,7,4,5,'do_futex')
f(32,7,4,5,'futex_wake')
f(33,7,4,5,'wake_up_q')
f(34,7,4,5,'_raw_spin_unlock_irqrestore')
f(25,11,1,2,'kyo/concurrent/scheduler/Queue.offer',1,0,0)
f(26,11,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(27,11,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(28,11,1,2,'java/lang/invoke/DirectMethodHandle.constructorMethod',1,0,0)
f(20,12,1,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',1,0,0)
f(17,13,5,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,13,5,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,13,5,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,13,5,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,13,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,13,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,13,5,1,'java/util/concurrent/locks/LockSupport.park')
f(24,13,5,1,'jdk/internal/misc/Unsafe.park')
f(25,13,5,3,'[unknown]')
f(26,13,4,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,13,4,5,'entry_SYSCALL_64_after_hwframe')
f(28,13,4,5,'do_syscall_64')
f(29,13,4,5,'__x64_sys_futex')
f(30,13,4,5,'do_futex')
f(31,13,4,5,'futex_wait')
f(32,13,1,5,'_raw_spin_lock')
f(32,14,2,5,'futex_wait_queue_me')
f(33,14,2,5,'schedule')
f(34,14,2,5,'__schedule')
f(35,14,2,5,'finish_task_switch.isra.0')
f(32,16,1,5,'futex_wait_setup')
f(26,17,1,3,'pthread_cond_wait')
f(4,18,261,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23480.run')
f(5,18,261,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,18,261,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,26,101,1,'kyo/concurrent/scheduler/IOTask.run',9,0,0)
f(8,26,1,1,'kyo/concurrent/scheduler/IOTask.curr_$eq')
f(8,27,100,1,'kyo/concurrent/scheduler/IOTask.eval',9,0,0)
f(9,36,84,1,'kyo/bench/CountdownLatchBench$$anon$1.apply')
f(10,36,84,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(11,36,84,1,'kyo/bench/CountdownLatchBench$$Lambda$62.0x0000000800d4d100.apply')
f(12,36,84,1,'kyo/bench/CountdownLatchBench.$anonfun$1')
f(13,37,83,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(14,69,22,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod',22,0,0)
f(15,69,22,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial',22,0,0)
f(16,69,8,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',8,0,0)
f(16,77,14,2,'kyo/bench/CountdownLatchBench$$Lambda$62.0x0000000800d4d100.<init>',14,0,0)
f(14,91,27,2,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1',27,0,0)
f(15,109,9,2,'kyo/bench/CountdownLatchBench$$anon$1.<init>',9,0,0)
f(16,112,6,2,'kyo/core$internal$KyoCont.<init>',6,0,0)
f(14,118,1,2,'kyo/concurrent/latches$$anon$3.release',1,0,0)
f(14,119,1,1,'kyo/ios$IOs.unit')
f(15,119,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(16,119,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(17,119,1,4,'MemAllocator::allocate() const')
f(18,119,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(19,119,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(20,119,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(9,120,7,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,120,7,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,120,7,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,120,7,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,120,7,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,120,7,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,120,7,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,120,7,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,120,7,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,120,7,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,120,7,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,120,7,1,'jdk/internal/misc/Unsafe.unpark')
f(21,120,7,3,'pthread_cond_signal')
f(22,121,6,5,'entry_SYSCALL_64_after_hwframe')
f(23,121,6,5,'do_syscall_64')
f(24,121,6,5,'__x64_sys_futex')
f(25,121,6,5,'do_futex')
f(26,121,6,5,'futex_wake')
f(27,121,6,5,'wake_up_q')
f(28,121,6,5,'_raw_spin_unlock_irqrestore')
f(7,127,146,2,'kyo/concurrent/scheduler/Queue.poll',104,0,0)
f(8,131,3,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(9,131,3,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(10,131,3,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d48230.<init>',1,0,0)
f(8,134,139,2,'kyo/concurrent/scheduler/Queue.modify',99,0,0)
f(9,179,30,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',14,0,0)
f(9,209,1,1,'java/util/concurrent/atomic/AtomicBoolean.set')
f(9,210,63,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d48230.apply',49,0,0)
f(10,210,63,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',49,0,0)
f(11,213,2,2,'kyo/concurrent/scheduler/Queue.queue',2,0,0)
f(11,215,58,2,'scala/collection/mutable/PriorityQueue.dequeue',44,0,0)
f(7,273,4,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,273,4,1,'kyo/concurrent/scheduler/Worker.park')
f(9,273,4,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,273,4,1,'jdk/internal/misc/Unsafe.park')
f(11,273,4,3,'[unknown]')
f(12,273,4,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,274,3,5,'entry_SYSCALL_64_after_hwframe')
f(14,274,3,5,'do_syscall_64')
f(15,274,3,5,'__x64_sys_futex')
f(16,274,3,5,'do_futex')
f(17,274,3,5,'futex_wait')
f(18,274,3,5,'futex_wait_queue_me')
f(19,274,1,5,'hrtimer_sleeper_start_expires')
f(20,274,1,5,'hrtimer_start_range_ns')
f(19,275,2,5,'schedule')
f(20,275,2,5,'__schedule')
f(21,275,2,5,'finish_task_switch.isra.0')
f(7,277,2,1,'kyo/concurrent/scheduler/Scheduler$.steal')
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,19534,3,'all')
f(1,0,19531,1,'java/lang/Thread.run')
f(2,0,19531,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,19531,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,3162,1,'java/util/concurrent/FutureTask.run')
f(5,0,3162,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,3162,1,'java/util/concurrent/FutureTask.run')
f(7,0,3162,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,3162,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,3162,1,'java/lang/reflect/Method.invoke')
f(10,0,3162,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,3162,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,3162,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,3162,1,'kyo/bench/jmh_generated/CountdownLatchBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,3162,1,'kyo/bench/jmh_generated/CountdownLatchBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,3162,1,'kyo/bench/Bench.syncKyo')
f(16,0,1494,1,'kyo/bench/Bench.runLoop$1')
f(17,0,677,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,677,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,677,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,677,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,352,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,352,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,190,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,190,162,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,190,162,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,352,142,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,494,183,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,494,183,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,494,183,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,677,817,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,677,673,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,677,673,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,677,673,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,677,455,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,677,455,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,677,455,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply')
f(24,677,455,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,677,47,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(25,724,359,2,'kyo.concurrent.scheduler.IOTask')
f(25,1083,49,1,'kyo/concurrent/fibers$Fiber$.promise')
f(26,1083,49,2,'kyo.concurrent.fibers$Fiber')
f(21,1132,218,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,1132,218,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c88000.apply')
f(23,1132,218,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,1132,218,1,'kyo/concurrent/fibers$Fiber.join')
f(25,1132,218,1,'kyo/concurrent/fibers$Fibers.get')
f(26,1132,218,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,1132,218,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,1350,144,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,1350,144,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c88800.apply')
f(20,1350,144,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,1350,144,1,'kyo/concurrent/fibers$Fiber.block')
f(22,1350,144,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,1494,1668,1,'kyo/bench/CountdownLatchBench.kyoBench')
f(17,1494,205,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1494,205,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1494,205,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1494,46,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(21,1494,46,2,'kyo.bench.CountdownLatchBench$$Lambda$37+0x0000000800c81350')
f(20,1540,159,2,'kyo.bench.CountdownLatchBench$$Lambda$37+0x0000000800c81350')
f(17,1699,764,1,'kyo/concurrent/fibers$Fibers.block')
f(18,1699,48,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,1699,48,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,1699,48,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,1699,48,2,'kyo.concurrent.fibers$Fibers$$Lambda$40+0x0000000800c88800')
f(18,1747,130,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,1747,130,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,1877,396,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,1877,396,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,2273,190,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,2273,190,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,2463,699,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,2463,85,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,2463,85,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,2463,85,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,2463,85,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c88000')
f(18,2548,478,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,2548,181,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,2548,181,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,2548,181,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,2548,181,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c82aa8')
f(19,2729,165,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,2729,165,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(19,2894,132,1,'kyo/locals$Locals$.save')
f(20,2894,132,2,'kyo.locals$Locals$$anon$3')
f(18,3026,136,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,3026,136,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(4,3162,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f088.run')
f(5,3162,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,3162,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,3162,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,3162,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,3162,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,3162,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,3162,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,3173,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1f2b0.run')
f(5,3173,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,3173,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,3173,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,3173,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,3173,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,3173,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$69+0x0000000800d4ed20')
f(4,3184,16347,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23688.run')
f(5,3184,16347,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,3184,16347,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,3184,16346,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,3184,16346,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,3184,16185,1,'kyo/bench/CountdownLatchBench$$anon$1.apply')
f(10,3184,16181,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(11,3184,16181,1,'kyo/bench/CountdownLatchBench$$Lambda$63.0x0000000800d4d100.apply')
f(12,3184,16181,1,'kyo/bench/CountdownLatchBench.$anonfun$1')
f(13,3184,16181,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(14,3184,6826,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod')
f(15,3184,6826,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial')
f(16,3184,6826,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,3184,6826,2,'kyo.bench.CountdownLatchBench$$Lambda$63+0x0000000800d4d100')
f(14,10010,9355,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(15,10010,9355,2,'kyo.bench.CountdownLatchBench$$anon$1')
f(10,19365,4,1,'kyo/concurrent/latches$$anon$4.apply')
f(11,19365,4,1,'kyo/concurrent/latches$$anon$4.apply')
f(12,19365,4,1,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete')
f(13,19365,4,1,'kyo/concurrent/fibers$Fiber$Promise.loop$23')
f(14,19365,4,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(15,19365,4,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(16,19365,4,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(17,19365,4,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(18,19365,4,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(19,19365,4,1,'scala/runtime/function/JProcedure1.apply')
f(20,19365,4,1,'scala/runtime/function/JProcedure1.apply')
f(21,19365,4,1,'kyo/concurrent/scheduler/IOTask$$Lambda$65.0x0000000800d4dad8.applyVoid')
f(22,19365,4,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(23,19365,3,2,'kyo.concurrent.scheduler.IOTask')
f(23,19368,1,1,'kyo/concurrent/scheduler/IOPromise.become')
f(24,19368,1,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(25,19368,1,1,'kyo/concurrent/scheduler/IOPromise$Linked$.apply')
f(26,19368,1,2,'kyo.concurrent.scheduler.IOPromise$Linked')
f(9,19369,1,1,'kyo/bench/CountdownLatchBench$$anon$3.apply')
f(10,19369,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,19369,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,19369,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply')
f(13,19369,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,19369,1,2,'kyo.concurrent.scheduler.IOTask')
f(9,19370,3,1,'kyo/bench/CountdownLatchBench$$anon$4.apply')
f(10,19370,3,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(11,19370,3,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(12,19370,1,2,'kyo.concurrent.latches$$anon$3')
f(12,19371,2,1,'kyo/concurrent/latches$$anon$3.<init>')
f(13,19371,2,1,'kyo/concurrent/fibers$Fibers.unsafePromise')
f(14,19371,2,2,'kyo.concurrent.fibers$Fiber$Promise')
f(9,19373,153,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,19373,153,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,19373,150,1,'kyo/bench/CountdownLatchBench$$Lambda$37.0x0000000800c81350.apply')
f(12,19373,150,1,'kyo/bench/CountdownLatchBench.kyoBench$$anonfun$1')
f(13,19373,150,1,'kyo/bench/CountdownLatchBench.kyoBenchFiber')
f(14,19373,1,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$4')
f(15,19373,1,2,'kyo.bench.CountdownLatchBench$$anon$4')
f(14,19374,149,1,'kyo/concurrent/latches$Latches$.init')
f(15,19374,149,1,'kyo/concurrent/latches$Latches$.kyo$concurrent$latches$Latches$$$_$transformLoop$1')
f(16,19374,149,1,'kyo/concurrent/latches$Latches$$$Lambda$57.0x0000000800d49870.apply')
f(17,19374,149,1,'kyo/concurrent/latches$Latches$.$anonfun$adapted$1')
f(18,19374,149,1,'kyo/concurrent/latches$Latches$.$anonfun$1')
f(19,19374,149,2,'kyo.concurrent.latches$Latches$$anon$2')
f(11,19523,3,1,'kyo/bench/CountdownLatchBench$$Lambda$59.0x0000000800d4c3e8.apply')
f(12,19523,3,1,'kyo/bench/CountdownLatchBench.$anonfun$3')
f(13,19523,3,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(14,19523,2,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod')
f(15,19523,2,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial')
f(16,19523,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,19523,2,2,'kyo.bench.CountdownLatchBench$$Lambda$63+0x0000000800d4d100')
f(14,19525,1,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(15,19525,1,2,'kyo.bench.CountdownLatchBench$$anon$1')
f(9,19526,4,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,19526,3,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,19526,3,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,19526,3,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,19526,3,2,'kyo.concurrent.scheduler.IOTask$$Lambda$65+0x0000000800d4dad8')
f(10,19529,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,19529,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,19530,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,19530,1,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,19530,1,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,19530,1,1,'scala/runtime/ObjectRef.create')
f(11,19530,1,2,'scala.runtime.ObjectRef')
f(1,19531,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,19531,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,19531,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,19531,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,19531,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,19531,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,19531,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,19531,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,19531,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,19531,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,19531,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,19531,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,19531,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,275,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,3,4,'JavaThread::thread_main_inner()')
f(5,0,3,4,'CompileBroker::compiler_thread_loop()')
f(6,0,3,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,3,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,3,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,2,4,'Compile::Code_Gen()')
f(10,0,1,4,'PhaseChaitin::Register_Allocate()')
f(11,0,1,4,'PhaseLive::compute(unsigned int)')
f(12,0,1,4,'PhaseLive::add_liveout(Block*, IndexSet*, VectorSet&)')
f(13,0,1,4,'IndexSet::alloc_block_containing(unsigned int)')
f(10,1,1,4,'PhaseOutput::install()')
f(11,1,1,4,'PhaseOutput::install_code(ciMethod*, int, AbstractCompiler*, bool, bool, RTMState)')
f(12,1,1,4,'ciEnv::register_method(ciMethod*, int, CodeOffsets*, int, CodeBuffer*, int, OopMapSet*, ExceptionHandlerTable*, ImplicitExceptionTable*, AbstractCompiler*, bool, bool, RTMState, GrowableArrayView<RuntimeStub*> const&)')
f(13,1,1,4,'Dependencies::validate_dependencies(CompileTask*, char**)')
f(14,1,1,4,'Dependencies::DepStream::check_new_klass_dependency(NewKlassDepChange*)')
f(9,2,1,4,'Compile::Optimize()')
f(10,2,1,4,'PhaseIdealLoop::optimize(PhaseIterGVN&, LoopOptsMode)')
f(11,2,1,4,'PhaseIdealLoop::build_and_optimize(LoopOptsMode)')
f(12,2,1,4,'PhaseIdealLoop::build_loop_late(VectorSet&, Node_List&, Node_Stack&)')
f(13,2,1,4,'ProjNode::Opcode() const')
f(4,3,1,4,'VMThread::run()')
f(5,3,1,4,'VMThread::inner_execute(VM_Operation*)')
f(6,3,1,4,'VMThread::evaluate_operation(VM_Operation*)')
f(7,3,1,4,'VM_Operation::evaluate()')
f(8,3,1,4,'VM_G1CollectForAllocation::doit()')
f(9,3,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint(double)')
f(10,3,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint_helper(double)')
f(11,3,1,4,'G1CollectedHeap::post_evacuate_collection_set(G1EvacuationInfo&, G1RedirtyCardsQueueSet*, G1ParScanThreadStateSet*)')
f(12,3,1,4,'HeapRegionManager::rebuild_free_list(WorkGang*)')
f(13,3,1,4,'WorkGang::run_task(AbstractGangTask*, unsigned int, bool)')
f(14,3,1,3,'sem_post')
f(15,3,1,5,'entry_SYSCALL_64_after_hwframe')
f(16,3,1,5,'do_syscall_64')
f(17,3,1,5,'__x64_sys_futex')
f(18,3,1,5,'do_futex')
f(19,3,1,5,'futex_wake')
f(20,3,1,5,'mark_wake_futex')
f(1,4,271,1,'java/lang/Thread.run')
f(2,4,271,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,4,271,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,4,16,1,'java/util/concurrent/FutureTask.run')
f(5,4,16,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,4,16,1,'java/util/concurrent/FutureTask.run')
f(7,4,16,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,4,16,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,4,16,1,'java/lang/reflect/Method.invoke')
f(10,4,16,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,4,16,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,4,16,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,4,16,1,'kyo/bench/jmh_generated/CountdownLatchBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,4,16,1,'kyo/bench/jmh_generated/CountdownLatchBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,4,16,1,'kyo/bench/Bench.syncKyo')
f(16,4,16,1,'kyo/bench/Bench.runLoop$1')
f(17,4,9,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,4,9,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,4,9,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,4,9,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,4,9,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,4,9,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,4,9,1,'java/util/concurrent/locks/LockSupport.park')
f(24,4,9,1,'jdk/internal/misc/Unsafe.park')
f(25,4,1,3,'Unsafe_Park')
f(26,4,1,3,'pthread_cond_wait')
f(25,5,8,3,'[unknown]')
f(26,5,8,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,6,7,5,'entry_SYSCALL_64_after_hwframe')
f(28,6,7,5,'do_syscall_64')
f(29,6,6,5,'__x64_sys_futex')
f(30,6,6,5,'do_futex')
f(31,6,6,5,'futex_wait')
f(32,6,6,5,'futex_wait_queue_me')
f(33,6,6,5,'schedule')
f(34,6,6,5,'__schedule')
f(35,6,6,5,'finish_task_switch.isra.0')
f(29,12,1,5,'syscall_enter_from_user_mode')
f(17,13,7,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,13,7,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,13,7,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,13,7,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,13,7,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,13,7,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,13,7,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply')
f(24,13,7,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,13,7,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,13,7,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,13,7,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(28,13,7,1,'java/util/concurrent/locks/LockSupport.unpark')
f(29,13,7,1,'jdk/internal/misc/Unsafe.unpark')
f(30,13,1,3,'Unsafe_Unpark')
f(31,13,1,3,'pthread_mutex_lock')
f(30,14,6,3,'pthread_cond_signal')
f(31,14,6,5,'entry_SYSCALL_64_after_hwframe')
f(32,14,6,5,'do_syscall_64')
f(33,14,5,5,'__x64_sys_futex')
f(34,15,4,5,'do_futex')
f(35,15,3,5,'futex_wake')
f(36,15,3,5,'wake_up_q')
f(37,15,3,5,'_raw_spin_unlock_irqrestore')
f(35,18,1,5,'hash_futex')
f(33,19,1,5,'syscall_enter_from_user_mode')
f(4,20,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f088.run')
f(5,20,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,20,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,20,1,1,'java/lang/Thread.sleep')
f(8,20,1,3,'[unknown]')
f(9,20,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,20,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,20,1,5,'do_syscall_64')
f(12,20,1,5,'__x64_sys_futex')
f(13,20,1,5,'do_futex')
f(14,20,1,5,'futex_wait')
f(15,20,1,5,'futex_wait_queue_me')
f(16,20,1,5,'schedule')
f(17,20,1,5,'__schedule')
f(18,20,1,5,'finish_task_switch.isra.0')
f(4,21,254,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23688.run')
f(5,21,254,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,21,254,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,22,239,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,22,239,2,'kyo/concurrent/scheduler/IOTask.eval',232,0,0)
f(9,125,126,2,'kyo/bench/CountdownLatchBench$$anon$1.apply',125,0,0)
f(10,133,118,2,'kyo/concurrent/latches$$anon$4.apply',117,0,0)
f(11,133,118,2,'kyo/concurrent/latches$$anon$4.apply',117,0,0)
f(12,133,3,2,'java/util/concurrent/atomic/AtomicInteger.decrementAndGet',3,0,0)
f(12,136,115,2,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete',114,0,0)
f(13,145,106,2,'kyo/concurrent/fibers$Fiber$Promise.loop$23',105,0,0)
f(14,180,71,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',70,0,0)
f(15,202,49,2,'kyo/concurrent/scheduler/IOPromise.complete',48,0,0)
f(16,209,15,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',15,0,0)
f(17,209,15,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',15,0,0)
f(18,209,15,2,'java/lang/invoke/VarForm.getMemberName',15,0,0)
f(16,224,27,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',26,0,0)
f(17,224,27,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',26,0,0)
f(18,248,3,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run',2,0,0)
f(19,250,1,1,'scala/runtime/function/JProcedure1.apply')
f(20,250,1,2,'scala/runtime/function/JProcedure1.apply',1,0,0)
f(21,250,1,2,'kyo/concurrent/scheduler/IOTask$$Lambda$65.0x0000000800d4dad8.applyVoid',1,0,0)
f(22,250,1,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',1,0,0)
f(23,250,1,2,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1',1,0,0)
f(24,250,1,2,'kyo/concurrent/scheduler/IOTask$$Lambda$66.0x0000000800d4dee0.apply',1,0,0)
f(25,250,1,2,'kyo/concurrent/scheduler/IOTask.$anonfun$1',1,0,0)
f(26,250,1,2,'kyo/bench/CountdownLatchBench$$anon$2.apply',1,0,0)
f(27,250,1,2,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$2',1,0,0)
f(28,250,1,2,'kyo/bench/CountdownLatchBench$$Lambda$61.0x0000000800d4ca78.apply',1,0,0)
f(29,250,1,2,'kyo/bench/CountdownLatchBench.$anonfun$5',1,0,0)
f(30,250,1,2,'scala/runtime/BoxesRunTime.boxToInteger',1,0,0)
f(9,251,3,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',3,0,0)
f(9,254,1,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,254,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(11,254,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(12,254,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(9,255,5,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,255,5,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,255,5,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,255,5,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,255,5,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,255,5,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,255,5,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,255,5,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,255,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,255,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,255,5,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,255,5,1,'jdk/internal/misc/Unsafe.unpark')
f(21,255,1,3,'Unsafe_Unpark')
f(22,255,1,4,'ThreadsListHandle::ThreadsListHandle(Thread*)')
f(21,256,4,3,'pthread_cond_signal')
f(22,256,4,5,'entry_SYSCALL_64_after_hwframe')
f(23,256,4,5,'do_syscall_64')
f(24,256,4,5,'__x64_sys_futex')
f(25,256,4,5,'do_futex')
f(26,256,4,5,'futex_wake')
f(27,256,4,5,'wake_up_q')
f(28,256,4,5,'_raw_spin_unlock_irqrestore')
f(9,260,1,3,'vtable stub')
f(7,261,2,2,'kyo/concurrent/scheduler/Queue.poll',2,0,0)
f(8,261,2,2,'kyo/concurrent/scheduler/Queue.modify',2,0,0)
f(9,261,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(10,261,1,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',1,0,0)
f(9,262,1,2,'kyo/concurrent/scheduler/Queue$$Lambda$56.0x0000000800d48230.apply',1,0,0)
f(10,262,1,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',1,0,0)
f(11,262,1,2,'scala/collection/mutable/PriorityQueue.dequeue',1,0,0)
f(7,263,12,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,263,12,1,'kyo/concurrent/scheduler/Worker.park')
f(9,263,12,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,263,12,1,'jdk/internal/misc/Unsafe.park')
f(11,264,1,3,'Unsafe_Park')
f(12,264,1,3,'clock_gettime')
f(13,264,1,3,'[vdso]')
f(11,265,10,3,'[unknown]')
f(12,265,10,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,265,10,5,'entry_SYSCALL_64_after_hwframe')
f(14,265,10,5,'do_syscall_64')
f(15,265,10,5,'__x64_sys_futex')
f(16,266,9,5,'do_futex')
f(17,266,9,5,'futex_wait')
f(18,266,9,5,'futex_wait_queue_me')
f(19,266,9,5,'schedule')
f(20,266,9,5,'__schedule')
f(21,266,9,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,11344,3,'all')
f(1,0,11340,1,'java/lang/Thread.run')
f(2,0,11340,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,11340,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,1471,1,'java/util/concurrent/FutureTask.run')
f(5,0,1471,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,1471,1,'java/util/concurrent/FutureTask.run')
f(7,0,1471,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,1471,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1471,1,'java/lang/reflect/Method.invoke')
f(10,0,1471,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,1471,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,1471,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,1471,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,1471,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,1471,1,'kyo/bench/Bench.forkKyo')
f(16,0,156,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,156,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,156,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,156,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3e760')
f(16,156,143,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,156,143,2,'kyo.bench.Bench$$anon$1')
f(16,299,929,1,'kyo/bench/Bench.runLoop$2')
f(17,299,445,1,'kyo/bench/Bench$$anon$1.apply')
f(18,299,11,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,299,11,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c82ba8.apply')
f(20,299,11,1,'kyo/bench/Bench.$anonfun$2')
f(21,299,11,1,'kyo/concurrent/fibers$Fiber.block')
f(22,299,11,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,310,434,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,310,434,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,310,434,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply')
f(21,310,434,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,310,40,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,350,277,2,'kyo.concurrent.scheduler.IOTask')
f(22,627,117,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,627,117,2,'kyo.concurrent.fibers$Fiber')
f(17,744,484,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,744,484,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,744,484,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,744,484,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,744,207,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,744,207,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,744,83,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,827,124,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,827,124,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,951,121,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,1072,156,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,1072,156,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,1072,156,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,1228,243,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,1228,69,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1228,69,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1228,69,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1228,69,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84000')
f(17,1297,118,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,1297,118,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,1415,56,1,'kyo/locals$Locals$.save')
f(18,1415,56,2,'kyo.locals$Locals$$anon$3')
f(4,1471,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,1471,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,1471,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,1471,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,1471,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,1471,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,1471,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,1471,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,1482,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e5f8.run')
f(5,1482,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,1482,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,1482,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,1482,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,1482,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,1482,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,1482,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$58+0x0000000800d4c580')
f(4,1493,9847,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,1493,9847,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,1493,9847,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,1493,9846,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,1493,9846,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,1493,9802,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(10,1493,9802,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(11,1493,9802,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(12,1493,9802,2,'kyo.bench.DeepBindBench$$anon$1')
f(9,11295,44,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,11295,44,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,11295,44,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e760.apply')
f(12,11295,44,1,'kyo/bench/Bench.$anonfun$1')
f(13,11295,44,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,11295,44,1,'kyo/bench/DeepBindBench.kyoBench')
f(15,11295,44,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(16,11295,44,2,'kyo.bench.DeepBindBench$$anon$1')
f(7,11339,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,11339,1,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,11339,1,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,11339,1,1,'scala/runtime/ObjectRef.create')
f(11,11339,1,2,'scala.runtime.ObjectRef')
f(1,11340,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,11340,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,11340,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,11340,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,11340,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,11340,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,11340,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,11340,1,2,'org.openjdk.jmh.runner.InfraControl')
f(8,11341,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,11341,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,11341,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,11341,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,11341,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,11341,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,256,3,'all')
f(1,0,1,3,'[unknown_Java]')
f(2,0,1,1,'jdk/internal/misc/Unsafe.unpark')
f(1,1,255,1,'java/lang/Thread.run')
f(2,1,255,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,1,255,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,1,28,1,'java/util/concurrent/FutureTask.run')
f(5,1,28,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,1,28,1,'java/util/concurrent/FutureTask.run')
f(7,1,28,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,1,28,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,1,28,1,'java/lang/reflect/Method.invoke')
f(10,1,28,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,1,28,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,1,28,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,1,28,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,1,28,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,1,28,1,'kyo/bench/Bench.forkKyo')
f(16,1,28,1,'kyo/bench/Bench.runLoop$2')
f(17,1,16,1,'kyo/bench/Bench$$anon$1.apply')
f(18,1,16,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',1,0,0)
f(19,1,16,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',1,0,0)
f(20,1,16,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply',1,0,0)
f(21,1,16,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',1,0,0)
f(22,1,1,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',1,0,0)
f(22,2,15,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,2,15,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,2,14,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,2,14,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,2,14,1,'jdk/internal/misc/Unsafe.unpark')
f(27,2,1,3,'Unsafe_Unpark')
f(28,2,1,4,'java_lang_Thread::thread(oopDesc*)')
f(27,3,13,3,'pthread_cond_signal')
f(28,3,13,5,'entry_SYSCALL_64_after_hwframe')
f(29,3,1,5,'__x64_sys_futex')
f(29,4,12,5,'do_syscall_64')
f(30,4,12,5,'__x64_sys_futex')
f(31,4,12,5,'do_futex')
f(32,4,12,5,'futex_wake')
f(33,5,11,5,'wake_up_q')
f(34,6,10,5,'_raw_spin_unlock_irqrestore')
f(24,16,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.poll')
f(17,17,12,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,17,12,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,17,12,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,17,12,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,17,12,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,17,12,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,18,1,2,'java/util/concurrent/locks/AbstractQueuedSynchronizer$Node.setPrevRelaxed',1,0,0)
f(23,19,9,1,'java/util/concurrent/locks/LockSupport.park')
f(24,19,9,1,'jdk/internal/misc/Unsafe.park')
f(25,19,9,3,'[unknown]')
f(26,19,9,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,19,9,5,'entry_SYSCALL_64_after_hwframe')
f(28,19,9,5,'do_syscall_64')
f(29,19,9,5,'__x64_sys_futex')
f(30,19,9,5,'do_futex')
f(31,19,9,5,'futex_wait')
f(32,20,7,5,'futex_wait_queue_me')
f(33,20,7,5,'schedule')
f(34,20,7,5,'__schedule')
f(35,21,6,5,'finish_task_switch.isra.0')
f(32,27,1,5,'hash_futex')
f(23,28,1,2,'kyo/concurrent/scheduler/IOPromise$$anon$1.tryAcquireShared',1,0,0)
f(4,29,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,29,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,29,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,29,1,1,'java/lang/Thread.sleep')
f(8,29,1,3,'[unknown]')
f(9,29,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,29,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,29,1,5,'do_syscall_64')
f(12,29,1,5,'__x64_sys_futex')
f(13,29,1,5,'do_futex')
f(14,29,1,5,'futex_wait')
f(15,29,1,5,'futex_wait_queue_me')
f(16,29,1,5,'schedule')
f(17,29,1,5,'__schedule')
f(18,29,1,5,'finish_task_switch.isra.0')
f(4,30,226,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,30,226,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,30,226,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,36,3,2,'kyo/concurrent/scheduler/IOTask.reenqueue',3,0,0)
f(8,36,3,2,'scala/runtime/BoxesRunTime.equals',3,0,0)
f(9,36,3,2,'scala/runtime/BoxesRunTime.equals2',3,0,0)
f(7,39,25,1,'kyo/concurrent/scheduler/IOTask.run',4,0,0)
f(8,39,21,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,39,21,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,39,21,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,39,21,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,39,21,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,39,21,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,39,21,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,39,21,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,39,21,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,39,21,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,39,21,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,39,21,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,39,21,1,'jdk/internal/misc/Unsafe.unpark')
f(21,39,21,3,'pthread_cond_signal')
f(22,39,21,5,'entry_SYSCALL_64_after_hwframe')
f(23,39,21,5,'do_syscall_64')
f(24,39,21,5,'__x64_sys_futex')
f(25,39,21,5,'do_futex')
f(26,39,21,5,'futex_wake')
f(27,41,1,5,'mark_wake_futex')
f(27,42,18,5,'wake_up_q')
f(28,42,18,5,'_raw_spin_unlock_irqrestore')
f(8,60,4,2,'scala/runtime/BoxesRunTime.equals',4,0,0)
f(7,64,177,2,'kyo/concurrent/scheduler/Queue.poll',176,0,0)
f(8,64,4,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',4,0,0)
f(9,64,4,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',4,0,0)
f(10,64,4,2,'java/lang/invoke/DirectMethodHandle.constructorMethod',4,0,0)
f(8,68,173,2,'kyo/concurrent/scheduler/Queue.modify',172,0,0)
f(9,75,22,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',22,0,0)
f(10,75,22,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',22,0,0)
f(11,75,22,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',22,0,0)
f(9,97,144,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47378.apply',143,0,0)
f(10,176,65,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',64,0,0)
f(11,190,51,2,'scala/collection/mutable/PriorityQueue.dequeue',50,0,0)
f(12,202,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(13,202,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(14,202,1,4,'MemAllocator::allocate() const')
f(15,202,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(16,202,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(12,203,28,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',28,0,0)
f(12,231,2,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_size0',2,0,0)
f(13,231,2,2,'scala/collection/mutable/ArrayBuffer.size0',2,0,0)
f(12,233,8,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_size0_$eq',8,0,0)
f(13,233,8,2,'scala/collection/mutable/ArrayBuffer.size0_$eq',8,0,0)
f(7,241,15,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,241,15,1,'kyo/concurrent/scheduler/Worker.park')
f(9,241,15,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,241,15,1,'jdk/internal/misc/Unsafe.park')
f(11,241,1,3,'Unsafe_Park')
f(12,241,1,4,'Parker::park(bool, long)')
f(13,241,1,5,'asm_sysvec_hyperv_stimer0')
f(14,241,1,5,'sysvec_hyperv_stimer0')
f(15,241,1,5,'irq_exit_rcu')
f(16,241,1,5,'__irq_exit_rcu')
f(17,241,1,5,'__softirqentry_text_start')
f(18,241,1,5,'run_rebalance_domains')
f(19,241,1,5,'rebalance_domains')
f(20,241,1,5,'load_balance')
f(21,241,1,5,'_find_next_bit')
f(11,242,14,3,'[unknown]')
f(12,242,14,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,242,14,5,'entry_SYSCALL_64_after_hwframe')
f(14,242,14,5,'do_syscall_64')
f(15,242,13,5,'__x64_sys_futex')
f(16,242,13,5,'do_futex')
f(17,242,13,5,'futex_wait')
f(18,242,12,5,'futex_wait_queue_me')
f(19,242,12,5,'schedule')
f(20,242,12,5,'__schedule')
f(21,242,12,5,'finish_task_switch.isra.0')
f(18,254,1,5,'futex_wait_setup')
f(15,255,1,5,'syscall_exit_to_user_mode')
f(16,255,1,5,'exit_to_user_mode_prepare')
f(17,255,1,5,'exit_to_user_mode_loop')
f(18,255,1,5,'__rseq_handle_notify_resume')
f(19,255,1,5,'rseq_ip_fixup')
f(20,255,1,5,'__get_user_8')
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: 368px}
</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(23);
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,20054,3,'all')
f(1,0,20049,1,'java/lang/Thread.run')
f(2,0,20049,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,20049,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,20049,1,'java/util/concurrent/FutureTask.run')
f(5,0,20049,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,20049,1,'java/util/concurrent/FutureTask.run')
f(7,0,20049,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,20049,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,20049,1,'java/lang/reflect/Method.invoke')
f(10,0,20049,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,20049,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,20049,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,20049,1,'kyo/bench/jmh_generated/DeepBindBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,20049,1,'kyo/bench/jmh_generated/DeepBindBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,20049,1,'kyo/bench/Bench.syncKyo')
f(16,0,20047,1,'kyo/bench/Bench.runLoop$1')
f(17,0,20047,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(18,0,20047,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(19,0,20047,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(20,0,20047,2,'kyo.bench.DeepBindBench$$anon$1')
f(16,20047,2,1,'kyo/bench/DeepBindBench.kyoBench')
f(17,20047,2,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(18,20047,2,2,'kyo.bench.DeepBindBench$$anon$1')
f(1,20049,5,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,20049,5,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,20049,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,20049,5,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,20049,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,20049,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,20049,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,20049,1,2,'org.openjdk.jmh.infra.Control')
f(8,20050,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,20050,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,20050,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,20050,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,20050,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,20050,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,20053,1,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,20053,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,20053,1,1,'java/lang/ClassLoader.loadClass')
f(10,20053,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,20053,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,20053,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,20053,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,20053,1,1,'jdk/internal/loader/URLClassPath.getResource')
f(15,20053,1,1,'jdk/internal/loader/URLClassPath$JarLoader.getResource')
f(16,20053,1,1,'java/util/jar/JarFile.getJarEntry')
f(17,20053,1,1,'java/util/jar/JarFile.getEntry')
f(18,20053,1,1,'java/util/zip/ZipFile.getEntry')
f(19,20053,1,1,'java/util/zip/ZipFile.getZipEntry')
f(20,20053,1,1,'java/util/jar/JavaUtilJarAccessImpl.entryFor')
f(21,20053,1,1,'java/util/jar/JarFile.entryFor')
f(22,20053,1,2,'java.util.jar.JarFile$JarFileEntry')
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,4,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(16,1,3,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(17,1,1,4,'MemAllocator::Allocation::notify_allocation_jfr_sampler()')
f(17,2,2,4,'MemAllocator::allocate() const')
f(18,2,2,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(19,2,1,4,'G1CardTable::g1_mark_as_young(MemRegion const&)')
f(19,3,1,4,'ThreadLocalAllocBuffer::fill(HeapWordImpl**, HeapWordImpl**, unsigned long)')
f(15,4,163,2,'kyo/bench/Bench.syncKyo',163,0,0)
f(16,4,163,2,'kyo/bench/Bench.runLoop$1',163,0,0)
f(17,99,68,2,'kyo/bench/DeepBindBench$$anon$1.apply',68,0,0)
f(18,99,68,2,'kyo/bench/DeepBindBench$$anon$1.apply',68,0,0)
f(19,147,20,2,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1',20,0,0)
f(20,164,3,2,'kyo/bench/DeepBindBench$$anon$1.<init>',3,0,0)
f(15,167,131,2,'org/openjdk/jmh/infra/Blackhole.consume',131,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,12644,3,'all')
f(1,0,12639,1,'java/lang/Thread.run')
f(2,0,12639,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,12639,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,808,1,'java/util/concurrent/FutureTask.run')
f(5,0,808,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,808,1,'java/util/concurrent/FutureTask.run')
f(7,0,808,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,808,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1,2,'java.lang.Object[]')
f(9,1,807,1,'java/lang/reflect/Method.invoke')
f(10,1,807,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,1,807,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,1,807,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,1,807,1,'kyo/bench/jmh_generated/DeepBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,1,805,1,'kyo/bench/jmh_generated/DeepBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,1,805,1,'kyo/bench/Bench.forkKyo')
f(16,1,47,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,1,47,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,1,47,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,1,47,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3e730')
f(16,48,78,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,48,78,2,'kyo.bench.Bench$$anon$1')
f(16,126,500,1,'kyo/bench/Bench.runLoop$2')
f(17,126,254,1,'kyo/bench/Bench$$anon$1.apply')
f(18,126,55,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,126,55,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c82ba8.apply')
f(20,126,55,1,'kyo/bench/Bench.$anonfun$2')
f(21,126,55,1,'kyo/concurrent/fibers$Fiber.block')
f(22,126,55,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,181,199,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,181,199,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,181,199,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply')
f(21,181,199,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,181,198,2,'kyo.concurrent.scheduler.IOTask')
f(22,379,1,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,379,1,2,'kyo.concurrent.fibers$Fiber')
f(17,380,246,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,380,246,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,380,246,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,380,246,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,380,57,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,380,57,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,380,57,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,380,57,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,437,25,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,462,164,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,462,164,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,462,164,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,626,180,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,626,179,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,626,179,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,626,179,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,626,179,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84000')
f(17,805,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,805,1,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(14,806,1,1,'org/openjdk/jmh/results/BenchmarkTaskResult.<init>')
f(15,806,1,2,'java.util.ArrayList')
f(14,807,1,1,'org/openjdk/jmh/results/ThroughputResult.<init>')
f(15,807,1,1,'org/openjdk/jmh/results/Result.of')
f(16,807,1,2,'org.openjdk.jmh.util.SingletonStatistics')
f(4,808,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,808,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,808,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,808,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,808,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,808,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,808,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,808,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,819,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e5f8.run')
f(5,819,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,819,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,819,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,819,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,819,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,819,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,819,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$69+0x0000000800d4e950')
f(4,830,11809,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,830,11809,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,830,11809,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,830,11809,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,830,11809,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,830,10473,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(10,830,10473,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(11,830,499,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(12,830,499,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(13,830,499,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(14,830,499,2,'kyo.bench.DeepBindMapBench$$anon$1$$Lambda$66+0x0000000800d4e000')
f(11,1329,452,2,'kyo.bench.DeepBindMapBench$$anon$1$$anon$2')
f(11,1781,660,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(12,1781,660,2,'kyo.bench.DeepBindMapBench$$anon$3')
f(11,2441,673,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$transformLoop$2')
f(12,2441,673,2,'kyo.bench.DeepBindMapBench$$anon$4')
f(11,3114,1250,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$transformLoop$3')
f(12,3114,1250,2,'kyo.bench.DeepBindMapBench$$anon$5')
f(11,4364,815,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$transformLoop$4')
f(12,4364,815,2,'kyo.bench.DeepBindMapBench$$anon$6')
f(11,5179,826,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$transformLoop$5')
f(12,5179,826,2,'kyo.bench.DeepBindMapBench$$anon$7')
f(11,6005,401,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$transformLoop$6')
f(12,6005,401,2,'kyo.bench.DeepBindMapBench$$anon$8')
f(11,6406,1288,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$transformLoop$7')
f(12,6406,1288,2,'kyo.bench.DeepBindMapBench$$anon$9')
f(11,7694,844,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$transformLoop$8')
f(12,7694,844,2,'kyo.bench.DeepBindMapBench$$anon$10')
f(11,8538,1252,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$transformLoop$9')
f(12,8538,1252,2,'kyo.bench.DeepBindMapBench$$anon$11')
f(11,9790,583,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$transformLoop$10')
f(12,9790,583,2,'kyo.bench.DeepBindMapBench$$anon$12')
f(11,10373,930,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(12,10373,930,2,'kyo.bench.DeepBindMapBench$$anon$13')
f(9,11303,1214,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(10,11303,1022,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(11,11303,1022,1,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$66.0x0000000800d4e000.apply')
f(12,11303,1022,1,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$$anonfun$adapted$11')
f(13,11303,1022,1,'kyo/bench/DeepBindMapBench.$anonfun$11')
f(14,11303,1022,1,'kyo/bench/DeepBindMapBench.loop$1')
f(15,11303,1022,2,'kyo.bench.DeepBindMapBench$$anon$1')
f(10,12325,192,1,'kyo/bench/DeepBindMapBench$$anon$12.apply')
f(11,12325,192,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$transformLoop$10')
f(12,12325,192,1,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$65.0x0000000800d4bc38.apply')
f(13,12325,192,1,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$$anonfun$adapted$10')
f(14,12325,192,1,'kyo/bench/DeepBindMapBench.$anonfun$10')
f(15,12325,192,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(16,12325,192,1,'java/lang/Integer.valueOf')
f(17,12325,192,2,'java.lang.Integer')
f(9,12517,122,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,12517,122,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,12517,122,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e730.apply')
f(12,12517,122,1,'kyo/bench/Bench.$anonfun$1')
f(13,12517,122,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,12517,122,1,'kyo/bench/DeepBindMapBench.kyoBench')
f(15,12517,122,1,'kyo/bench/DeepBindMapBench.loop$1')
f(16,12517,122,2,'kyo.bench.DeepBindMapBench$$anon$1')
f(1,12639,5,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,12639,5,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,12639,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,12639,5,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,12639,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,12639,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,12639,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,12639,1,2,'org.openjdk.jmh.runner.InfraControl')
f(8,12640,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,12640,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,12640,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,12640,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,12640,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,12640,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,12643,1,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,12643,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,12643,1,1,'java/lang/ClassLoader.loadClass')
f(10,12643,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,12643,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,12643,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,12643,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,12643,1,1,'jdk/internal/loader/URLClassPath.getResource')
f(15,12643,1,1,'jdk/internal/loader/URLClassPath$JarLoader.getResource')
f(16,12643,1,1,'java/util/jar/JarFile.getJarEntry')
f(17,12643,1,1,'java/util/jar/JarFile.getEntry')
f(18,12643,1,1,'java/util/zip/ZipFile.getEntry')
f(19,12643,1,1,'java/util/zip/ZipFile$Source.getEntryPos')
f(20,12643,1,1,'java/util/zip/ZipCoder$UTF8ZipCoder.toString')
f(21,12643,1,1,'java/lang/System$2.newStringUTF8NoRepl')
f(22,12643,1,1,'java/lang/String.newStringUTF8NoRepl')
f(23,12643,1,1,'java/util/Arrays.copyOfRange')
f(24,12643,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: 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,294,3,'all')
f(1,0,4,3,'[unknown_Java]')
f(2,0,3,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(2,3,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(1,4,290,1,'java/lang/Thread.run')
f(2,4,290,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,4,290,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,4,2,1,'java/util/concurrent/FutureTask.run')
f(5,4,2,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,4,2,1,'java/util/concurrent/FutureTask.run')
f(7,4,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,4,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,4,2,1,'java/lang/reflect/Method.invoke')
f(10,4,2,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,4,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,4,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,4,2,1,'kyo/bench/jmh_generated/DeepBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,4,2,1,'kyo/bench/jmh_generated/DeepBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,4,2,1,'kyo/bench/Bench.forkKyo')
f(16,4,2,1,'kyo/bench/Bench.runLoop$2')
f(17,4,1,1,'kyo/bench/Bench$$anon$1.apply')
f(18,4,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,4,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,4,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply')
f(21,4,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,4,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,4,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,4,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,4,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,4,1,1,'jdk/internal/misc/Unsafe.unpark')
f(27,4,1,3,'pthread_cond_signal')
f(28,4,1,5,'entry_SYSCALL_64_after_hwframe')
f(29,4,1,5,'do_syscall_64')
f(30,4,1,5,'__x64_sys_futex')
f(31,4,1,5,'do_futex')
f(32,4,1,5,'futex_wake')
f(33,4,1,5,'wake_up_q')
f(34,4,1,5,'_raw_spin_unlock_irqrestore')
f(17,5,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,5,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,5,1,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,5,1,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,5,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,5,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,5,1,1,'java/util/concurrent/locks/LockSupport.park')
f(24,5,1,1,'jdk/internal/misc/Unsafe.park')
f(25,5,1,3,'[unknown]')
f(26,5,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,5,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,5,1,5,'do_syscall_64')
f(29,5,1,5,'__x64_sys_futex')
f(30,5,1,5,'do_futex')
f(31,5,1,5,'futex_wait')
f(32,5,1,5,'futex_wait_queue_me')
f(33,5,1,5,'schedule')
f(34,5,1,5,'__schedule')
f(35,5,1,5,'finish_task_switch.isra.0')
f(4,6,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,6,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,6,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,6,1,1,'java/lang/Thread.sleep')
f(8,6,1,3,'JVM_Sleep')
f(9,6,1,4,'JavaThread::sleep(long)')
f(4,7,287,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,7,287,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,7,287,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,7,287,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,7,287,1,'kyo/concurrent/scheduler/IOTask.eval',30,0,0)
f(9,27,174,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(10,28,173,2,'kyo/bench/DeepBindMapBench$$anon$1.apply',173,0,0)
f(11,37,7,2,'kyo/bench/DeepBindMapBench$$anon$1$$anon$2.<init>',7,0,0)
f(12,37,7,2,'kyo/ios$KyoIO.<init>',7,0,0)
f(13,43,1,2,'kyo/core$internal$Kyo.<init>',1,0,0)
f(14,43,1,2,'java/lang/Object.<init>',1,0,0)
f(11,44,87,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1',87,0,0)
f(12,51,80,2,'kyo/bench/DeepBindMapBench$$anon$3.<init>',80,0,0)
f(13,76,55,2,'kyo/core$internal$KyoCont.<init>',55,0,0)
f(14,88,39,2,'kyo/core$internal$Kyo.<init>',39,0,0)
f(15,115,12,2,'java/lang/Object.<init>',12,0,0)
f(14,127,4,2,'kyo/ios$KyoIO.effect',4,0,0)
f(15,127,4,2,'kyo/ios$KyoIO.effect',4,0,0)
f(11,131,70,2,'scala/runtime/BoxesRunTime.boxToInteger',70,0,0)
f(9,201,76,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(10,202,75,2,'kyo/bench/DeepBindMapBench$$anon$12.apply',75,0,0)
f(11,202,75,2,'kyo/bench/DeepBindMapBench$$anon$11.apply',75,0,0)
f(12,202,75,2,'kyo/bench/DeepBindMapBench$$anon$10.apply',75,0,0)
f(13,202,75,2,'kyo/bench/DeepBindMapBench$$anon$9.apply',75,0,0)
f(14,202,75,2,'kyo/bench/DeepBindMapBench$$anon$8.apply',75,0,0)
f(15,212,65,2,'kyo/bench/DeepBindMapBench$$anon$7.apply',65,0,0)
f(16,214,63,2,'kyo/bench/DeepBindMapBench$$anon$6.apply',63,0,0)
f(17,221,56,2,'kyo/bench/DeepBindMapBench$$anon$5.apply',56,0,0)
f(18,259,18,2,'kyo/bench/DeepBindMapBench$$anon$4.apply',18,0,0)
f(19,272,5,2,'kyo/bench/DeepBindMapBench$$anon$3.apply',5,0,0)
f(20,274,3,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1',3,0,0)
f(21,274,3,2,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$56.0x0000000800d49a30.apply',3,0,0)
f(22,274,3,2,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$_$$anonfun$adapted$1',3,0,0)
f(9,277,1,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',1,0,0)
f(9,278,1,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,278,1,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,278,1,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,278,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,278,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,278,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,278,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,278,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,278,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,278,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,278,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,278,1,1,'jdk/internal/misc/Unsafe.unpark')
f(21,278,1,3,'pthread_cond_signal')
f(22,278,1,5,'entry_SYSCALL_64_after_hwframe')
f(23,278,1,5,'do_syscall_64')
f(24,278,1,5,'__x64_sys_futex')
f(25,278,1,5,'do_futex')
f(26,278,1,5,'futex_wake')
f(27,278,1,5,'wake_up_q')
f(28,278,1,5,'_raw_spin_unlock_irqrestore')
f(9,279,3,2,'kyo/concurrent/scheduler/IOTask.st',3,0,0)
f(9,282,3,6,'kyo/core$internal$KyoCont.effect',0,3,0)
f(9,285,3,1,'kyo/ios$KyoIO.effect')
f(9,288,6,3,'vtable stub')
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: 384px}
</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(24);
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,14522,3,'all')
f(1,0,14518,1,'java/lang/Thread.run')
f(2,0,14518,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,14518,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,14518,1,'java/util/concurrent/FutureTask.run')
f(5,0,14518,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,14518,1,'java/util/concurrent/FutureTask.run')
f(7,0,14518,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,14518,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,14518,1,'java/lang/reflect/Method.invoke')
f(10,0,14518,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,14518,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,14518,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,14518,1,'kyo/bench/jmh_generated/DeepBindMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,14518,1,'kyo/bench/jmh_generated/DeepBindMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,14518,1,'kyo/bench/Bench.syncKyo')
f(16,0,14518,1,'kyo/bench/Bench.runLoop$1')
f(17,0,13894,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(18,0,13894,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(19,0,543,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,0,543,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,0,543,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,0,543,2,'kyo.bench.DeepBindMapBench$$anon$1$$Lambda$49+0x0000000800d07778')
f(19,543,606,2,'kyo.bench.DeepBindMapBench$$anon$1$$anon$2')
f(19,1149,913,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(20,1149,913,2,'kyo.bench.DeepBindMapBench$$anon$3')
f(19,2062,1486,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$transformLoop$2')
f(20,2062,1486,2,'kyo.bench.DeepBindMapBench$$anon$4')
f(19,3548,1230,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$transformLoop$3')
f(20,3548,1230,2,'kyo.bench.DeepBindMapBench$$anon$5')
f(19,4778,879,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$transformLoop$4')
f(20,4778,879,2,'kyo.bench.DeepBindMapBench$$anon$6')
f(19,5657,1227,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$transformLoop$5')
f(20,5657,1227,2,'kyo.bench.DeepBindMapBench$$anon$7')
f(19,6884,937,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$transformLoop$6')
f(20,6884,937,2,'kyo.bench.DeepBindMapBench$$anon$8')
f(19,7821,1223,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$transformLoop$7')
f(20,7821,1223,2,'kyo.bench.DeepBindMapBench$$anon$9')
f(19,9044,1437,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$transformLoop$8')
f(20,9044,1437,2,'kyo.bench.DeepBindMapBench$$anon$10')
f(19,10481,933,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$transformLoop$9')
f(20,10481,933,2,'kyo.bench.DeepBindMapBench$$anon$11')
f(19,11414,1258,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$transformLoop$10')
f(20,11414,1258,2,'kyo.bench.DeepBindMapBench$$anon$12')
f(19,12672,1222,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(20,12672,1222,2,'kyo.bench.DeepBindMapBench$$anon$13')
f(17,13894,624,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(18,13894,624,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(19,13894,624,1,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$49.0x0000000800d07778.apply')
f(20,13894,624,1,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$$anonfun$adapted$11')
f(21,13894,624,1,'kyo/bench/DeepBindMapBench.$anonfun$11')
f(22,13894,624,1,'kyo/bench/DeepBindMapBench.loop$1')
f(23,13894,624,2,'kyo.bench.DeepBindMapBench$$anon$1')
f(1,14518,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,14518,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,14518,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,14518,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,14518,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,14518,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,14518,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,14518,1,2,'org.openjdk.jmh.runner.InfraControl')
f(8,14519,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,14519,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,14519,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,14519,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,14519,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,14519,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,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,2,293,2,'kyo/bench/Bench.runLoop$1',164,0,0)
f(17,15,154,2,'kyo/bench/DeepBindMapBench$$anon$1.apply',151,0,0)
f(18,28,141,2,'kyo/bench/DeepBindMapBench$$anon$1.apply',138,0,0)
f(19,93,6,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',6,0,0)
f(20,97,2,2,'java/lang/invoke/LambdaForm$MH.0x0000000800c02400.invoke',2,0,0)
f(19,99,70,2,'scala/runtime/BoxesRunTime.boxToInteger',67,0,0)
f(20,166,2,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(21,166,2,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(22,166,2,4,'MemAllocator::allocate() const')
f(23,166,2,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(24,166,2,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(25,166,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(25,167,1,3,'pthread_mutex_unlock')
f(20,168,1,3,'[unknown]')
f(21,168,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(22,168,1,5,'entry_SYSCALL_64_after_hwframe')
f(23,168,1,5,'do_syscall_64')
f(24,168,1,5,'__x64_sys_futex')
f(25,168,1,5,'do_futex')
f(26,168,1,5,'futex_wait')
f(27,168,1,5,'futex_wait_queue_me')
f(28,168,1,5,'schedule')
f(29,168,1,5,'__schedule')
f(30,168,1,5,'finish_task_switch.isra.0')
f(17,169,126,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(18,171,124,2,'kyo/bench/DeepBindMapBench$$anon$12.apply',124,0,0)
f(19,174,121,2,'kyo/bench/DeepBindMapBench$$anon$11.apply',121,0,0)
f(20,174,121,2,'kyo/bench/DeepBindMapBench$$anon$10.apply',121,0,0)
f(21,174,121,2,'kyo/bench/DeepBindMapBench$$anon$9.apply',121,0,0)
f(22,181,114,2,'kyo/bench/DeepBindMapBench$$anon$8.apply',114,0,0)
f(23,184,111,2,'kyo/bench/DeepBindMapBench$$anon$7.apply',111,0,0)
f(24,205,90,2,'kyo/bench/DeepBindMapBench$$anon$6.apply',90,0,0)
f(25,272,23,2,'kyo/bench/DeepBindMapBench$$anon$5.apply',23,0,0)
f(26,284,11,2,'kyo/bench/DeepBindMapBench$$anon$4.apply',11,0,0)
f(27,287,8,2,'kyo/bench/DeepBindMapBench$$anon$3.apply',8,0,0)
f(28,293,2,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1',2,0,0)
f(29,293,2,2,'scala/runtime/BoxesRunTime.unboxToInt',2,0,0)
f(16,295,3,2,'kyo/bench/DeepBindMapBench.kyoBench',3,0,0)
f(17,295,3,2,'kyo/bench/DeepBindMapBench.loop$1',3,0,0)
f(18,295,3,2,'kyo/bench/DeepBindMapBench$$anon$1.<init>',3,0,0)
f(19,295,3,2,'kyo/ios$KyoIO.<init>',3,0,0)
f(20,297,1,2,'kyo/core$internal$Kyo.<init>',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: 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,12883,3,'all')
f(1,0,12880,1,'java/lang/Thread.run')
f(2,0,12880,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,12880,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,939,1,'java/util/concurrent/FutureTask.run')
f(5,0,939,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,939,1,'java/util/concurrent/FutureTask.run')
f(7,0,939,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,939,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,939,1,'java/lang/reflect/Method.invoke')
f(10,0,939,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,939,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,939,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,939,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,939,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,939,1,'kyo/bench/Bench.forkKyo')
f(16,0,40,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,40,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,40,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,40,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c81148')
f(16,40,899,1,'kyo/bench/Bench.runLoop$2')
f(17,40,460,1,'kyo/bench/Bench$$anon$1.apply')
f(18,40,1,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,40,1,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c88000.apply')
f(20,40,1,1,'kyo/bench/Bench.$anonfun$2')
f(21,40,1,1,'kyo/concurrent/fibers$Fiber.block')
f(22,40,1,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,41,459,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,41,459,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,41,459,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(21,41,459,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,41,2,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,43,457,2,'kyo.concurrent.scheduler.IOTask')
f(17,500,439,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,500,439,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,500,439,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,500,439,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,500,439,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,500,439,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,500,439,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,500,439,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(4,939,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ea20.run')
f(5,939,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,939,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,939,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,939,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,939,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,939,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,939,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,950,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec48.run')
f(5,950,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,950,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,950,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,950,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,950,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,950,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$65+0x0000000800d551f8')
f(4,961,11919,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d230f8.run')
f(5,961,11919,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,961,11919,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,961,11919,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,961,11919,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,961,6429,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,961,6429,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(11,961,6429,1,'kyo/bench/EnqueueDequeueBench$$Lambda$62.0x0000000800d548a8.apply')
f(12,961,6429,1,'kyo/bench/EnqueueDequeueBench.$anonfun$2')
f(13,961,6429,1,'kyo/bench/EnqueueDequeueBench.loop$2')
f(14,961,1174,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(15,961,1174,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(16,961,1174,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,961,1174,2,'kyo.bench.EnqueueDequeueBench$$Lambda$60+0x0000000800d4fc00')
f(14,2135,1787,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(15,2135,1787,2,'kyo.bench.EnqueueDequeueBench$$anon$2')
f(14,3922,3468,1,'kyo/concurrent/channels$Channels$$anon$14.put')
f(15,3922,3468,1,'kyo/concurrent/channels$Channels$Blocking.put$')
f(16,3922,3468,1,'kyo/concurrent/channels$Channels$Blocking.put')
f(17,3922,933,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,3922,933,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,3922,933,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,3922,933,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$59+0x0000000800d4f830')
f(17,4855,924,1,'kyo/concurrent/channels$Channels$$anon$14.putFiber')
f(18,4855,924,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$_$transformLoop$10')
f(19,4855,924,1,'kyo/concurrent/channels$Channels$$anon$14$$Lambda$58.0x0000000800d4f460.apply')
f(20,4855,924,1,'kyo/concurrent/channels$Channels$$anon$14.$anonfun$11')
f(21,4855,924,2,'kyo.concurrent.channels$$anon$19')
f(17,5779,1611,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1')
f(18,5779,1611,2,'kyo.concurrent.channels$Channels$Blocking$$anon$1')
f(9,7390,5311,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,7390,5311,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(11,7390,5311,1,'kyo/bench/EnqueueDequeueBench$$Lambda$60.0x0000000800d4fc00.apply')
f(12,7390,5311,1,'kyo/bench/EnqueueDequeueBench.$anonfun$1')
f(13,7390,1367,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(14,7390,1367,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(15,7390,1367,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,7390,1367,2,'kyo.bench.EnqueueDequeueBench$$Lambda$62+0x0000000800d548a8')
f(13,8757,1844,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(14,8757,1844,2,'kyo.bench.EnqueueDequeueBench$$anon$1')
f(13,10601,2100,1,'kyo/concurrent/channels$Channels$$anon$14.take')
f(14,10601,2100,1,'kyo/concurrent/channels$Channels$Blocking.take$')
f(15,10601,2100,1,'kyo/concurrent/channels$Channels$Blocking.take')
f(16,10601,647,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,10601,647,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,10601,647,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,10601,647,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$61+0x0000000800d544d8')
f(16,11248,1453,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2')
f(17,11248,1453,2,'kyo.concurrent.channels$Channels$Blocking$$anon$2')
f(9,12701,55,1,'kyo/bench/EnqueueDequeueBench$$anon$3.apply')
f(10,12701,55,1,'kyo/concurrent/channels$Channels$$anon$21.apply')
f(11,12701,55,1,'kyo/concurrent/channels$Channels$.kyo$concurrent$channels$Channels$$$_$transformLoop$11')
f(12,12701,55,1,'kyo/concurrent/channels$Channels$$$Lambda$56.0x0000000800d4bf98.apply')
f(13,12701,55,1,'kyo/concurrent/channels$Channels$.$anonfun$9')
f(14,12701,55,1,'kyo/concurrent/channels$Channels$$anon$14.<init>')
f(15,12701,4,2,'org.jctools.queues.MpmcUnboundedXaddArrayQueue')
f(15,12705,51,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(16,12705,51,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(17,12705,51,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.<init>')
f(18,12705,7,2,'org.jctools.queues.SpscArrayQueue')
f(18,12712,44,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(19,12712,44,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(20,12712,1,2,'org.jctools.queues.MpmcUnboundedXaddChunk')
f(20,12713,43,1,'org/jctools/queues/MpmcUnboundedXaddChunk.<init>')
f(21,12713,1,1,'org/jctools/queues/MpUnboundedXaddChunk.<init>')
f(22,12713,1,1,'org/jctools/util/UnsafeRefArrayAccess.allocateRefArray')
f(23,12713,1,2,'java.lang.Object[]')
f(21,12714,42,1,'org/jctools/util/UnsafeLongArrayAccess.allocateLongArray')
f(22,12714,42,2,'long[]')
f(9,12756,124,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,12756,124,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,12756,124,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c81148.apply')
f(12,12756,124,1,'kyo/bench/Bench.$anonfun$1')
f(13,12756,124,1,'kyo/bench/EnqueueDequeueBench.kyoBenchFiber')
f(14,12756,124,1,'kyo/concurrent/channels$Channels$.blocking')
f(15,12756,1,1,'kyo/concurrent/channels$Channels$.kyo$concurrent$channels$Channels$$$_$transformLoop$11')
f(16,12756,1,2,'kyo.concurrent.channels$Channels$$anon$21')
f(15,12757,123,1,'kyo/concurrent/queues$Queues$.bounded')
f(16,12757,123,2,'kyo.concurrent.queues$Queues$$anon$11')
f(1,12880,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,12880,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,12880,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,12880,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,12880,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,12880,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,12880,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,12880,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,12880,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,12880,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,12880,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,12880,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,12880,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,'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::post_evacuate_collection_set(G1EvacuationInfo&, G1RedirtyCardsQueueSet*, G1ParScanThreadStateSet*)')
f(12,0,1,4,'G1CollectedHeap::post_evacuate_cleanup_2(PreservedMarksSet*, G1RedirtyCardsQueueSet*, G1EvacuationInfo*, unsigned long const*)')
f(13,0,1,4,'WorkGang::run_task(AbstractGangTask*, unsigned int, bool)')
f(14,0,1,3,'sem_post')
f(15,0,1,5,'entry_SYSCALL_64_after_hwframe')
f(16,0,1,5,'do_syscall_64')
f(17,0,1,5,'__x64_sys_futex')
f(18,0,1,5,'do_futex')
f(19,0,1,5,'futex_wake')
f(20,0,1,5,'wake_up_q')
f(21,0,1,5,'_raw_spin_unlock_irqrestore')
f(1,1,4,3,'[unknown_Java]')
f(2,1,1,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(2,2,1,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(2,3,2,6,'kyo/core$internal$KyoCont.effect',0,2,0)
f(1,5,288,1,'java/lang/Thread.run')
f(2,5,288,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,5,288,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,5,3,1,'java/util/concurrent/FutureTask.run')
f(5,5,3,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,5,3,1,'java/util/concurrent/FutureTask.run')
f(7,5,3,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,5,3,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,5,3,1,'java/lang/reflect/Method.invoke')
f(10,5,3,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,5,3,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,5,3,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,5,3,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,5,3,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,5,3,1,'kyo/bench/Bench.forkKyo')
f(16,5,3,1,'kyo/bench/Bench.runLoop$2')
f(17,5,2,1,'kyo/bench/Bench$$anon$1.apply')
f(18,5,2,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,5,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,5,2,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(21,5,2,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,5,2,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,5,2,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,5,2,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,5,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,5,2,1,'jdk/internal/misc/Unsafe.unpark')
f(27,5,2,3,'pthread_cond_signal')
f(28,6,1,5,'entry_SYSCALL_64_after_hwframe')
f(29,6,1,5,'do_syscall_64')
f(30,6,1,5,'__x64_sys_futex')
f(31,6,1,5,'do_futex')
f(32,6,1,5,'futex_wake')
f(33,6,1,5,'wake_up_q')
f(34,6,1,5,'_raw_spin_unlock_irqrestore')
f(17,7,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,7,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,7,1,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,7,1,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,7,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,7,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,7,1,1,'java/util/concurrent/locks/LockSupport.park')
f(24,7,1,1,'jdk/internal/misc/Unsafe.park')
f(25,7,1,3,'[unknown]')
f(26,7,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(4,8,285,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d230f8.run')
f(5,8,285,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,8,285,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,8,285,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,8,285,1,'kyo/concurrent/scheduler/IOTask.eval',61,0,0)
f(9,58,103,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,64,97,2,'kyo/concurrent/channels$Channels$Blocking$$anon$2.apply',89,0,0)
f(11,69,85,2,'kyo/concurrent/channels$$anon$16.apply',77,0,0)
f(12,82,72,2,'kyo/concurrent/channels$$anon$16.apply',64,0,0)
f(13,100,8,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(14,107,1,2,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.isEmpty',1,0,0)
f(15,107,1,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.isEmpty',1,0,0)
f(16,107,1,2,'org/jctools/queues/IndexedQueueSizeUtil.isEmpty',1,0,0)
f(13,108,18,2,'kyo/concurrent/fibers$Fibers.value',18,0,0)
f(14,108,18,2,'kyo/concurrent/fibers$Fiber$.done',18,0,0)
f(15,108,18,2,'kyo/concurrent/fibers$Fiber.<init>',18,0,0)
f(13,126,26,2,'kyo/concurrent/queues$$anon$12.poll',26,0,0)
f(14,132,19,2,'java/util/concurrent/atomic/AtomicReference.getAndSet',19,0,0)
f(15,132,19,2,'java/lang/invoke/VarHandleGuards.guard_LL_L',19,0,0)
f(16,133,1,2,'java/lang/invoke/VarForm.getMemberName',1,0,0)
f(16,134,2,2,'java/lang/invoke/VarHandle.checkExactAccessMode',2,0,0)
f(16,136,4,2,'java/lang/invoke/VarHandle.isDirect',4,0,0)
f(16,140,11,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.getAndSet',11,0,0)
f(14,151,1,2,'scala/Option$.apply',1,0,0)
f(15,151,1,2,'scala/Some.<init>',1,0,0)
f(16,151,1,2,'scala/Option.<init>',1,0,0)
f(17,151,1,2,'java/lang/Object.<init>',1,0,0)
f(13,152,2,2,'scala/Some.value',2,0,0)
f(11,154,7,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2',7,0,0)
f(9,161,92,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,172,15,2,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2',15,0,0)
f(11,179,5,2,'kyo/bench/EnqueueDequeueBench$$Lambda$60.0x0000000800d4fc00.apply',5,0,0)
f(12,180,4,2,'kyo/bench/EnqueueDequeueBench.$anonfun$1',4,0,0)
f(13,182,2,2,'kyo/concurrent/channels$Channels$$anon$14.take',2,0,0)
f(14,182,2,2,'kyo/concurrent/channels$Channels$Blocking.take$',2,0,0)
f(11,184,3,2,'kyo/bench/EnqueueDequeueBench$$anon$2.<init>',3,0,0)
f(12,185,2,2,'kyo/core$internal$KyoCont.<init>',2,0,0)
f(10,187,66,2,'kyo/concurrent/channels$Channels$Blocking$$anon$1.apply',59,0,0)
f(11,193,42,2,'kyo/concurrent/channels$$anon$19.apply',35,0,0)
f(12,193,42,2,'kyo/concurrent/channels$$anon$19.apply',35,0,0)
f(13,196,7,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(14,200,1,2,'kyo/concurrent/queues$$anon$12.isFull',1,0,0)
f(15,200,1,2,'java/util/concurrent/atomic/AtomicReference.get',1,0,0)
f(14,201,2,2,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.isEmpty',2,0,0)
f(15,201,2,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.isEmpty',2,0,0)
f(16,201,2,2,'org/jctools/queues/IndexedQueueSizeUtil.isEmpty',2,0,0)
f(13,203,2,2,'kyo/concurrent/channels$Channels$$anon$14.q',2,0,0)
f(13,205,2,2,'kyo/concurrent/fibers$Fibers.value',2,0,0)
f(14,206,1,2,'kyo/concurrent/fibers$Fiber$.done',1,0,0)
f(15,206,1,2,'kyo/concurrent/fibers$Fiber.<init>',1,0,0)
f(16,206,1,2,'java/lang/Object.<init>',1,0,0)
f(13,207,28,2,'kyo/concurrent/queues$$anon$12.offer',28,0,0)
f(14,207,28,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',28,0,0)
f(15,208,27,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',27,0,0)
f(16,225,4,2,'java/lang/invoke/VarForm.getMemberName',4,0,0)
f(17,228,1,2,'java/lang/invoke/VarForm.getMemberNameOrNull',1,0,0)
f(16,229,1,2,'java/lang/invoke/VarHandle.checkExactAccessMode',1,0,0)
f(16,230,5,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',5,0,0)
f(11,235,18,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1',18,0,0)
f(12,235,18,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$59.0x0000000800d4f830.apply',18,0,0)
f(13,249,4,2,'kyo/concurrent/channels$Channels$Blocking.$anonfun$1',4,0,0)
f(9,253,1,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',1,0,0)
f(9,254,2,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,254,2,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,254,2,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,254,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,254,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,254,2,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,254,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,254,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,254,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,254,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,254,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,254,2,1,'jdk/internal/misc/Unsafe.unpark')
f(21,254,2,3,'pthread_cond_signal')
f(22,254,2,5,'entry_SYSCALL_64_after_hwframe')
f(23,254,2,5,'do_syscall_64')
f(24,254,2,5,'__x64_sys_futex')
f(25,254,2,5,'do_futex')
f(26,254,2,5,'futex_wake')
f(27,254,2,5,'wake_up_q')
f(28,254,2,5,'_raw_spin_unlock_irqrestore')
f(9,256,5,2,'kyo/concurrent/scheduler/IOTask.st',5,0,0)
f(9,261,27,6,'kyo/core$internal$KyoCont.effect',0,27,0)
f(9,288,5,3,'vtable stub')
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,9488,3,'all')
f(1,0,9485,1,'java/lang/Thread.run')
f(2,0,9485,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,9485,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,953,1,'java/util/concurrent/FutureTask.run')
f(5,0,953,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,953,1,'java/util/concurrent/FutureTask.run')
f(7,0,953,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,953,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,953,1,'java/lang/reflect/Method.invoke')
f(10,0,953,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,953,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,953,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,953,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,952,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,952,1,'kyo/bench/Bench.syncKyo')
f(16,0,478,1,'kyo/bench/Bench.runLoop$1')
f(17,0,239,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,239,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,239,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,239,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,162,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,162,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,102,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,102,60,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,102,60,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,162,58,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,220,19,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,220,19,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,220,19,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,239,239,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,239,219,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,239,219,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,239,219,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,239,163,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,239,163,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,239,163,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(24,239,163,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,239,163,2,'kyo.concurrent.scheduler.IOTask')
f(21,402,56,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,402,56,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c88000.apply')
f(23,402,56,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,402,56,1,'kyo/concurrent/fibers$Fiber.join')
f(25,402,56,1,'kyo/concurrent/fibers$Fibers.get')
f(26,402,56,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,402,56,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,458,20,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,458,20,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c885f8.apply')
f(20,458,20,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,458,20,1,'kyo/concurrent/fibers$Fiber.block')
f(22,458,20,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,478,474,1,'kyo/bench/EnqueueDequeueBench.kyoBench')
f(17,478,51,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,478,51,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,478,51,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,478,51,2,'kyo.bench.EnqueueDequeueBench$$Lambda$37+0x0000000800c81148')
f(17,529,201,1,'kyo/concurrent/fibers$Fibers.block')
f(18,529,57,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,529,57,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,586,74,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,586,74,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,660,70,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,660,70,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,730,222,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,730,84,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,730,84,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,730,84,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,730,84,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c88000')
f(18,814,76,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,814,51,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,814,51,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,814,51,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,814,51,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c828a0')
f(19,865,25,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,865,25,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(18,890,62,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,890,62,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(14,952,1,2,'org.openjdk.jmh.results.BenchmarkTaskResult')
f(4,953,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec30.run')
f(5,953,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,953,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,953,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,953,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,953,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,953,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,953,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,964,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1ee58.run')
f(5,964,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,964,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,964,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,964,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,964,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,964,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$66+0x0000000800d55790')
f(4,975,8510,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23480.run')
f(5,975,8510,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,975,8510,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,975,8510,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,975,8510,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,975,4671,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,975,3985,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(11,975,3985,1,'kyo/bench/EnqueueDequeueBench$$Lambda$63.0x0000000800d54e40.apply')
f(12,975,3985,1,'kyo/bench/EnqueueDequeueBench.$anonfun$2')
f(13,975,3985,1,'kyo/bench/EnqueueDequeueBench.loop$2')
f(14,975,799,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(15,975,799,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(16,975,799,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,975,799,2,'kyo.bench.EnqueueDequeueBench$$Lambda$61+0x0000000800d543d0')
f(14,1774,1069,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(15,1774,1069,2,'kyo.bench.EnqueueDequeueBench$$anon$2')
f(14,2843,2117,1,'kyo/concurrent/channels$Channels$$anon$14.put')
f(15,2843,2117,1,'kyo/concurrent/channels$Channels$Blocking.put$')
f(16,2843,2117,1,'kyo/concurrent/channels$Channels$Blocking.put')
f(17,2843,525,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,2843,525,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,2843,525,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,2843,525,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$60+0x0000000800d54000')
f(17,3368,673,1,'kyo/concurrent/channels$Channels$$anon$14.putFiber')
f(18,3368,673,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$_$transformLoop$10')
f(19,3368,673,1,'kyo/concurrent/channels$Channels$$anon$14$$Lambda$59.0x0000000800d4f950.apply')
f(20,3368,673,1,'kyo/concurrent/channels$Channels$$anon$14.$anonfun$11')
f(21,3368,673,2,'kyo.concurrent.channels$$anon$19')
f(17,4041,919,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1')
f(18,4041,919,2,'kyo.concurrent.channels$Channels$Blocking$$anon$1')
f(10,4960,686,1,'kyo/concurrent/channels$Channels$Blocking$$anon$2.apply')
f(11,4960,686,1,'kyo/concurrent/channels$$anon$16.apply')
f(12,4960,686,1,'kyo/concurrent/channels$$anon$16.apply')
f(13,4960,686,1,'kyo/concurrent/fibers$Fibers.value')
f(14,4960,686,1,'kyo/concurrent/fibers$Fiber$.done')
f(15,4960,686,2,'kyo.concurrent.fibers$Fiber')
f(9,5646,3724,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,5646,3113,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(11,5646,3113,1,'kyo/bench/EnqueueDequeueBench$$Lambda$61.0x0000000800d543d0.apply')
f(12,5646,3113,1,'kyo/bench/EnqueueDequeueBench.$anonfun$1')
f(13,5646,819,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(14,5646,819,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(15,5646,819,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,5646,819,2,'kyo.bench.EnqueueDequeueBench$$Lambda$63+0x0000000800d54e40')
f(13,6465,960,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(14,6465,960,2,'kyo.bench.EnqueueDequeueBench$$anon$1')
f(13,7425,1334,1,'kyo/concurrent/channels$Channels$$anon$14.take')
f(14,7425,1334,1,'kyo/concurrent/channels$Channels$Blocking.take$')
f(15,7425,1334,1,'kyo/concurrent/channels$Channels$Blocking.take')
f(16,7425,444,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,7425,444,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,7425,444,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,7425,444,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$62+0x0000000800d54a70')
f(16,7869,890,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2')
f(17,7869,890,2,'kyo.concurrent.channels$Channels$Blocking$$anon$2')
f(10,8759,611,1,'kyo/concurrent/channels$Channels$Blocking$$anon$1.apply')
f(11,8759,611,1,'kyo/concurrent/channels$$anon$19.apply')
f(12,8759,611,1,'kyo/concurrent/channels$$anon$19.apply')
f(13,8759,611,1,'kyo/concurrent/fibers$Fibers.value')
f(14,8759,611,1,'kyo/concurrent/fibers$Fiber$.done')
f(15,8759,611,2,'kyo.concurrent.fibers$Fiber')
f(9,9370,35,1,'kyo/bench/EnqueueDequeueBench$$anon$3.apply')
f(10,9370,35,1,'kyo/concurrent/channels$Channels$$anon$21.apply')
f(11,9370,35,1,'kyo/concurrent/channels$Channels$.kyo$concurrent$channels$Channels$$$_$transformLoop$11')
f(12,9370,35,1,'kyo/concurrent/channels$Channels$$$Lambda$57.0x0000000800d4c258.apply')
f(13,9370,35,1,'kyo/concurrent/channels$Channels$.$anonfun$9')
f(14,9370,1,2,'kyo.concurrent.channels$Channels$$anon$14')
f(14,9371,34,1,'kyo/concurrent/channels$Channels$$anon$14.<init>')
f(15,9371,3,2,'org.jctools.queues.MpmcUnboundedXaddArrayQueue')
f(15,9374,31,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(16,9374,31,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(17,9374,31,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.<init>')
f(18,9374,7,2,'org.jctools.queues.SpscArrayQueue')
f(18,9381,23,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(19,9381,23,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(20,9381,23,1,'org/jctools/queues/MpmcUnboundedXaddChunk.<init>')
f(21,9381,2,1,'org/jctools/queues/MpUnboundedXaddChunk.<init>')
f(22,9381,2,1,'org/jctools/util/UnsafeRefArrayAccess.allocateRefArray')
f(23,9381,2,2,'java.lang.Object[]')
f(21,9383,21,1,'org/jctools/util/UnsafeLongArrayAccess.allocateLongArray')
f(22,9383,21,2,'long[]')
f(18,9404,1,1,'org/jctools/queues/SpscArrayQueue.<init>')
f(19,9404,1,1,'org/jctools/queues/SpscArrayQueueL3Pad.<init>')
f(20,9404,1,1,'org/jctools/queues/SpscArrayQueueConsumerIndexField.<init>')
f(21,9404,1,1,'org/jctools/queues/SpscArrayQueueL2Pad.<init>')
f(22,9404,1,1,'org/jctools/queues/SpscArrayQueueProducerIndexFields.<init>')
f(23,9404,1,1,'org/jctools/queues/SpscArrayQueueL1Pad.<init>')
f(24,9404,1,1,'org/jctools/queues/SpscArrayQueueColdField.<init>')
f(25,9404,1,1,'org/jctools/queues/ConcurrentCircularArrayQueue.<init>')
f(26,9404,1,1,'org/jctools/util/UnsafeRefArrayAccess.allocateRefArray')
f(27,9404,1,2,'java.lang.Object[]')
f(9,9405,80,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,9405,80,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,9405,80,1,'kyo/bench/EnqueueDequeueBench$$Lambda$37.0x0000000800c81148.apply')
f(12,9405,80,1,'kyo/bench/EnqueueDequeueBench.kyoBench$$anonfun$1')
f(13,9405,80,1,'kyo/bench/EnqueueDequeueBench.kyoBenchFiber')
f(14,9405,80,1,'kyo/concurrent/channels$Channels$.blocking')
f(15,9405,1,1,'kyo/concurrent/channels$Channels$.kyo$concurrent$channels$Channels$$$_$transformLoop$11')
f(16,9405,1,2,'kyo.concurrent.channels$Channels$$anon$21')
f(15,9406,79,1,'kyo/concurrent/queues$Queues$.bounded')
f(16,9406,79,2,'kyo.concurrent.queues$Queues$$anon$11')
f(1,9485,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,9485,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,9485,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,9485,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,9485,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,9485,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,9485,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,9485,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,9485,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,9485,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,9485,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,9485,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,9485,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,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,'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,3,3,'[unknown_Java]')
f(2,1,1,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(2,2,2,6,'kyo/core$internal$KyoCont.effect',0,2,0)
f(1,4,289,1,'java/lang/Thread.run')
f(2,4,289,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,4,289,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,4,3,1,'java/util/concurrent/FutureTask.run')
f(5,4,3,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,4,3,1,'java/util/concurrent/FutureTask.run')
f(7,4,3,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,4,3,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,4,3,1,'java/lang/reflect/Method.invoke')
f(10,4,3,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,4,3,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,4,3,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,4,3,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,4,3,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,4,3,1,'kyo/bench/Bench.syncKyo')
f(16,4,3,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,'[unknown]')
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,'futex_wait')
f(32,4,1,5,'futex_wait_queue_me')
f(33,4,1,5,'schedule')
f(34,4,1,5,'__schedule')
f(35,4,1,5,'finish_task_switch.isra.0')
f(17,5,2,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,5,2,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,5,2,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,5,2,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,5,2,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,5,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,5,2,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(24,5,2,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,5,2,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,5,2,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,5,2,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(28,5,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(29,5,2,1,'jdk/internal/misc/Unsafe.unpark')
f(30,5,1,3,'Unsafe_Unpark')
f(30,6,1,3,'pthread_cond_signal')
f(31,6,1,5,'entry_SYSCALL_64_after_hwframe')
f(32,6,1,5,'do_syscall_64')
f(33,6,1,5,'__x64_sys_futex')
f(34,6,1,5,'do_futex')
f(35,6,1,5,'futex_wake')
f(36,6,1,5,'wake_up_q')
f(37,6,1,5,'_raw_spin_unlock_irqrestore')
f(4,7,286,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23480.run')
f(5,7,286,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,7,286,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,7,284,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,7,284,1,'kyo/concurrent/scheduler/IOTask.eval',58,0,0)
f(9,54,105,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,58,1,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(11,58,1,1,'kyo/bench/EnqueueDequeueBench$$Lambda$63.0x0000000800d54e40.apply')
f(12,58,1,1,'kyo/bench/EnqueueDequeueBench.$anonfun$2')
f(13,58,1,1,'kyo/bench/EnqueueDequeueBench.loop$2')
f(14,58,1,1,'kyo/concurrent/channels$Channels$$anon$14.put')
f(15,58,1,1,'kyo/concurrent/channels$Channels$Blocking.put$')
f(16,58,1,1,'kyo/concurrent/channels$Channels$Blocking.put')
f(17,58,1,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1')
f(18,58,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(19,58,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(20,58,1,4,'MemAllocator::allocate() const')
f(21,58,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(22,58,1,4,'ThreadLocalAllocBuffer::fill(HeapWordImpl**, HeapWordImpl**, unsigned long)')
f(23,58,1,4,'CollectedHeap::tlab_alloc_reserve() const')
f(10,59,100,2,'kyo/concurrent/channels$Channels$Blocking$$anon$2.apply',90,0,0)
f(11,64,89,2,'kyo/concurrent/channels$$anon$16.apply',79,0,0)
f(12,77,76,2,'kyo/concurrent/channels$$anon$16.apply',66,0,0)
f(13,115,10,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(14,123,1,2,'kyo/concurrent/channels$Channels$$anon$14.q',1,0,0)
f(14,124,1,2,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.isEmpty',1,0,0)
f(15,124,1,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.isEmpty',1,0,0)
f(16,124,1,2,'org/jctools/queues/IndexedQueueSizeUtil.isEmpty',1,0,0)
f(13,125,3,2,'kyo/concurrent/fibers$.Fibers',3,0,0)
f(13,128,15,2,'kyo/concurrent/fibers$Fibers.value',15,0,0)
f(14,128,15,2,'kyo/concurrent/fibers$Fiber$.done',15,0,0)
f(15,128,15,2,'kyo/concurrent/fibers$Fiber.<init>',15,0,0)
f(16,128,15,2,'java/lang/Object.<init>',15,0,0)
f(13,143,10,2,'kyo/concurrent/queues$$anon$12.poll',10,0,0)
f(14,145,8,2,'java/util/concurrent/atomic/AtomicReference.getAndSet',8,0,0)
f(15,145,8,2,'java/lang/invoke/VarHandleGuards.guard_LL_L',8,0,0)
f(16,152,1,2,'java/lang/invoke/VarForm.getMemberName',1,0,0)
f(11,153,6,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2',6,0,0)
f(12,156,3,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$62.0x0000000800d54a70.apply',3,0,0)
f(9,159,101,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,169,15,2,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2',15,0,0)
f(11,176,7,2,'kyo/bench/EnqueueDequeueBench$$Lambda$61.0x0000000800d543d0.apply',7,0,0)
f(12,178,5,2,'kyo/bench/EnqueueDequeueBench.$anonfun$1',5,0,0)
f(13,178,5,2,'kyo/concurrent/channels$Channels$$anon$14.take',5,0,0)
f(14,178,5,2,'kyo/concurrent/channels$Channels$Blocking.take$',5,0,0)
f(15,178,5,2,'kyo/concurrent/channels$Channels$Blocking.take',5,0,0)
f(16,178,5,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',5,0,0)
f(17,181,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',2,0,0)
f(11,183,1,2,'kyo/bench/EnqueueDequeueBench$$anon$2.<init>',1,0,0)
f(12,183,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(10,184,76,2,'kyo/concurrent/channels$Channels$Blocking$$anon$1.apply',72,0,0)
f(11,184,46,2,'kyo/concurrent/channels$$anon$19.apply',42,0,0)
f(12,184,46,2,'kyo/concurrent/channels$$anon$19.apply',42,0,0)
f(13,185,4,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(14,188,1,2,'kyo/concurrent/channels$Channels$$anon$14.q',1,0,0)
f(13,189,1,2,'kyo/concurrent/channels$Channels$$anon$14.q',1,0,0)
f(13,190,2,2,'kyo/concurrent/fibers$Fibers.value',2,0,0)
f(13,192,38,2,'kyo/concurrent/queues$$anon$12.offer',38,0,0)
f(14,192,38,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',38,0,0)
f(15,192,38,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',38,0,0)
f(16,223,1,2,'java/lang/invoke/VarHandle.isDirect',1,0,0)
f(16,224,6,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',6,0,0)
f(17,228,2,2,'java/util/Objects.requireNonNull',2,0,0)
f(11,230,30,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1',30,0,0)
f(12,235,25,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$60.0x0000000800d54000.apply',25,0,0)
f(13,245,15,2,'kyo/concurrent/channels$Channels$Blocking.$anonfun$1',15,0,0)
f(14,245,15,2,'kyo/concurrent/fibers$Fiber.join',15,0,0)
f(9,260,1,1,'kyo/bench/EnqueueDequeueBench$$anon$3.apply')
f(10,260,1,2,'kyo/concurrent/channels$Channels$$anon$21.apply',1,0,0)
f(11,260,1,2,'kyo/concurrent/queues$Queues$$anon$11.apply',1,0,0)
f(12,260,1,2,'kyo/concurrent/queues$Queues$$anon$11.apply',1,0,0)
f(13,260,1,2,'kyo/concurrent/queues$Queue.<init>',1,0,0)
f(9,261,2,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,261,2,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,261,2,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,261,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,261,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,261,2,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,261,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,261,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,261,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,261,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,261,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,261,2,1,'jdk/internal/misc/Unsafe.unpark')
f(21,261,2,3,'pthread_cond_signal')
f(22,261,2,5,'entry_SYSCALL_64_after_hwframe')
f(23,261,2,5,'do_syscall_64')
f(24,261,2,5,'__x64_sys_futex')
f(25,261,2,5,'do_futex')
f(26,261,2,5,'futex_wake')
f(27,261,2,5,'wake_up_q')
f(28,261,2,5,'_raw_spin_unlock_irqrestore')
f(9,263,1,2,'kyo/concurrent/scheduler/IOTask.st',1,0,0)
f(9,264,17,6,'kyo/core$internal$KyoCont.effect',0,17,0)
f(9,281,10,3,'vtable stub')
f(7,291,2,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,291,2,1,'kyo/concurrent/scheduler/Worker.park')
f(9,291,2,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,291,2,1,'jdk/internal/misc/Unsafe.park')
f(11,291,2,3,'[unknown]')
f(12,291,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,291,2,5,'entry_SYSCALL_64_after_hwframe')
f(14,291,2,5,'do_syscall_64')
f(15,291,2,5,'__x64_sys_futex')
f(16,291,2,5,'do_futex')
f(17,291,2,5,'futex_wait')
f(18,291,2,5,'futex_wait_queue_me')
f(19,291,2,5,'schedule')
f(20,291,2,5,'__schedule')
f(21,291,2,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: 464px}
</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(29);
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,20586,3,'all')
f(1,0,20583,1,'java/lang/Thread.run')
f(2,0,20583,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,20583,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,255,1,'java/util/concurrent/FutureTask.run')
f(5,0,255,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,255,1,'java/util/concurrent/FutureTask.run')
f(7,0,255,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,255,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,255,1,'java/lang/reflect/Method.invoke')
f(10,0,255,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,255,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,255,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,255,1,'kyo/bench/jmh_generated/ForkManyBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,255,1,'kyo/bench/jmh_generated/ForkManyBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,255,1,'kyo/bench/Bench.forkKyo')
f(16,0,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,11,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3f718')
f(16,11,1,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,11,1,2,'kyo.bench.Bench$$anon$1')
f(16,12,241,1,'kyo/bench/Bench.runLoop$2')
f(17,12,124,1,'kyo/bench/Bench$$anon$1.apply')
f(18,12,1,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,12,1,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c83b00.apply')
f(20,12,1,1,'kyo/bench/Bench.$anonfun$2')
f(21,12,1,1,'kyo/concurrent/fibers$Fiber.block')
f(22,12,1,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,13,123,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,13,123,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,13,123,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(21,13,123,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,13,1,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,14,122,2,'kyo.concurrent.scheduler.IOTask')
f(17,136,117,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,136,117,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,136,117,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,136,117,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,136,115,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,136,115,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,136,115,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,136,115,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,251,1,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,252,1,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,252,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,252,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,253,2,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,253,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,253,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,253,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,253,1,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c85068')
f(17,254,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,254,1,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(4,255,10,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f2b8.run')
f(5,255,10,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,255,10,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,255,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,255,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,255,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,255,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,255,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,265,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f4e0.run')
f(5,265,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,265,1,1,'kyo/concurrent/scheduler/Scheduler$.addWorker')
f(7,265,1,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers')
f(8,265,1,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(9,265,1,1,'java/util/concurrent/ThreadPoolExecutor.addWorker')
f(10,265,1,1,'java/util/concurrent/ThreadPoolExecutor$Worker.<init>')
f(11,265,1,1,'kyo/concurrent/scheduler/Threads$$anon$1.newThread')
f(12,265,1,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$51.0x0000000800d23ff0.apply')
f(13,265,1,1,'kyo/concurrent/scheduler/Scheduler$.$init$$$anonfun$1')
f(14,265,1,1,'kyo/concurrent/scheduler/Worker.<init>')
f(15,265,1,1,'java/lang/Thread.<init>')
f(16,265,1,1,'java/lang/Thread.<init>')
f(17,265,1,1,'java/lang/Thread.<init>')
f(18,265,1,1,'java/security/AccessController.getContext')
f(19,265,1,1,'java/security/AccessControlContext.optimize')
f(20,265,1,1,'java/security/AccessControlContext.combine')
f(21,265,1,2,'java.security.ProtectionDomain[]')
f(6,266,10,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,266,10,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,266,10,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,266,10,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,266,10,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$71+0x0000000800d4fd90')
f(4,276,20307,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fda8.run')
f(5,276,20307,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,276,20307,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,276,11,1,'java/util/concurrent/CopyOnWriteArrayList.add')
f(8,276,11,1,'java/util/Arrays.copyOf')
f(9,276,11,1,'java/util/Arrays.copyOf')
f(10,276,11,2,'java.lang.Object[]')
f(7,287,18194,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,287,18194,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,287,18183,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,287,14691,1,'kyo/bench/ForkManyBench$$anon$1.apply')
f(11,287,6067,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(12,287,6067,1,'kyo/bench/ForkManyBench$$Lambda$61.0x0000000800d4b2f0.apply')
f(13,287,6067,1,'kyo/bench/ForkManyBench.$anonfun$2')
f(14,287,6067,1,'kyo/bench/ForkManyBench.repeat$2')
f(15,287,2648,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4cc00.linkToTargetMethod')
f(16,287,2648,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c400.newInvokeSpecial')
f(17,287,2648,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,287,2648,2,'kyo.bench.ForkManyBench$$Lambda$61+0x0000000800d4b2f0')
f(15,2935,3419,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(16,2935,3419,2,'kyo.bench.ForkManyBench$$anon$1')
f(11,6354,8624,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,6354,8624,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,6354,8624,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(14,6354,8624,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,6354,1206,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,7560,5837,2,'kyo.concurrent.scheduler.IOTask')
f(15,13397,1574,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,13397,1574,2,'kyo.concurrent.fibers$Fiber')
f(15,14971,7,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(16,14971,7,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(17,14971,7,1,'kyo/concurrent/scheduler/Queue.offer')
f(18,14971,7,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(19,14971,7,1,'scala/Function0.apply$mcZ$sp')
f(20,14971,7,1,'kyo/concurrent/scheduler/Queue$$Lambda$54.0x0000000800d474b0.apply')
f(21,14971,7,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1')
f(22,14971,7,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,14971,7,1,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize')
f(24,14971,7,1,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize')
f(25,14971,7,1,'scala/collection/mutable/ArrayBuffer$.scala$collection$mutable$ArrayBuffer$$ensureSize')
f(26,14971,7,5,'java.lang.Object[]')
f(10,14978,3492,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5')
f(11,14978,3491,2,'kyo.bench.ForkManyBench$$anon$6')
f(11,18469,1,1,'kyo/bench/ForkManyBench$$Lambda$62.0x0000000800d4b6c0.apply')
f(12,18469,1,1,'kyo/bench/ForkManyBench.$anonfun$8')
f(13,18469,1,1,'kyo/concurrent/fibers$Fiber.join')
f(14,18469,1,1,'kyo/concurrent/fibers$Fibers.get')
f(15,18469,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(16,18469,1,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(9,18470,4,1,'kyo/bench/ForkManyBench$$anon$7.apply')
f(10,18470,2,1,'kyo/bench/ForkManyBench$$anon$4.apply')
f(11,18470,2,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$3')
f(12,18470,2,1,'kyo/bench/ForkManyBench$$Lambda$57.0x0000000800d4a2b0.apply')
f(13,18470,2,1,'kyo/bench/ForkManyBench.$anonfun$adapted$3')
f(14,18470,2,1,'kyo/bench/ForkManyBench.$anonfun$4')
f(15,18470,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$2')
f(16,18470,1,2,'kyo.bench.ForkManyBench$$anon$3')
f(15,18471,1,1,'scala/Tuple2$.apply')
f(16,18471,1,2,'scala.Tuple2')
f(10,18472,2,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$6')
f(11,18472,2,1,'kyo/bench/ForkManyBench$$Lambda$58.0x0000000800d4a680.apply')
f(12,18472,2,1,'kyo/bench/ForkManyBench.$anonfun$6')
f(13,18472,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(14,18472,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(15,18472,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,18472,1,2,'kyo.bench.ForkManyBench$$Lambda$62+0x0000000800d4b6c0')
f(13,18473,1,1,'kyo/bench/ForkManyBench.repeat$2')
f(14,18473,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(15,18473,1,2,'kyo.bench.ForkManyBench$$anon$1')
f(9,18474,1,1,'kyo/bench/ForkManyBench$$anon$8.apply')
f(10,18474,1,1,'kyo/concurrent/fibers$Fibers$$anon$31.apply')
f(11,18474,1,1,'kyo/concurrent/fibers$Fibers$$anon$31.apply')
f(12,18474,1,2,'kyo.concurrent.scheduler.IOPromise')
f(9,18475,3,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(10,18475,3,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(11,18475,3,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$Promise$$anon$26$$_$loop$22')
f(12,18475,3,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(13,18475,3,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(14,18475,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(15,18475,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(16,18475,3,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(17,18475,3,1,'scala/runtime/function/JProcedure1.apply')
f(18,18475,3,1,'scala/runtime/function/JProcedure1.apply')
f(19,18475,3,1,'kyo/concurrent/scheduler/IOTask$$Lambda$66.0x0000000800d4ebe0.applyVoid')
f(20,18475,3,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(21,18475,1,2,'kyo.concurrent.scheduler.IOTask')
f(21,18476,1,1,'kyo/concurrent/scheduler/IOPromise.become')
f(22,18476,1,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(23,18476,1,1,'kyo/concurrent/scheduler/IOPromise$Linked$.apply')
f(24,18476,1,2,'kyo.concurrent.scheduler.IOPromise$Linked')
f(21,18477,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(22,18477,1,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(23,18477,1,1,'kyo/concurrent/scheduler/Queue.offer')
f(24,18477,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(25,18477,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(26,18477,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(27,18477,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(28,18477,1,2,'kyo.concurrent.scheduler.Queue$$Lambda$54+0x0000000800d474b0')
f(9,18478,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,18478,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,18478,1,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3f718.apply')
f(12,18478,1,1,'kyo/bench/Bench.$anonfun$1')
f(13,18478,1,1,'kyo/bench/ForkManyBench.kyoBenchFiber')
f(14,18478,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$7')
f(15,18478,1,2,'kyo.bench.ForkManyBench$$anon$8')
f(9,18479,2,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,18479,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,18479,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,18479,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,18479,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(14,18479,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$66+0x0000000800d4ebe0')
f(10,18480,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,18480,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,18481,2102,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,18481,2102,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,18481,2102,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,18481,2102,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,18481,2,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(12,18481,2,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d45000')
f(11,18483,2100,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d45000')
f(1,20583,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,20583,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,20583,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,20583,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,20583,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,20583,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,20583,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,20583,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,20583,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,20583,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,20583,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,20583,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,20583,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: 1008px}
</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(63);
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,328,3,'all')
f(1,0,19,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,19,3,'thread_native_entry(Thread*)')
f(3,0,19,4,'Thread::call_run()')
f(4,0,19,4,'JavaThread::thread_main_inner()')
f(5,0,19,4,'CompileBroker::compiler_thread_loop()')
f(6,0,19,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,19,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,19,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,9,4,'Compile::Code_Gen()')
f(10,0,2,4,'Matcher::match()')
f(11,0,2,4,'Matcher::xform(Node*, int)')
f(12,1,1,4,'Matcher::match_tree(Node const*)')
f(13,1,1,4,'Matcher::Label_Root(Node const*, State*, Node*, Node*&)')
f(10,2,2,4,'PhaseCFG::do_global_code_motion()')
f(11,2,2,4,'PhaseCFG::global_code_motion()')
f(12,2,1,4,'MultiNode::out_RegMask() const')
f(12,3,1,4,'PhaseChaitin::gather_lrg_masks(bool)')
f(10,4,5,4,'PhaseChaitin::Register_Allocate()')
f(11,4,1,4,'CProjNode::is_block_proj() const')
f(11,5,1,4,'PhaseChaitin::post_allocate_copy_removal()')
f(12,5,1,4,'PhaseChaitin::elide_copy(Node*, int, Block*, Node_List&, Node_List&, bool)')
f(11,6,2,4,'PhaseLive::compute(unsigned int)')
f(11,8,1,4,'rFlagsRegOper::type() const')
f(9,9,4,4,'Compile::Optimize()')
f(10,9,1,4,'Compile::final_graph_reshaping() [clone .part.0]')
f(11,9,1,4,'Compile::final_graph_reshaping_walk(Node_Stack&, Node*, Final_Reshape_Counts&)')
f(12,9,1,4,'Compile::final_graph_reshaping_main_switch(Node*, Final_Reshape_Counts&, unsigned int)')
f(13,9,1,4,'Node::replace_by(Node*)')
f(10,10,1,4,'ConnectionGraph::do_analysis(Compile*, PhaseIterGVN*)')
f(11,10,1,4,'ConnectionGraph::compute_escape()')
f(12,10,1,4,'ConnectionGraph::add_node_to_connection_graph(Node*, Unique_Node_List*)')
f(13,10,1,4,'ConnectionGraph::add_field(Node*, PointsToNode::EscapeState, int) [clone .part.0]')
f(14,10,1,4,'GrowableArrayArenaAllocator::allocate(int, int, Arena*)')
f(10,11,2,4,'PhaseIdealLoop::optimize(PhaseIterGVN&, LoopOptsMode)')
f(11,11,2,4,'PhaseIdealLoop::build_and_optimize(LoopOptsMode)')
f(12,11,1,4,'PhaseIdealLoop::Dominators()')
f(13,11,1,4,'NTarjan::DFS(NTarjan*, VectorSet&, PhaseIdealLoop*, unsigned int*)')
f(12,12,1,4,'PhaseIdealLoop::build_loop_late(VectorSet&, Node_List&, Node_Stack&)')
f(13,12,1,4,'PhaseIdealLoop::build_loop_late_post_work(Node*, bool)')
f(14,12,1,4,'PhaseIdealLoop::compute_lca_of_uses(Node*, Node*, bool)')
f(15,12,1,4,'PhaseIdealLoop::dom_lca_for_get_late_ctrl_internal(Node*, Node*, Node*)')
f(9,13,1,4,'Node::has_special_unique_user() const')
f(9,14,5,4,'ParseGenerator::generate(JVMState*)')
f(10,14,5,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(11,14,5,4,'Parse::do_all_blocks()')
f(12,14,5,4,'Parse::do_one_block()')
f(13,14,4,4,'Parse::do_call()')
f(14,14,4,4,'PredictedCallGenerator::generate(JVMState*)')
f(15,14,2,4,'ParseGenerator::generate(JVMState*)')
f(16,14,2,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(17,14,2,4,'Parse::do_all_blocks()')
f(18,14,2,4,'Parse::do_one_block()')
f(19,14,2,4,'Parse::do_call()')
f(20,14,1,4,'Compile::call_generator(ciMethod*, int, bool, JVMState*, bool, float, ciKlass*, bool)')
f(21,14,1,4,'InlineTree::ok_to_inline(ciMethod*, JVMState*, ciCallProfile&, bool&)')
f(22,14,1,4,'ciMethod::get_flow_analysis()')
f(23,14,1,4,'ciTypeFlow::do_flow()')
f(24,14,1,4,'ciTypeFlow::flow_types()')
f(25,14,1,4,'ciTypeFlow::df_flow_types(ciTypeFlow::Block*, bool, ciTypeFlow::StateVector*, ciTypeFlow::JsrSet*)')
f(26,14,1,4,'ciTypeFlow::flow_block(ciTypeFlow::Block*, ciTypeFlow::StateVector*, ciTypeFlow::JsrSet*)')
f(27,14,1,4,'ciTypeFlow::StateVector::apply_one_bytecode(ciBytecodeStream*)')
f(28,14,1,4,'ciTypeFlow::StateVector::do_invoke(ciBytecodeStream*, bool)')
f(29,14,1,4,'ciBytecodeStream::get_method(bool&, ciSignature**)')
f(30,14,1,4,'ciEnv::get_method_by_index_impl(constantPoolHandle const&, int, Bytecodes::Code, ciInstanceKlass*)')
f(31,14,1,4,'ciObjectFactory::get_metadata(Metadata*)')
f(32,14,1,4,'ciObjectFactory::create_new_metadata(Metadata*)')
f(33,14,1,4,'ciMethod::ciMethod(methodHandle const&, ciInstanceKlass*)')
f(34,14,1,4,'ciSignature::ciSignature(ciKlass*, constantPoolHandle const&, ciSymbol*)')
f(35,14,1,4,'ciEnv::get_klass_by_name_impl(ciKlass*, constantPoolHandle const&, ciSymbol*, bool)')
f(36,14,1,4,'SystemDictionary::find_constrained_instance_or_array_klass(Thread*, Symbol*, Handle)')
f(37,14,1,4,'Dictionary::find(unsigned int, Symbol*, Handle)')
f(20,15,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(21,15,1,4,'ParseGenerator::generate(JVMState*)')
f(22,15,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(23,15,1,4,'Parse::do_all_blocks()')
f(24,15,1,4,'Parse::do_one_block()')
f(25,15,1,4,'Parse::do_call()')
f(26,15,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(27,15,1,4,'ParseGenerator::generate(JVMState*)')
f(28,15,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(29,15,1,4,'Parse::do_all_blocks()')
f(30,15,1,4,'Parse::do_one_block()')
f(31,15,1,4,'Parse::do_call()')
f(32,15,1,4,'LibraryIntrinsic::generate(JVMState*)')
f(33,15,1,4,'LibraryCallKit::inline_unsafe_access(bool, BasicType, LibraryCallKit::AccessKind, bool) [clone .part.0]')
f(34,15,1,4,'GraphKit::access_store_at(Node*, Node*, TypePtr const*, Node*, Type const*, BasicType, unsigned long)')
f(35,15,1,4,'BarrierSetC2::store_at(C2Access&, C2AccessValue&) const')
f(36,15,1,4,'ModRefBarrierSetC2::store_at_resolved(C2Access&, C2AccessValue&) const')
f(37,15,1,4,'G1BarrierSetC2::post_barrier(GraphKit*, Node*, Node*, Node*, Node*, unsigned int, Node*, BasicType, bool) const')
f(38,15,1,4,'IdealKit::end_if()')
f(39,15,1,4,'IdealKit::goto_(Node*, bool)')
f(40,15,1,4,'IdealKit::do_memory_merge(Node*, Node*)')
f(41,15,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(15,16,2,4,'PredictedCallGenerator::generate(JVMState*)')
f(16,16,2,4,'ParseGenerator::generate(JVMState*)')
f(17,16,2,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(18,16,2,4,'Parse::do_all_blocks()')
f(19,16,2,4,'Parse::do_one_block()')
f(20,16,2,4,'Parse::do_call()')
f(21,16,2,4,'PredictedCallGenerator::generate(JVMState*)')
f(22,16,2,4,'ParseGenerator::generate(JVMState*)')
f(23,16,2,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(24,16,2,4,'Parse::do_all_blocks()')
f(25,16,2,4,'Parse::do_one_block()')
f(26,16,2,4,'Parse::do_call()')
f(27,16,2,4,'PredictedCallGenerator::generate(JVMState*)')
f(28,16,1,4,'ParseGenerator::generate(JVMState*)')
f(29,16,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(30,16,1,4,'Parse::do_all_blocks()')
f(31,16,1,4,'Parse::do_one_block()')
f(32,16,1,4,'Parse::do_call()')
f(33,16,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(34,16,1,4,'ParseGenerator::generate(JVMState*)')
f(35,16,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(36,16,1,4,'GraphKit::set_map_clone(SafePointNode*)')
f(37,16,1,4,'GraphKit::clone_map()')
f(38,16,1,4,'Node::clone() const')
f(28,17,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(29,17,1,4,'ParseGenerator::generate(JVMState*)')
f(30,17,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(31,17,1,4,'Parse::do_all_blocks()')
f(32,17,1,4,'Parse::do_one_block()')
f(33,17,1,4,'Parse::do_call()')
f(34,17,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(35,17,1,4,'ParseGenerator::generate(JVMState*)')
f(36,17,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(37,17,1,4,'Parse::do_all_blocks()')
f(38,17,1,4,'Parse::do_one_block()')
f(39,17,1,4,'Parse::do_call()')
f(40,17,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(41,17,1,4,'ParseGenerator::generate(JVMState*)')
f(42,17,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(43,17,1,4,'Parse::do_all_blocks()')
f(44,17,1,4,'Parse::do_one_block()')
f(45,17,1,4,'Parse::do_call()')
f(46,17,1,4,'ParseGenerator::generate(JVMState*)')
f(47,17,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(48,17,1,4,'Parse::do_all_blocks()')
f(49,17,1,4,'Parse::do_one_block()')
f(50,17,1,4,'Parse::do_field_access(bool, bool)')
f(51,17,1,4,'Parse::do_put_xxx(Node*, ciField*, bool)')
f(52,17,1,4,'GraphKit::access_store_at(Node*, Node*, TypePtr const*, Node*, Type const*, BasicType, unsigned long)')
f(53,17,1,4,'BarrierSetC2::store_at(C2Access&, C2AccessValue&) const')
f(54,17,1,4,'ModRefBarrierSetC2::store_at_resolved(C2Access&, C2AccessValue&) const')
f(55,17,1,4,'BarrierSetC2::store_at_resolved(C2Access&, C2AccessValue&) const')
f(56,17,1,4,'GraphKit::store_to_memory(Node*, Node*, Node*, BasicType, int, MemNode::MemOrd, bool, bool, bool, bool)')
f(57,17,1,4,'PhaseGVN::transform_no_reclaim(Node*)')
f(58,17,1,4,'StoreNode::Ideal(PhaseGVN*, bool)')
f(59,17,1,4,'InitializeNode::can_capture_store(StoreNode*, PhaseGVN*, bool) [clone .part.0]')
f(60,17,1,4,'InitializeNode::detect_init_independence(Node*, PhaseGVN*)')
f(61,17,1,4,'MemNode::all_controls_dominate(Node*, Node*) [clone .part.0]')
f(62,17,1,4,'Node::dominates(Node*, Node_List&)')
f(13,18,1,4,'Parse::do_one_bytecode()')
f(1,19,19,3,'[not_walkable_Java]')
f(2,19,17,1,'I2C/C2I adapters')
f(3,19,3,4,'CompiledMethod::is_compiled() const')
f(3,22,14,4,'SharedRuntime::fixup_callers_callsite(Method*, unsigned char*)')
f(4,23,5,4,'CodeCache::find_blob(void*)')
f(4,28,5,4,'CodeHeap::find_blob_unsafe(void*) const')
f(4,33,3,4,'nmethod::is_zombie() const')
f(2,36,2,3,'Interpreter')
f(1,38,52,3,'[unknown_Java]')
f(2,38,52,1,'I2C/C2I adapters')
f(1,90,238,1,'java/lang/Thread.run')
f(2,90,238,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,90,238,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,90,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f2b8.run')
f(5,90,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,90,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,90,1,1,'java/lang/Thread.sleep')
f(8,90,1,3,'[unknown]')
f(9,90,1,3,'pthread_cond_timedwait')
f(4,91,237,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fda8.run')
f(5,91,237,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,91,237,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,96,119,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,97,115,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,105,4,1,'kyo/bench/ForkManyBench$$anon$3.apply')
f(10,107,2,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$2',2,0,0)
f(11,107,2,2,'kyo/bench/ForkManyBench$$Lambda$59.0x0000000800d4a9a0.apply',2,0,0)
f(12,107,2,2,'kyo/bench/ForkManyBench.$anonfun$adapted$2',2,0,0)
f(13,107,2,2,'kyo/bench/ForkManyBench.$anonfun$5',2,0,0)
f(14,107,2,2,'scala/runtime/BoxesRunTime.boxToBoolean',2,0,0)
f(9,109,94,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,111,88,1,'kyo/bench/ForkManyBench$$anon$1.apply')
f(11,112,87,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',15,0,0)
f(12,113,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(13,113,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(14,113,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(12,114,85,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',14,0,0)
f(13,114,85,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply',14,0,0)
f(14,116,83,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',12,0,0)
f(15,117,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(16,117,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(17,117,1,4,'MemAllocator::allocate() const')
f(18,117,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(19,117,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(20,117,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(21,117,1,4,'G1AllocRegion::new_alloc_region_and_allocate(unsigned long, bool)')
f(22,117,1,4,'G1CollectedHeap::new_mutator_alloc_region(unsigned long, bool, unsigned int)')
f(23,117,1,4,'G1RegionsOnNodes::add(HeapRegion*)')
f(15,118,4,2,'kyo/concurrent/scheduler/IOTask.<init>',4,0,0)
f(16,120,2,2,'kyo/concurrent/scheduler/IOPromise.<init>',2,0,0)
f(17,120,2,2,'kyo/concurrent/scheduler/IOPromise.<init>',2,0,0)
f(18,121,1,2,'java/util/concurrent/atomic/AtomicReference.<init>',1,0,0)
f(15,122,77,1,'kyo/concurrent/scheduler/Scheduler$.schedule',7,0,0)
f(16,122,2,2,'kyo/concurrent/scheduler/Scheduler$.submit',2,0,0)
f(17,122,2,2,'kyo/concurrent/scheduler/Worker.enqueue',2,0,0)
f(18,122,2,2,'kyo/concurrent/scheduler/Queue.offer',2,0,0)
f(19,122,2,2,'kyo/concurrent/scheduler/Queue.tryModify',2,0,0)
f(20,122,2,2,'scala/Function0.apply$mcZ$sp',2,0,0)
f(21,122,2,2,'kyo/concurrent/scheduler/Queue$$Lambda$54.0x0000000800d474b0.apply',2,0,0)
f(22,122,2,2,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1',2,0,0)
f(23,123,1,2,'kyo/concurrent/scheduler/Queue.items',1,0,0)
f(16,124,1,2,'kyo/concurrent/scheduler/Worker$.apply',1,0,0)
f(16,125,74,1,'kyo/concurrent/scheduler/Worker.enqueueLocal',4,0,0)
f(17,125,74,1,'kyo/concurrent/scheduler/Queue.offer',4,0,0)
f(18,125,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(18,127,72,1,'kyo/concurrent/scheduler/Queue.tryModify',2,0,0)
f(19,128,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(20,128,1,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',1,0,0)
f(19,129,70,1,'scala/Function0.apply$mcZ$sp')
f(20,129,70,1,'kyo/concurrent/scheduler/Queue$$Lambda$54.0x0000000800d474b0.apply')
f(21,129,70,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1')
f(22,129,70,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,132,15,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize',15,0,0)
f(24,132,15,2,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize',15,0,0)
f(25,132,15,2,'scala/collection/mutable/ArrayBuffer.array_$eq',15,0,0)
f(23,147,52,2,'scala/collection/mutable/PriorityQueue.fixUp',52,0,0)
f(24,157,4,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',4,0,0)
f(24,161,37,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_swap',37,0,0)
f(25,191,7,2,'scala/collection/mutable/ArrayBuffer.array',7,0,0)
f(24,198,1,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',1,0,0)
f(10,199,4,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5',2,0,0)
f(11,200,3,2,'kyo/bench/ForkManyBench$$anon$6.<init>',1,0,0)
f(12,200,3,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(13,201,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(13,202,1,6,'kyo/core$internal$KyoCont.value',0,1,0)
f(9,203,1,1,'kyo/concurrent/scheduler/IOTask.finalize$1')
f(9,204,1,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,204,1,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',1,0,0)
f(11,204,1,2,'kyo/concurrent/scheduler/IOPromise.complete',1,0,0)
f(12,204,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(13,204,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(14,204,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(9,205,5,6,'kyo/core$internal$KyoCont.effect',0,5,0)
f(9,210,2,3,'vtable stub')
f(8,212,3,1,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$runtime')
f(7,215,72,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,215,1,1,'kyo/concurrent/scheduler/Queue.isEmpty')
f(8,216,71,0,'kyo/concurrent/scheduler/Queue.modify',0,0,55)
f(9,268,3,4,'InterpreterRuntime::frequency_counter_overflow(JavaThread*, unsigned char*)')
f(10,268,3,4,'InterpreterRuntime::frequency_counter_overflow_inner(JavaThread*, unsigned char*)')
f(11,268,3,4,'CompilationPolicy::event(methodHandle const&, methodHandle const&, int, int, CompLevel, CompiledMethod*, JavaThread*)')
f(12,268,1,4,'CompilationPolicy::call_event(methodHandle const&, CompLevel, Thread*)')
f(13,268,1,4,'CompLevel CompilationPolicy::common<CallPredicate>(methodHandle const&, CompLevel, bool)')
f(14,268,1,4,'CompLevel CompilationPolicy::common<CallPredicate>(methodHandle const&, CompLevel, bool)')
f(12,269,1,4,'CompilationPolicy::compile(methodHandle const&, int, CompLevel, JavaThread*)')
f(13,269,1,4,'CompileBroker::compile_method(methodHandle const&, int, int, methodHandle const&, int, CompileTask::CompileReason, JavaThread*)')
f(14,269,1,4,'DirectivesStack::getMatchingDirective(methodHandle const&, AbstractCompiler*)')
f(15,269,1,3,'pthread_mutex_lock')
f(12,270,1,4,'CompilationPolicy::create_mdo(methodHandle const&, JavaThread*)')
f(13,270,1,3,'__tls_get_addr')
f(9,271,4,1,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(10,271,4,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',4,0,0)
f(11,271,4,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',4,0,0)
f(9,275,1,1,'java/util/concurrent/atomic/AtomicBoolean.set')
f(9,276,9,1,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d45230.apply')
f(10,276,9,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',9,0,0)
f(11,276,1,2,'kyo/concurrent/scheduler/Queue.queue',1,0,0)
f(11,277,8,2,'scala/collection/mutable/PriorityQueue.dequeue',8,0,0)
f(12,280,5,2,'scala/collection/mutable/PriorityQueue.fixDown',5,0,0)
f(13,280,4,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.gteq',4,0,0)
f(14,280,4,2,'scala/math/Ordering.gteq$',4,0,0)
f(15,280,4,2,'scala/math/Ordering.gteq',4,0,0)
f(16,280,4,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.compare',4,0,0)
f(13,284,1,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',1,0,0)
f(9,285,2,2,'kyo/concurrent/scheduler/Queue$$Lambda$63.0x0000000800d4b7d0.apply',2,0,0)
f(10,285,2,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',2,0,0)
f(11,285,2,2,'scala/collection/mutable/PriorityQueue.dequeue',2,0,0)
f(7,287,29,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,287,16,1,'java/util/AbstractQueue.add')
f(9,287,16,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.offer')
f(10,287,16,6,'org/jctools/queues/MpUnboundedXaddArrayQueue.producerChunkForIndex',2,8,0)
f(11,299,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.appendNextChunks')
f(12,299,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueueProducerChunk.soProducerChunk')
f(13,299,1,1,'sun/misc/Unsafe.putOrderedObject')
f(14,299,1,1,'jdk/internal/misc/Unsafe.putReferenceRelease')
f(11,300,1,2,'org/jctools/queues/MpUnboundedXaddArrayQueueProducerChunk.lvProducerChunk',1,0,0)
f(11,301,1,2,'org/jctools/queues/MpUnboundedXaddArrayQueueProducerChunk.lvProducerChunkIndex',1,0,0)
f(11,302,1,1,'org/jctools/queues/MpUnboundedXaddChunk.lvIndex')
f(8,303,13,1,'kyo/concurrent/scheduler/Worker.park')
f(9,303,13,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,303,13,1,'jdk/internal/misc/Unsafe.park')
f(11,304,1,3,'Unsafe_Park')
f(12,304,1,3,'pthread_mutex_unlock')
f(11,305,11,3,'[unknown]')
f(12,305,11,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,305,11,5,'entry_SYSCALL_64_after_hwframe')
f(14,305,11,5,'do_syscall_64')
f(15,305,11,5,'__x64_sys_futex')
f(16,305,10,5,'do_futex')
f(17,305,10,5,'futex_wait')
f(18,305,8,5,'futex_wait_queue_me')
f(19,305,1,5,'hrtimer_sleeper_start_expires')
f(20,305,1,5,'_raw_spin_unlock_irqrestore')
f(19,306,7,5,'schedule')
f(20,306,7,5,'__schedule')
f(21,306,7,5,'finish_task_switch.isra.0')
f(18,313,2,5,'futex_wait_setup')
f(16,315,1,5,'get_timespec64')
f(17,315,1,5,'copy_user_generic_unrolled')
f(7,316,2,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,316,1,1,'kyo/concurrent/scheduler/Scheduler$.randomWorker')
f(8,317,1,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,317,1,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,317,1,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(11,317,1,1,'scala/Function0.apply$mcZ$sp')
f(12,317,1,1,'kyo/concurrent/scheduler/Queue$$Lambda$70.0x0000000800d4dc00.apply')
f(13,317,1,1,'kyo/concurrent/scheduler/Queue.steal$$anonfun$1')
f(14,317,1,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(15,317,1,1,'scala/Function0.apply$mcZ$sp')
f(16,317,1,6,'kyo/concurrent/scheduler/Queue$$Lambda$71.0x0000000800d50000.apply',0,1,0)
f(17,317,1,2,'java/lang/Boolean.valueOf',1,0,0)
f(7,318,9,1,'kyo/concurrent/scheduler/Worker.flush')
f(8,318,9,1,'kyo/concurrent/scheduler/Queue.drain')
f(9,318,9,1,'kyo/concurrent/scheduler/Queue.modify')
f(10,318,9,1,'kyo/concurrent/scheduler/Queue$$Lambda$75.0x0000000800d527e8.apply')
f(11,318,9,1,'kyo/concurrent/scheduler/Queue.drain$$anonfun$adapted$1')
f(12,318,9,1,'kyo/concurrent/scheduler/Queue.drain$$anonfun$1')
f(13,318,9,1,'scala/collection/AbstractIterable.foreach')
f(14,318,9,1,'scala/collection/IterableOnceOps.foreach$')
f(15,318,9,1,'scala/collection/IterableOnceOps.foreach',0,0,1)
f(16,319,8,1,'scala/runtime/function/JProcedure1.apply')
f(17,319,8,1,'scala/runtime/function/JProcedure1.apply')
f(18,319,8,1,'kyo/concurrent/scheduler/Worker$$Lambda$74.0x0000000800d523e8.applyVoid')
f(19,319,8,1,'kyo/concurrent/scheduler/Worker.flush$$anonfun$1')
f(20,319,8,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(21,319,5,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(22,319,5,1,'java/util/concurrent/locks/LockSupport.unpark')
f(23,319,5,1,'jdk/internal/misc/Unsafe.unpark')
f(24,319,5,3,'pthread_cond_signal')
f(25,319,5,5,'entry_SYSCALL_64_after_hwframe')
f(26,319,5,5,'do_syscall_64')
f(27,319,5,5,'__x64_sys_futex')
f(28,319,5,5,'do_futex')
f(29,319,5,5,'futex_wake')
f(30,319,5,5,'wake_up_q')
f(31,319,5,5,'_raw_spin_unlock_irqrestore')
f(21,324,3,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.poll',0,1,0)
f(22,324,1,2,'org/jctools/queues/MpUnboundedXaddArrayQueueConsumerFields.lvConsumerIndex',1,0,0)
f(22,325,2,2,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.switchToNextConsumerChunkAndPoll',2,0,0)
f(7,327,1,1,'kyo/concurrent/scheduler/Worker.stop$1')
f(8,327,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: 1040px}
</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(65);
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,21648,3,'all')
f(1,0,1,2,'java.lang.String')
f(1,1,21644,1,'java/lang/Thread.run')
f(2,1,21644,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,1,21644,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,1,379,1,'java/util/concurrent/FutureTask.run')
f(5,1,379,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,1,379,1,'java/util/concurrent/FutureTask.run')
f(7,1,379,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,1,379,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,1,379,1,'java/lang/reflect/Method.invoke')
f(10,1,379,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,1,379,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,1,379,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,1,379,1,'kyo/bench/jmh_generated/ForkManyBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,1,379,1,'kyo/bench/jmh_generated/ForkManyBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,1,379,1,'kyo/bench/Bench.syncKyo')
f(16,1,177,1,'kyo/bench/Bench.runLoop$1')
f(17,1,109,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,1,109,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,1,109,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,1,109,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,1,65,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,1,65,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,1,37,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,38,28,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,38,28,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,66,40,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,106,4,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,106,4,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,106,4,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,110,68,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,110,68,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,110,68,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,110,68,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,110,37,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,110,37,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,110,37,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(24,110,37,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,110,37,2,'kyo.concurrent.scheduler.IOTask')
f(21,147,31,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,147,31,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c83b00.apply')
f(23,147,31,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,147,31,1,'kyo/concurrent/fibers$Fiber.join')
f(25,147,31,1,'kyo/concurrent/fibers$Fibers.get')
f(26,147,31,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,147,31,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(16,178,202,1,'kyo/bench/ForkManyBench.kyoBench')
f(17,178,9,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,178,9,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,178,9,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,178,9,2,'kyo.bench.ForkManyBench$$Lambda$37+0x0000000800c3f718')
f(17,187,87,1,'kyo/concurrent/fibers$Fibers.block')
f(18,187,9,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,187,9,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,196,36,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,196,36,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,232,42,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,232,42,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,274,106,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,274,37,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,274,37,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,274,37,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,274,37,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c83b00')
f(18,311,43,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,311,37,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,311,37,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,311,37,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,311,37,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c85068')
f(19,348,6,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,348,6,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(18,354,26,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,354,26,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(4,380,10,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f4b8.run')
f(5,380,10,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,380,10,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,380,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,380,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,380,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,380,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,380,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,390,10,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1f6e0.run')
f(5,390,10,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,390,10,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,390,10,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,390,10,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,390,10,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,390,10,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$72+0x0000000800d4dd80')
f(4,400,21245,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d243c0.run')
f(5,400,21245,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,400,21245,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,400,8,1,'java/util/concurrent/CopyOnWriteArrayList.add')
f(8,400,8,1,'java/util/Arrays.copyOf')
f(9,400,8,1,'java/util/Arrays.copyOf')
f(10,400,8,2,'java.lang.Object[]')
f(7,408,18987,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,408,18987,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,408,18979,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,408,15430,1,'kyo/bench/ForkManyBench$$anon$1.apply')
f(11,408,6333,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(12,408,6333,1,'kyo/bench/ForkManyBench$$Lambda$62.0x0000000800d4b520.apply')
f(13,408,6333,1,'kyo/bench/ForkManyBench.$anonfun$2')
f(14,408,6333,1,'kyo/bench/ForkManyBench.repeat$2')
f(15,408,2824,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4cc00.linkToTargetMethod')
f(16,408,2824,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c400.newInvokeSpecial')
f(17,408,2824,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,408,2824,2,'kyo.bench.ForkManyBench$$Lambda$62+0x0000000800d4b520')
f(15,3232,3509,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(16,3232,3509,2,'kyo.bench.ForkManyBench$$anon$1')
f(11,6741,9097,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,6741,9097,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,6741,9097,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(14,6741,9097,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,6741,1169,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,7910,6366,2,'kyo.concurrent.scheduler.IOTask')
f(15,14276,1555,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,14276,1555,2,'kyo.concurrent.fibers$Fiber')
f(15,15831,7,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(16,15831,7,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(17,15831,7,1,'kyo/concurrent/scheduler/Queue.offer')
f(18,15831,7,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(19,15831,7,1,'scala/Function0.apply$mcZ$sp')
f(20,15831,7,1,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d476b8.apply')
f(21,15831,7,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1')
f(22,15831,7,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,15831,7,1,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize')
f(24,15831,7,1,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize')
f(25,15831,7,1,'scala/collection/mutable/ArrayBuffer$.scala$collection$mutable$ArrayBuffer$$ensureSize')
f(26,15831,7,5,'java.lang.Object[]')
f(10,15838,3549,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5')
f(11,15838,3548,2,'kyo.bench.ForkManyBench$$anon$6')
f(11,19386,1,1,'kyo/bench/ForkManyBench$$Lambda$63.0x0000000800d4b8f0.apply')
f(12,19386,1,1,'kyo/bench/ForkManyBench.$anonfun$8')
f(13,19386,1,1,'kyo/concurrent/fibers$Fiber.join')
f(14,19386,1,1,'kyo/concurrent/fibers$Fibers.get')
f(15,19386,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(16,19386,1,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(9,19387,4,1,'kyo/bench/ForkManyBench$$anon$7.apply')
f(10,19387,1,1,'kyo/bench/ForkManyBench$$anon$4.apply')
f(11,19387,1,1,'kyo/concurrent/atomics$Atomics$$anon$1.apply')
f(12,19387,1,1,'kyo/concurrent/atomics$Atomics$$anon$1.apply')
f(13,19387,1,2,'java.util.concurrent.atomic.AtomicInteger')
f(10,19388,3,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$6')
f(11,19388,3,1,'kyo/bench/ForkManyBench$$Lambda$59.0x0000000800d4a8b0.apply')
f(12,19388,3,1,'kyo/bench/ForkManyBench.$anonfun$6')
f(13,19388,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5')
f(14,19388,1,2,'kyo.bench.ForkManyBench$$anon$6')
f(13,19389,1,1,'kyo/bench/ForkManyBench.repeat$2')
f(14,19389,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(15,19389,1,2,'kyo.bench.ForkManyBench$$anon$1')
f(13,19390,1,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(14,19390,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(15,19390,1,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(9,19391,1,1,'kyo/bench/ForkManyBench$$anon$8.apply')
f(10,19391,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$7')
f(11,19391,1,1,'kyo/bench/ForkManyBench$$Lambda$57.0x0000000800d44a30.apply')
f(12,19391,1,1,'kyo/bench/ForkManyBench.$anonfun$3')
f(13,19391,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(14,19391,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(15,19391,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,19391,1,2,'kyo.bench.ForkManyBench$$Lambda$59+0x0000000800d4a8b0')
f(9,19392,2,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,19392,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,19392,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,19392,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,19392,2,2,'kyo.concurrent.scheduler.IOTask$$Lambda$66+0x0000000800d4e9e0')
f(9,19394,1,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,19394,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,19394,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,19394,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,19394,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(14,19394,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$67+0x0000000800d4ede8')
f(7,19395,2242,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,19395,2242,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,19395,2242,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,19395,2242,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,19395,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(12,19395,1,2,'kyo.concurrent.scheduler.Queue$$Lambda$56+0x0000000800d45230')
f(11,19396,2241,2,'kyo.concurrent.scheduler.Queue$$Lambda$56+0x0000000800d45230')
f(7,21637,1,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,21637,1,1,'java/util/AbstractQueue.add')
f(9,21637,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.offer')
f(10,21637,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.producerChunkForIndex')
f(11,21637,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.appendNextChunks')
f(12,21637,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.newOrPooledChunk')
f(13,21637,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(14,21637,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(15,21637,1,1,'org/jctools/queues/MpmcUnboundedXaddChunk.<init>')
f(16,21637,1,1,'org/jctools/queues/MpUnboundedXaddChunk.<init>')
f(17,21637,1,1,'org/jctools/util/UnsafeRefArrayAccess.allocateRefArray')
f(18,21637,1,2,'java.lang.Object[]')
f(7,21638,4,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,21638,4,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,21638,4,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,21638,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,21638,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,21638,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,21638,1,2,'kyo.concurrent.scheduler.Queue$$Lambda$70+0x0000000800d4d800')
f(10,21639,1,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(11,21639,1,1,'scala/Function0.apply$mcZ$sp')
f(12,21639,1,1,'kyo/concurrent/scheduler/Queue$$Lambda$70.0x0000000800d4d800.apply')
f(13,21639,1,1,'kyo/concurrent/scheduler/Queue.steal$$anonfun$1')
f(14,21639,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(15,21639,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(16,21639,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,21639,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(18,21639,1,2,'kyo.concurrent.scheduler.Queue$$Lambda$71+0x0000000800d4dac0')
f(10,21640,2,1,'scala/runtime/ObjectRef.create')
f(11,21640,2,2,'scala.runtime.ObjectRef')
f(7,21642,3,1,'kyo/concurrent/scheduler/Worker.flush')
f(8,21642,3,1,'kyo/concurrent/scheduler/Queue.drain')
f(9,21642,3,1,'kyo/concurrent/scheduler/Queue.modify')
f(10,21642,3,1,'kyo/concurrent/scheduler/Queue$$Lambda$77.0x0000000800d56a00.apply')
f(11,21642,3,1,'kyo/concurrent/scheduler/Queue.drain$$anonfun$adapted$1')
f(12,21642,3,1,'kyo/concurrent/scheduler/Queue.drain$$anonfun$1')
f(13,21642,3,1,'scala/collection/AbstractIterable.foreach')
f(14,21642,3,1,'scala/collection/IterableOnceOps.foreach$')
f(15,21642,3,1,'scala/collection/IterableOnceOps.foreach')
f(16,21642,3,1,'scala/collection/mutable/PriorityQueue.iterator')
f(17,21642,3,1,'scala/collection/mutable/ArrayBuffer.iterator')
f(18,21642,3,1,'scala/collection/IndexedSeqOps.iterator$')
f(19,21642,3,1,'scala/collection/IndexedSeqOps.iterator')
f(20,21642,3,1,'scala/collection/mutable/ArrayBuffer.view')
f(21,21642,3,1,'scala/collection/mutable/ArrayBuffer.view')
f(22,21642,3,1,'java/lang/ClassLoader.loadClass')
f(23,21642,3,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(24,21642,3,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(25,21642,3,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(26,21642,3,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(27,21642,3,1,'jdk/internal/loader/BuiltinClassLoader.defineClass')
f(28,21642,3,1,'java/security/SecureClassLoader.defineClass')
f(29,21642,3,1,'java/lang/ClassLoader.defineClass')
f(30,21642,3,1,'java/lang/ClassLoader.defineClass1')
f(31,21642,3,1,'java/lang/ClassLoader.loadClass')
f(32,21642,3,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(33,21642,3,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(34,21642,3,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(35,21642,3,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(36,21642,3,1,'jdk/internal/loader/BuiltinClassLoader.defineClass')
f(37,21642,3,1,'java/security/SecureClassLoader.defineClass')
f(38,21642,3,1,'java/lang/ClassLoader.defineClass')
f(39,21642,3,1,'java/lang/ClassLoader.defineClass1')
f(40,21642,3,1,'java/lang/ClassLoader.loadClass')
f(41,21642,3,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(42,21642,3,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(43,21642,3,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(44,21642,3,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(45,21642,3,1,'jdk/internal/loader/BuiltinClassLoader.defineClass')
f(46,21642,1,1,'java/security/SecureClassLoader.defineClass')
f(47,21642,1,1,'java/lang/ClassLoader.defineClass')
f(48,21642,1,1,'java/lang/ClassLoader.defineClass1')
f(49,21642,1,1,'java/lang/ClassLoader.loadClass')
f(50,21642,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(51,21642,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(52,21642,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(53,21642,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(54,21642,1,1,'jdk/internal/loader/BuiltinClassLoader.defineClass')
f(55,21642,1,1,'java/security/SecureClassLoader.defineClass')
f(56,21642,1,1,'java/lang/ClassLoader.defineClass')
f(57,21642,1,1,'java/lang/ClassLoader.defineClassSourceLocation')
f(58,21642,1,1,'java/net/URL.toString')
f(59,21642,1,1,'java/net/URL.toExternalForm')
f(60,21642,1,1,'java/net/URLStreamHandler.toExternalForm')
f(61,21642,1,1,'java/lang/StringBuilder.toString')
f(62,21642,1,1,'java/lang/StringLatin1.newString')
f(63,21642,1,1,'java/util/Arrays.copyOfRange')
f(64,21642,1,2,'byte[]')
f(46,21643,2,1,'jdk/internal/loader/Resource.getBytes')
f(47,21643,2,1,'java/util/Arrays.copyOf')
f(48,21643,2,5,'byte[]')
f(1,21645,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,21645,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,21645,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,21645,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,21645,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,21645,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,21645,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,21645,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,21645,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,21645,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,21645,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,21645,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,21645,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,273,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,'AddPNode::bottom_type() const')
f(1,1,272,1,'java/lang/Thread.run')
f(2,1,272,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,1,272,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,1,1,1,'java/util/concurrent/FutureTask.run')
f(5,1,1,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,1,1,1,'java/util/concurrent/FutureTask.run')
f(7,1,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,1,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,1,1,1,'java/lang/reflect/Method.invoke')
f(10,1,1,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,1,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,1,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,1,1,1,'kyo/bench/jmh_generated/ForkManyBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,1,1,1,'kyo/bench/jmh_generated/ForkManyBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,1,1,1,'kyo/bench/Bench.syncKyo')
f(16,1,1,1,'kyo/bench/Bench.runLoop$1')
f(17,1,1,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,1,1,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,1,1,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,1,1,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,1,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,1,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,1,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(24,1,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,1,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,1,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,1,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(28,1,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(29,1,1,1,'jdk/internal/misc/Unsafe.unpark')
f(30,1,1,3,'pthread_cond_signal')
f(31,1,1,5,'entry_SYSCALL_64_after_hwframe')
f(32,1,1,5,'do_syscall_64')
f(33,1,1,5,'__x64_sys_futex')
f(34,1,1,5,'do_futex')
f(35,1,1,5,'futex_wake')
f(36,1,1,5,'wake_q_add_safe')
f(4,2,271,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d243c0.run')
f(5,2,271,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,2,271,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,6,4,2,'kyo/concurrent/scheduler/IOTask.reenqueue',2,0,0)
f(8,6,4,2,'kyo/concurrent/scheduler/IOTask.curr',2,0,0)
f(7,10,230,1,'kyo/concurrent/scheduler/IOTask.run',17,0,0)
f(8,13,3,2,'kyo/concurrent/scheduler/Coordinator$.tick',3,0,0)
f(8,16,4,1,'kyo/concurrent/scheduler/IOTask.curr_$eq')
f(8,20,220,1,'kyo/concurrent/scheduler/IOTask.eval',12,0,0)
f(9,33,5,1,'kyo/bench/ForkManyBench$$anon$3.apply')
f(10,36,2,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$2',2,0,0)
f(11,36,2,2,'kyo/bench/ForkManyBench$$Lambda$60.0x0000000800d4ac60.apply',2,0,0)
f(12,36,2,2,'kyo/bench/ForkManyBench.$anonfun$adapted$2',2,0,0)
f(13,37,1,2,'kyo/bench/ForkManyBench.$anonfun$5',1,0,0)
f(14,37,1,2,'scala/runtime/BoxesRunTime.boxToBoolean',1,0,0)
f(9,38,176,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,43,162,1,'kyo/bench/ForkManyBench$$anon$1.apply',5,0,0)
f(11,44,2,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1',2,0,0)
f(12,44,2,2,'kyo/bench/ForkManyBench$$Lambda$62.0x0000000800d4b2f0.apply',2,0,0)
f(13,44,2,2,'kyo/bench/ForkManyBench.$anonfun$2',2,0,0)
f(14,44,2,2,'kyo/bench/ForkManyBench.repeat$2',2,0,0)
f(15,44,1,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d4cc00.linkToTargetMethod',1,0,0)
f(16,44,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c400.newInvokeSpecial',1,0,0)
f(17,44,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(15,45,1,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1',1,0,0)
f(11,46,158,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',1,0,0)
f(12,47,157,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,48,155,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply',31,0,0)
f(14,48,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(15,48,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(16,48,1,4,'MemAllocator::allocate() const')
f(17,48,1,4,'AllocTracer::send_allocation_in_new_tlab(Klass*, HeapWordImpl**, unsigned long, unsigned long, JavaThread*)')
f(18,48,1,4,'JfrObjectAllocationSample::send_event(Klass const*, unsigned long, bool, Thread*)')
f(14,49,154,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',31,0,0)
f(15,50,8,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',8,0,0)
f(15,58,15,2,'kyo/concurrent/scheduler/IOTask.<init>',15,0,0)
f(16,66,7,2,'kyo/concurrent/scheduler/IOPromise.<init>',7,0,0)
f(17,66,7,2,'kyo/concurrent/scheduler/IOPromise.<init>',7,0,0)
f(18,66,7,2,'java/util/concurrent/atomic/AtomicReference.<init>',7,0,0)
f(19,70,3,2,'java/lang/Object.<init>',3,0,0)
f(15,73,130,1,'kyo/concurrent/scheduler/Scheduler$.schedule',7,0,0)
f(16,73,7,2,'kyo/concurrent/scheduler/Scheduler$.submit',7,0,0)
f(17,73,7,2,'kyo/concurrent/scheduler/Worker.enqueue',7,0,0)
f(18,73,7,2,'kyo/concurrent/scheduler/Queue.offer',7,0,0)
f(19,73,6,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',6,0,0)
f(20,73,6,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',6,0,0)
f(21,77,2,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',2,0,0)
f(19,79,1,2,'kyo/concurrent/scheduler/Queue.tryModify',1,0,0)
f(16,80,123,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(17,80,123,1,'kyo/concurrent/scheduler/Queue.offer')
f(18,80,123,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(19,80,123,1,'scala/Function0.apply$mcZ$sp')
f(20,80,123,1,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d476b8.apply')
f(21,80,123,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1')
f(22,80,123,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,84,34,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize',34,0,0)
f(24,84,34,2,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize',34,0,0)
f(25,84,1,2,'scala/collection/mutable/ArrayBuffer$.scala$collection$mutable$ArrayBuffer$$ensureSize',1,0,0)
f(25,85,33,2,'scala/collection/mutable/ArrayBuffer.array_$eq',33,0,0)
f(26,117,1,5,'asm_sysvec_hyperv_stimer0')
f(27,117,1,5,'sysvec_hyperv_stimer0')
f(28,117,1,5,'irq_exit_rcu')
f(29,117,1,5,'__irq_exit_rcu')
f(30,117,1,5,'__softirqentry_text_start')
f(23,118,85,2,'scala/collection/mutable/PriorityQueue.fixUp',85,0,0)
f(24,135,8,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',8,0,0)
f(24,143,58,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_swap',58,0,0)
f(25,195,6,2,'scala/collection/mutable/ArrayBuffer.array',6,0,0)
f(24,201,2,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',2,0,0)
f(13,203,1,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',1,0,0)
f(14,203,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(15,203,1,2,'kyo/core$internal$Kyo.<init>',1,0,0)
f(16,203,1,2,'java/lang/Object.<init>',1,0,0)
f(11,204,1,2,'kyo/concurrent/scheduler/IOTask.apply',1,0,0)
f(10,205,9,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5',6,0,0)
f(11,205,9,2,'kyo/bench/ForkManyBench$$anon$6.<init>',6,0,0)
f(12,205,9,2,'kyo/core$internal$KyoCont.<init>',6,0,0)
f(13,209,3,6,'kyo/core$internal$KyoCont.effect',0,3,0)
f(13,212,2,3,'vtable stub')
f(9,214,2,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,214,2,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',2,0,0)
f(9,216,1,1,'kyo/concurrent/scheduler/IOTask.finalize$1')
f(10,216,1,2,'kyo/concurrent/scheduler/IOTask.ensures',1,0,0)
f(9,217,10,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,217,1,2,'java/util/concurrent/atomic/AtomicReference.get',1,0,0)
f(10,218,9,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',7,0,0)
f(11,218,9,2,'kyo/concurrent/scheduler/IOPromise.complete',7,0,0)
f(12,218,4,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',4,0,0)
f(13,218,4,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',4,0,0)
f(14,218,4,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',4,0,0)
f(12,222,5,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',3,0,0)
f(13,222,5,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',3,0,0)
f(14,225,2,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,225,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,225,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,225,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,225,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,225,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,225,2,1,'jdk/internal/misc/Unsafe.unpark')
f(21,225,2,3,'pthread_cond_signal')
f(22,225,2,5,'entry_SYSCALL_64_after_hwframe')
f(23,225,2,5,'do_syscall_64')
f(24,225,2,5,'__x64_sys_futex')
f(25,225,2,5,'do_futex')
f(26,225,2,5,'futex_wake')
f(27,225,2,5,'wake_up_q')
f(28,225,2,5,'_raw_spin_unlock_irqrestore')
f(9,227,1,2,'kyo/concurrent/scheduler/IOTask.st',1,0,0)
f(9,228,6,6,'kyo/core$internal$KyoCont.effect',0,6,0)
f(9,234,1,1,'kyo/ios$KyoIO.effect')
f(9,235,5,3,'vtable stub')
f(7,240,28,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,240,28,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,240,3,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',3,0,0)
f(10,240,3,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',3,0,0)
f(11,242,1,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(9,243,25,2,'kyo/concurrent/scheduler/Queue$$Lambda$64.0x0000000800d4ba90.apply',25,0,0)
f(10,248,20,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',20,0,0)
f(11,254,3,2,'kyo/concurrent/scheduler/Queue.isEmpty',3,0,0)
f(11,257,11,2,'scala/collection/mutable/PriorityQueue.dequeue',11,0,0)
f(12,265,2,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',2,0,0)
f(12,267,1,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',1,0,0)
f(7,268,3,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,268,3,1,'kyo/concurrent/scheduler/Worker.park')
f(9,268,3,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,268,3,1,'jdk/internal/misc/Unsafe.park')
f(11,268,3,3,'[unknown]')
f(12,268,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,268,2,5,'entry_SYSCALL_64_after_hwframe')
f(14,268,2,5,'do_syscall_64')
f(15,268,1,5,'__x64_sys_futex')
f(16,268,1,5,'do_futex')
f(17,268,1,5,'futex_wait')
f(18,268,1,5,'futex_wait_queue_me')
f(19,268,1,5,'schedule')
f(20,268,1,5,'__schedule')
f(21,268,1,5,'finish_task_switch.isra.0')
f(15,269,1,5,'syscall_exit_to_user_mode')
f(16,269,1,5,'exit_to_user_mode_prepare')
f(17,269,1,5,'exit_to_user_mode_loop')
f(12,270,1,3,'pthread_cond_timedwait')
f(7,271,1,2,'kyo/concurrent/scheduler/Worker.queue',1,0,0)
f(7,272,1,1,'kyo/concurrent/scheduler/Worker.stop$1')
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,11276,3,'all')
f(1,0,11272,1,'java/lang/Thread.run')
f(2,0,11272,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,11272,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,2114,1,'java/util/concurrent/FutureTask.run')
f(5,0,2114,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,2114,1,'java/util/concurrent/FutureTask.run')
f(7,0,2114,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,2114,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,2114,1,'java/lang/reflect/Method.invoke')
f(10,0,2114,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,2114,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,2114,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,2114,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,2112,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,2112,1,'kyo/bench/Bench.forkKyo')
f(16,0,175,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,175,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,175,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,175,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3e9f8')
f(16,175,84,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,175,84,2,'kyo.bench.Bench$$anon$1')
f(16,259,1410,1,'kyo/bench/Bench.runLoop$2')
f(17,259,679,1,'kyo/bench/Bench$$anon$1.apply')
f(18,259,56,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,259,56,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c82da8.apply')
f(20,259,56,1,'kyo/bench/Bench.$anonfun$2')
f(21,259,56,1,'kyo/concurrent/fibers$Fiber.block')
f(22,259,56,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,315,623,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,315,623,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,315,623,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(21,315,623,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,315,114,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,429,351,2,'kyo.concurrent.scheduler.IOTask')
f(22,780,156,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,780,156,2,'kyo.concurrent.fibers$Fiber')
f(22,936,2,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,936,2,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,936,2,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.poll')
f(25,936,2,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.switchToNextConsumerChunkAndPoll')
f(26,936,2,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.moveToNextConsumerChunk')
f(27,936,2,1,'org/jctools/queues/MpUnboundedXaddArrayQueueConsumerFields.soConsumerChunk')
f(28,936,1,2,'byte[]')
f(28,937,1,5,'byte[]')
f(17,938,731,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,938,731,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,938,731,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,938,731,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,938,390,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,938,390,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,938,107,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,1045,283,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,1045,283,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,1328,100,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,1428,241,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,1428,241,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,1428,241,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,1669,443,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,1669,108,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1669,108,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1669,108,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1669,108,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(17,1777,220,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,1777,220,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,1997,115,1,'kyo/locals$Locals$.save')
f(18,1997,115,2,'kyo.locals$Locals$$anon$3')
f(14,2112,1,1,'org/openjdk/jmh/results/BenchmarkTaskResult.add')
f(15,2112,1,1,'java/util/ArrayList.add')
f(16,2112,1,1,'java/util/ArrayList.add')
f(17,2112,1,1,'java/util/ArrayList.grow')
f(18,2112,1,1,'java/util/ArrayList.grow')
f(19,2112,1,2,'java.lang.Object[]')
f(14,2113,1,1,'org/openjdk/jmh/results/ThroughputResult.<init>')
f(15,2113,1,1,'java/lang/StringBuilder.<init>')
f(16,2113,1,1,'java/lang/AbstractStringBuilder.<init>')
f(17,2113,1,2,'byte[]')
f(4,2114,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,2114,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,2114,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,2114,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,2114,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,2114,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,2114,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,2114,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,2125,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e5f8.run')
f(5,2125,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,2125,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,2125,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,2125,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,2125,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,2125,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$69+0x0000000800d4bcb8')
f(4,2136,9136,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,2136,9136,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,2136,9136,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,2136,8687,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,2136,8687,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,2136,4329,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,2136,1231,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,2136,238,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(12,2136,238,1,'kyo/bench/InterruptBench$$Lambda$57.0x0000000800d45690.apply')
f(13,2136,238,1,'kyo/bench/InterruptBench.$anonfun$2')
f(14,2136,238,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(15,2136,238,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(16,2136,238,2,'kyo.concurrent.fibers$Fiber$$anon$11')
f(11,2374,993,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,2374,993,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,2374,993,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(14,2374,993,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,2374,205,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,2579,553,2,'kyo.concurrent.scheduler.IOTask')
f(15,3132,235,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,3132,235,2,'kyo.concurrent.fibers$Fiber')
f(10,3367,1174,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(11,3367,1174,2,'kyo.bench.InterruptBench$$anon$3')
f(10,4541,655,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,4541,466,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(12,4541,466,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$61.0x0000000800d494c0.apply')
f(13,4541,466,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$_$$anonfun$adapted$1')
f(14,4541,466,1,'kyo/concurrent/fibers$.$anonfun$3')
f(15,4541,272,2,'kyo.concurrent.fibers$Fiber')
f(15,4813,194,1,'kyo/concurrent/fibers$Fiber.join')
f(16,4813,194,1,'kyo/concurrent/fibers$Fibers.get')
f(17,4813,194,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(18,4813,194,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(11,5007,189,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(12,5007,189,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(13,5007,189,1,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10')
f(14,5007,189,2,'kyo.concurrent.fibers$Fiber$$anon$13$$anon$14')
f(10,5196,1269,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,5196,1269,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(12,5196,369,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(13,5196,369,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(14,5196,369,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(15,5196,198,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$60+0x0000000800d48fb0')
f(15,5394,171,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$61+0x0000000800d494c0')
f(12,5565,278,2,'kyo.concurrent.scheduler.IOPromise')
f(12,5843,357,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(13,5843,357,2,'kyo.concurrent.fibers$$anon$12')
f(12,6200,265,1,'kyo/concurrent/fibers$Fiber.interrupt')
f(13,6200,265,2,'kyo.concurrent.fibers$Fiber$$anon$13')
f(9,6465,3,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,6465,3,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,6465,3,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e9f8.apply')
f(12,6465,3,1,'kyo/bench/Bench.$anonfun$1')
f(13,6465,3,1,'kyo/bench/InterruptBench.kyoBenchFiber')
f(14,6465,3,1,'kyo/bench/InterruptBench.iterate$2')
f(15,6465,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,6465,1,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(17,6465,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,6465,1,2,'kyo.bench.InterruptBench$$Lambda$58+0x0000000800d44400')
f(15,6466,2,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(16,6466,2,2,'kyo.bench.InterruptBench$$anon$2')
f(9,6468,3274,1,'kyo/concurrent/scheduler/IOTask.finalize$1')
f(10,6468,3274,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$60.0x0000000800d48fb0.apply$mcV$sp')
f(11,6468,3274,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1')
f(12,6468,3274,1,'kyo/concurrent/fibers$.loop$9')
f(13,6468,3274,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(14,6468,3274,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(15,6468,3274,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,6468,3274,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,6468,3274,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,6468,3274,1,'scala/runtime/function/JProcedure1.apply')
f(19,6468,3274,1,'scala/runtime/function/JProcedure1.apply')
f(20,6468,3274,1,'kyo/concurrent/scheduler/IOTask$$Lambda$67.0x0000000800d4b4e0.applyVoid')
f(21,6468,3274,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(22,6468,553,2,'kyo.concurrent.scheduler.IOTask')
f(22,7021,558,1,'kyo/concurrent/scheduler/IOPromise.become')
f(23,7021,558,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(24,7021,191,1,'kyo/concurrent/scheduler/IOPromise$Linked$.apply')
f(25,7021,191,2,'kyo.concurrent.scheduler.IOPromise$Linked')
f(24,7212,367,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(25,7212,367,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(26,7212,367,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(27,7212,367,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(22,7579,2163,1,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1')
f(23,7579,2163,1,'kyo/concurrent/scheduler/IOTask$$Lambda$68.0x0000000800d4b8e8.apply')
f(24,7579,2163,1,'kyo/concurrent/scheduler/IOTask.$anonfun$1')
f(25,7579,2163,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(26,7579,2163,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(27,7579,2163,1,'kyo/bench/InterruptBench$$Lambda$58.0x0000000800d44400.apply')
f(28,7579,2163,1,'kyo/bench/InterruptBench.$anonfun$adapted$1')
f(29,7579,2163,1,'kyo/bench/InterruptBench.$anonfun$3')
f(30,7579,2163,1,'kyo/bench/InterruptBench.iterate$2')
f(31,7579,424,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(32,7579,216,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(33,7579,216,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,7579,216,2,'kyo.bench.InterruptBench$$Lambda$56+0x0000000800d47cc8')
f(32,7795,208,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(33,7795,208,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,7795,208,2,'kyo.bench.InterruptBench$$Lambda$58+0x0000000800d44400')
f(31,8003,421,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(32,8003,421,2,'kyo.bench.InterruptBench$$anon$2')
f(31,8424,423,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(32,8424,423,2,'kyo.bench.InterruptBench$$anon$3')
f(31,8847,895,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(32,8847,216,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(33,8847,216,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(34,8847,216,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(35,8847,216,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(32,9063,423,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(33,9063,423,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(32,9486,256,1,'kyo/locals$Locals$.save')
f(33,9486,256,2,'kyo.locals$Locals$$anon$3')
f(9,9742,523,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,9742,231,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,9742,231,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,9742,231,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,9742,231,2,'kyo.concurrent.scheduler.IOTask$$Lambda$62+0x0000000800d4a2a8')
f(10,9973,292,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,9973,292,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(9,10265,558,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,10265,266,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,10265,266,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,10265,266,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,10265,266,2,'kyo.concurrent.scheduler.IOTask$$Lambda$67+0x0000000800d4b4e0')
f(10,10531,292,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,10531,292,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,10823,448,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,10823,448,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,10823,448,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,10823,448,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,10823,448,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d47148')
f(7,11271,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,11271,1,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,11271,1,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,11271,1,1,'scala/runtime/ObjectRef.create')
f(11,11271,1,2,'scala.runtime.ObjectRef')
f(1,11272,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,11272,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,11272,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,11272,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,11272,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,11272,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,11272,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,11272,1,2,'org.openjdk.jmh.runner.InfraControl')
f(8,11273,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,11273,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,11273,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,11273,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,11273,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,11273,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: 1328px}
</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(83);
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,295,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,2,4,'Compile::Code_Gen()')
f(10,0,2,4,'PhaseChaitin::Register_Allocate()')
f(11,0,2,4,'PhaseChaitin::build_ifg_physical(ResourceArea*)')
f(12,0,1,4,'PhaseChaitin::add_input_to_liveout(Block*, Node*, IndexSet*, double, PhaseChaitin::Pressure&, PhaseChaitin::Pressure&)')
f(12,1,1,4,'PhaseChaitin::compute_initial_block_pressure(Block*, IndexSet*, PhaseChaitin::Pressure&, PhaseChaitin::Pressure&, double) [clone .part.0] [clone .isra.0]')
f(9,2,1,4,'Compile::Optimize()')
f(10,2,1,4,'PhaseCCP::analyze()')
f(9,3,1,4,'ParseGenerator::generate(JVMState*)')
f(10,3,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(11,3,1,4,'Parse::do_all_blocks()')
f(12,3,1,4,'Parse::do_one_block()')
f(13,3,1,4,'Parse::do_call()')
f(14,3,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(15,3,1,4,'ParseGenerator::generate(JVMState*)')
f(16,3,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(17,3,1,4,'Parse::do_all_blocks()')
f(18,3,1,4,'Parse::do_one_block()')
f(19,3,1,4,'Parse::do_call()')
f(20,3,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(21,3,1,4,'ParseGenerator::generate(JVMState*)')
f(22,3,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(23,3,1,4,'Parse::do_all_blocks()')
f(24,3,1,4,'Parse::do_one_block()')
f(25,3,1,4,'Parse::do_call()')
f(26,3,1,4,'ParseGenerator::generate(JVMState*)')
f(27,3,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(28,3,1,4,'Parse::do_all_blocks()')
f(29,3,1,4,'Parse::do_one_block()')
f(30,3,1,4,'Parse::do_call()')
f(31,3,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(32,3,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(33,3,1,4,'ParseGenerator::generate(JVMState*)')
f(34,3,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(35,3,1,4,'Parse::do_all_blocks()')
f(36,3,1,4,'Parse::do_one_block()')
f(37,3,1,4,'Parse::do_call()')
f(38,3,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(39,3,1,4,'ParseGenerator::generate(JVMState*)')
f(40,3,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(41,3,1,4,'Parse::do_all_blocks()')
f(42,3,1,4,'Parse::do_one_block()')
f(43,3,1,4,'Parse::do_call()')
f(44,3,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(45,3,1,4,'ParseGenerator::generate(JVMState*)')
f(46,3,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(47,3,1,4,'Parse::do_all_blocks()')
f(48,3,1,4,'Parse::do_one_block()')
f(49,3,1,4,'Parse::do_call()')
f(50,3,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(51,3,1,4,'ParseGenerator::generate(JVMState*)')
f(52,3,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(53,3,1,4,'Parse::do_all_blocks()')
f(54,3,1,4,'Parse::do_one_block()')
f(55,3,1,4,'Parse::do_call()')
f(56,3,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(57,3,1,4,'ParseGenerator::generate(JVMState*)')
f(58,3,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(59,3,1,4,'Parse::do_all_blocks()')
f(60,3,1,4,'Parse::do_one_block()')
f(61,3,1,4,'Parse::do_call()')
f(62,3,1,4,'ParseGenerator::generate(JVMState*)')
f(63,3,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(64,3,1,4,'Parse::do_all_blocks()')
f(65,3,1,4,'Parse::do_one_block()')
f(66,3,1,4,'Parse::do_call()')
f(67,3,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(68,3,1,4,'ParseGenerator::generate(JVMState*)')
f(69,3,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(70,3,1,4,'Parse::do_all_blocks()')
f(71,3,1,4,'Parse::do_one_block()')
f(72,3,1,4,'Parse::do_field_access(bool, bool)')
f(73,3,1,4,'Parse::do_put_xxx(Node*, ciField*, bool)')
f(74,3,1,4,'GraphKit::access_store_at(Node*, Node*, TypePtr const*, Node*, Type const*, BasicType, unsigned long)')
f(75,3,1,4,'BarrierSetC2::store_at(C2Access&, C2AccessValue&) const')
f(76,3,1,4,'ModRefBarrierSetC2::store_at_resolved(C2Access&, C2AccessValue&) const')
f(77,3,1,4,'G1BarrierSetC2::post_barrier(GraphKit*, Node*, Node*, Node*, Node*, unsigned int, Node*, BasicType, bool) const')
f(78,3,1,4,'G1BarrierSetC2::g1_mark_card(GraphKit*, IdealKit&, Node*, Node*, unsigned int, Node*, Node*, Node*, TypeFunc const*) const')
f(79,3,1,4,'IdealKit::if_then(Node*, BoolTest::mask, Node*, float, float, bool)')
f(80,3,1,4,'IdealKit::copy_cvstate()')
f(81,3,1,4,'MergeMemNode::make(Node*)')
f(82,3,1,4,'MergeMemNode::MergeMemNode(Node*)')
f(1,4,13,3,'[not_walkable_Java]')
f(2,4,11,1,'I2C/C2I adapters')
f(3,4,1,4,'CompiledMethod::is_compiled() const')
f(3,5,1,4,'Method::from_compiled_entry_no_trampoline() const')
f(3,6,9,4,'SharedRuntime::fixup_callers_callsite(Method*, unsigned char*)')
f(4,6,3,4,'CodeCache::find_blob(void*)')
f(4,9,4,4,'CodeHeap::find_blob_unsafe(void*) const')
f(4,13,2,4,'nmethod::is_zombie() const')
f(2,15,2,3,'Interpreter')
f(1,17,48,3,'[unknown_Java]')
f(2,17,46,1,'I2C/C2I adapters')
f(2,63,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(2,64,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(1,65,229,1,'java/lang/Thread.run')
f(2,65,229,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,65,229,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,65,4,1,'java/util/concurrent/FutureTask.run')
f(5,65,4,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,65,4,1,'java/util/concurrent/FutureTask.run')
f(7,65,4,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,65,4,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,65,4,1,'java/lang/reflect/Method.invoke')
f(10,65,4,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,65,4,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,65,4,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,65,4,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,65,4,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,65,4,1,'kyo/bench/Bench.forkKyo')
f(16,65,4,1,'kyo/bench/Bench.runLoop$2')
f(17,65,2,1,'kyo/bench/Bench$$anon$1.apply')
f(18,65,2,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,65,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,65,2,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(21,65,2,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,65,2,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,65,2,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,65,2,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,65,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,65,2,1,'jdk/internal/misc/Unsafe.unpark')
f(27,65,2,3,'pthread_cond_signal')
f(28,65,2,5,'entry_SYSCALL_64_after_hwframe')
f(29,65,2,5,'do_syscall_64')
f(30,65,2,5,'__x64_sys_futex')
f(31,65,2,5,'do_futex')
f(32,65,2,5,'futex_wake')
f(33,65,2,5,'wake_up_q')
f(34,65,2,5,'_raw_spin_unlock_irqrestore')
f(17,67,2,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,67,2,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,67,2,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,67,2,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,67,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,67,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,67,2,1,'java/util/concurrent/locks/LockSupport.park')
f(24,67,2,1,'jdk/internal/misc/Unsafe.park')
f(25,67,1,3,'Unsafe_Park')
f(25,68,1,3,'[unknown]')
f(26,68,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,68,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,68,1,5,'do_syscall_64')
f(29,68,1,5,'__x64_sys_futex')
f(30,68,1,5,'do_futex')
f(31,68,1,5,'futex_wait')
f(32,68,1,5,'futex_wait_queue_me')
f(33,68,1,5,'schedule')
f(34,68,1,5,'__schedule')
f(35,68,1,5,'finish_task_switch.isra.0')
f(4,69,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,69,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,69,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,69,1,2,'kyo/concurrent/scheduler/MovingStdDev.observe',1,0,0)
f(4,70,224,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,70,224,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,70,224,1,'kyo/concurrent/scheduler/Worker.runWorker',0,2,0)
f(7,79,1,3,'g1_post_barrier_slow')
f(7,80,3,1,'kyo/concurrent/scheduler/IOTask.reenqueue')
f(8,80,3,1,'kyo/concurrent/scheduler/IOTask.curr')
f(7,83,142,1,'kyo/concurrent/scheduler/IOTask.run',1,0,0)
f(8,83,1,2,'kyo/concurrent/scheduler/IOTask.curr_$eq',1,0,0)
f(8,84,141,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,86,63,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,89,30,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,91,28,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',1,0,0)
f(12,91,27,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,98,13,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply',13,0,0)
f(14,98,13,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',13,0,0)
f(15,104,2,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',2,0,0)
f(16,104,2,2,'kyo/ios$KyoIO.<init>',2,0,0)
f(15,106,5,2,'kyo/concurrent/scheduler/IOTask.<init>',5,0,0)
f(16,108,3,2,'kyo/concurrent/scheduler/IOPromise.<init>',3,0,0)
f(17,108,3,2,'kyo/concurrent/scheduler/IOPromise.<init>',3,0,0)
f(18,109,2,2,'java/util/concurrent/atomic/AtomicReference.<init>',2,0,0)
f(13,111,7,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',7,0,0)
f(14,114,4,2,'kyo/core$internal$KyoCont.<init>',4,0,0)
f(12,118,1,2,'kyo/locals$Locals$$anon$3.apply',1,0,0)
f(10,119,10,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',8,0,0)
f(11,122,7,2,'kyo/bench/InterruptBench$$anon$3.<init>',5,0,0)
f(12,122,7,2,'kyo/core$internal$KyoCont.<init>',5,0,0)
f(13,126,1,6,'kyo/core$internal$KyoCont.value',0,1,0)
f(13,127,1,6,'kyo/core$internal$KyoRoot.value',0,1,0)
f(13,128,1,3,'vtable stub')
f(10,129,9,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,130,1,2,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1',1,0,0)
f(12,130,1,2,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$61.0x0000000800d494e8.apply',1,0,0)
f(13,130,1,2,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$_$$anonfun$adapted$1',1,0,0)
f(14,130,1,2,'kyo/concurrent/fibers$.$anonfun$3',1,0,0)
f(15,130,1,2,'kyo/concurrent/fibers$Fiber.join',1,0,0)
f(16,130,1,2,'kyo/concurrent/fibers$Fiber.state',1,0,0)
f(11,131,7,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',7,0,0)
f(12,131,7,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',7,0,0)
f(13,131,7,2,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10',7,0,0)
f(14,131,7,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',7,0,0)
f(15,131,7,2,'kyo/concurrent/scheduler/IOPromise.complete',7,0,0)
f(16,131,5,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',5,0,0)
f(17,131,5,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',5,0,0)
f(18,131,5,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',5,0,0)
f(16,136,2,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',2,0,0)
f(17,136,2,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',2,0,0)
f(10,138,10,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,138,10,2,'kyo/concurrent/fibers$Fiber$$anon$11.apply',10,0,0)
f(12,140,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(13,140,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',2,0,0)
f(14,140,2,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',2,0,0)
f(12,142,3,2,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1',3,0,0)
f(13,144,1,2,'kyo/concurrent/fibers$$anon$12.<init>',1,0,0)
f(12,145,2,2,'kyo/concurrent/scheduler/IOPromise.<init>',2,0,0)
f(13,145,2,2,'kyo/concurrent/scheduler/IOPromise.<init>',2,0,0)
f(14,145,2,2,'java/util/concurrent/atomic/AtomicReference.<init>',2,0,0)
f(12,147,1,2,'kyo/concurrent/scheduler/IOTask.ensure',1,0,0)
f(13,147,1,2,'kyo/concurrent/scheduler/IOTask.ensures_$eq',1,0,0)
f(10,148,1,3,'vtable stub')
f(9,149,48,1,'kyo/concurrent/scheduler/IOTask.finalize$1')
f(10,149,48,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$60.0x0000000800d48fd8.apply$mcV$sp')
f(11,149,48,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1')
f(12,149,48,1,'kyo/concurrent/fibers$.loop$9')
f(13,149,48,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(14,149,48,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(15,149,48,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,149,48,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,149,48,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,149,48,1,'scala/runtime/function/JProcedure1.apply')
f(19,150,47,1,'scala/runtime/function/JProcedure1.apply')
f(20,150,47,2,'kyo/concurrent/scheduler/IOTask$$Lambda$66.0x0000000800d4b248.applyVoid',26,0,0)
f(21,150,47,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',26,0,0)
f(22,150,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(23,150,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',2,0,0)
f(24,150,2,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',2,0,0)
f(22,152,1,2,'kyo/concurrent/scheduler/IOTask.<init>',1,0,0)
f(23,152,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(22,153,42,2,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1',21,0,0)
f(23,153,42,2,'kyo/concurrent/scheduler/IOTask$$Lambda$67.0x0000000800d4b650.apply',21,0,0)
f(24,153,42,2,'kyo/concurrent/scheduler/IOTask.$anonfun$1',21,0,0)
f(25,153,42,2,'kyo/bench/InterruptBench$$anon$3.apply',21,0,0)
f(26,153,37,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',17,0,0)
f(27,153,20,1,'kyo/bench/InterruptBench$$Lambda$58.0x0000000800d44a30.apply')
f(28,153,20,1,'kyo/bench/InterruptBench.$anonfun$adapted$1')
f(29,153,20,1,'kyo/bench/InterruptBench.$anonfun$3')
f(30,153,20,1,'kyo/bench/InterruptBench.iterate$2')
f(31,153,6,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1',6,0,0)
f(31,159,10,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',7,0,0)
f(32,162,7,2,'kyo/bench/InterruptBench$$anon$3.<init>',4,0,0)
f(33,162,7,2,'kyo/core$internal$KyoCont.<init>',4,0,0)
f(34,166,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(34,167,2,6,'kyo/core$internal$KyoCont.value',0,2,0)
f(31,169,4,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(32,169,4,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(33,170,3,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply',3,0,0)
f(34,170,3,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',3,0,0)
f(35,171,2,2,'kyo/concurrent/scheduler/IOTask.<init>',2,0,0)
f(36,171,2,2,'kyo/concurrent/scheduler/IOPromise.<init>',2,0,0)
f(37,171,2,2,'kyo/concurrent/scheduler/IOPromise.<init>',2,0,0)
f(38,171,2,2,'java/util/concurrent/atomic/AtomicReference.<init>',2,0,0)
f(27,173,17,2,'kyo/bench/InterruptBench$$anon$3.<init>',17,0,0)
f(28,176,14,2,'kyo/core$internal$KyoCont.<init>',14,0,0)
f(26,190,4,2,'kyo/concurrent/scheduler/IOTask.apply',4,0,0)
f(26,194,1,1,'kyo/core$internal$KyoRoot.apply')
f(22,195,2,2,'kyo/concurrent/scheduler/Scheduler$.schedule',2,0,0)
f(23,195,2,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',2,0,0)
f(24,195,2,2,'kyo/concurrent/scheduler/Queue.offer',2,0,0)
f(25,195,2,2,'kyo/concurrent/scheduler/Queue.tryModify',2,0,0)
f(9,197,2,2,'kyo/concurrent/scheduler/IOTask.loop$2',2,0,0)
f(10,197,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(11,197,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(12,197,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(10,198,1,2,'kyo/concurrent/scheduler/IOPromise$Pending.add',1,0,0)
f(11,198,1,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.<init>',1,0,0)
f(9,199,11,2,'kyo/concurrent/scheduler/IOTask.loop$5',11,0,0)
f(10,199,11,2,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$2',11,0,0)
f(11,199,11,2,'kyo/concurrent/scheduler/IOTask$$Lambda$63.0x0000000800d4a6d8.apply',11,0,0)
f(12,199,11,2,'kyo/concurrent/scheduler/IOTask.$anonfun$2',11,0,0)
f(9,210,11,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,210,11,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',7,0,0)
f(11,210,11,2,'kyo/concurrent/scheduler/IOPromise.complete',7,0,0)
f(12,210,11,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',7,0,0)
f(13,210,11,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',7,0,0)
f(14,211,10,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run',6,0,0)
f(15,212,5,3,'itable stub')
f(15,217,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,217,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,217,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,217,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,217,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,217,2,1,'jdk/internal/misc/Unsafe.unpark')
f(21,217,2,3,'pthread_cond_signal')
f(22,217,2,5,'entry_SYSCALL_64_after_hwframe')
f(23,217,2,5,'do_syscall_64')
f(24,217,2,5,'__x64_sys_futex')
f(25,217,2,5,'do_futex')
f(26,217,2,5,'futex_wake')
f(27,217,2,5,'wake_up_q')
f(28,217,2,5,'_raw_spin_unlock_irqrestore')
f(15,219,2,1,'scala/runtime/function/JProcedure1.apply')
f(16,219,2,1,'scala/runtime/function/JProcedure1.apply')
f(17,219,2,2,'kyo/concurrent/scheduler/IOTask$$Lambda$66.0x0000000800d4b248.applyVoid',2,0,0)
f(18,219,2,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',2,0,0)
f(19,219,1,2,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1',1,0,0)
f(20,219,1,2,'kyo/concurrent/scheduler/IOTask$$Lambda$67.0x0000000800d4b650.apply',1,0,0)
f(21,219,1,2,'kyo/concurrent/scheduler/IOTask.$anonfun$1',1,0,0)
f(22,219,1,2,'kyo/bench/InterruptBench$$anon$3.apply',1,0,0)
f(23,219,1,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',1,0,0)
f(19,220,1,2,'kyo/concurrent/scheduler/Scheduler$.schedule',1,0,0)
f(20,220,1,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',1,0,0)
f(21,220,1,2,'kyo/concurrent/scheduler/Queue.offer',1,0,0)
f(22,220,1,2,'kyo/concurrent/scheduler/Queue.tryModify',1,0,0)
f(23,220,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(9,221,2,6,'kyo/core$internal$KyoCont.effect',0,2,0)
f(9,223,1,1,'scala/runtime/function/JProcedure1.apply')
f(10,223,1,1,'kyo/ios$KyoIO.value')
f(9,224,1,3,'vtable stub')
f(7,225,64,1,'kyo/concurrent/scheduler/Queue.poll',2,0,0)
f(8,226,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(9,226,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(10,226,2,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(8,228,61,0,'kyo/concurrent/scheduler/Queue.modify',0,0,41)
f(9,263,5,1,'I2C/C2I adapters')
f(9,268,1,4,'InterpreterRuntime::frequency_counter_overflow(JavaThread*, unsigned char*)')
f(10,268,1,4,'InterpreterRuntime::frequency_counter_overflow_inner(JavaThread*, unsigned char*)')
f(11,268,1,4,'CompilationPolicy::event(methodHandle const&, methodHandle const&, int, int, CompLevel, CompiledMethod*, JavaThread*)')
f(12,268,1,4,'CompilationPolicy::compile(methodHandle const&, int, CompLevel, JavaThread*)')
f(13,268,1,4,'CompileBroker::compile_method(methodHandle const&, int, int, methodHandle const&, int, CompileTask::CompileReason, JavaThread*)')
f(14,268,1,4,'DirectiveSet::compilecommand_compatibility_init(methodHandle const&) [clone .part.0]')
f(15,268,1,4,'bool CompilerOracle::has_option_value<bool>(methodHandle const&, CompileCommand, bool&)')
f(9,269,8,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',8,0,0)
f(10,272,5,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',5,0,0)
f(11,274,3,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',3,0,0)
f(12,275,2,2,'java/util/Objects.requireNonNull',2,0,0)
f(9,277,4,1,'java/util/concurrent/atomic/AtomicBoolean.set')
f(9,281,4,1,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47148.apply')
f(10,281,4,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',4,0,0)
f(11,281,4,2,'scala/collection/mutable/PriorityQueue.dequeue',4,0,0)
f(9,285,4,2,'kyo/concurrent/scheduler/Queue$$Lambda$59.0x0000000800d48d18.apply',4,0,0)
f(10,285,4,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',4,0,0)
f(11,285,4,2,'scala/collection/mutable/PriorityQueue.dequeue',4,0,0)
f(12,288,1,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',1,0,0)
f(7,289,2,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,289,2,1,'kyo/concurrent/scheduler/Worker.park')
f(9,289,2,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,289,2,1,'jdk/internal/misc/Unsafe.park')
f(11,289,2,3,'[unknown]')
f(12,289,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,289,2,5,'entry_SYSCALL_64_after_hwframe')
f(14,289,2,5,'do_syscall_64')
f(15,289,2,5,'__x64_sys_futex')
f(16,289,2,5,'do_futex')
f(17,289,2,5,'futex_wait')
f(18,289,2,5,'futex_wait_queue_me')
f(19,289,1,5,'hrtimer_sleeper_start_expires')
f(20,289,1,5,'_raw_spin_unlock_irqrestore')
f(19,290,1,5,'schedule')
f(20,290,1,5,'__schedule')
f(21,290,1,5,'finish_task_switch.isra.0')
f(7,291,1,2,'kyo/concurrent/scheduler/Scheduler$.steal',1,0,0)
f(8,291,1,2,'kyo/concurrent/scheduler/Scheduler$.randomWorker',1,0,0)
f(7,292,2,2,'kyo/concurrent/scheduler/Worker.stop$1',2,0,0)
f(1,294,1,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(2,294,1,4,'InterpreterRuntime::frequency_counter_overflow(JavaThread*, unsigned char*)')
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,10851,3,'all')
f(1,0,10847,1,'java/lang/Thread.run')
f(2,0,10847,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,10847,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,1948,1,'java/util/concurrent/FutureTask.run')
f(5,0,1948,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,1948,1,'java/util/concurrent/FutureTask.run')
f(7,0,1948,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,1948,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1948,1,'java/lang/reflect/Method.invoke')
f(10,0,1948,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,1948,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,1948,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,1948,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,1948,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,1948,1,'kyo/bench/Bench.syncKyo')
f(16,0,1306,1,'kyo/bench/Bench.runLoop$1')
f(17,0,1081,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,1081,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,1081,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,1081,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,41,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,41,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,21,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,21,20,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,21,20,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,41,313,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,354,727,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,354,727,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,354,727,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,1081,225,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,1081,181,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,1081,181,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,1081,181,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,1081,122,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,1081,122,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,1081,122,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(24,1081,122,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,1081,19,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(25,1100,53,2,'kyo.concurrent.scheduler.IOTask')
f(25,1153,50,1,'kyo/concurrent/fibers$Fiber$.promise')
f(26,1153,50,2,'kyo.concurrent.fibers$Fiber')
f(21,1203,59,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,1203,59,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c82da8.apply')
f(23,1203,59,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,1203,59,1,'kyo/concurrent/fibers$Fiber.join')
f(25,1203,59,1,'kyo/concurrent/fibers$Fibers.get')
f(26,1203,59,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,1203,59,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,1262,44,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,1262,44,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c835a8.apply')
f(20,1262,44,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,1262,44,1,'kyo/concurrent/fibers$Fiber.block')
f(22,1262,44,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,1306,642,1,'kyo/bench/InterruptBench.kyoBench')
f(17,1306,53,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1306,53,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1306,53,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1306,53,2,'kyo.bench.InterruptBench$$Lambda$37+0x0000000800c3e9f8')
f(17,1359,335,1,'kyo/concurrent/fibers$Fibers.block')
f(18,1359,15,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,1359,15,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,1359,15,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,1359,15,2,'kyo.concurrent.fibers$Fibers$$Lambda$40+0x0000000800c835a8')
f(18,1374,40,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,1374,40,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,1414,239,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,1414,239,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,1653,41,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,1653,41,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,1694,254,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,1694,39,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,1694,39,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,1694,39,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,1694,39,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c82da8')
f(18,1733,158,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,1733,53,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,1733,53,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,1733,53,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,1733,53,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(19,1786,75,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,1786,75,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(19,1861,30,1,'kyo/locals$Locals$.save')
f(20,1861,30,2,'kyo.locals$Locals$$anon$3')
f(18,1891,57,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,1891,57,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(4,1948,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec28.run')
f(5,1948,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,1948,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,1948,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,1948,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,1948,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,1948,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,1948,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,1959,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1ee50.run')
f(5,1959,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,1959,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,1959,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,1959,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,1959,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,1959,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$69+0x0000000800d4bca0')
f(4,1970,8877,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23cb0.run')
f(5,1970,8877,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,1970,8877,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,1970,8463,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,1970,8463,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,1970,4336,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,1970,1184,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,1970,208,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(12,1970,208,1,'kyo/bench/InterruptBench$$Lambda$58.0x0000000800d44800.apply')
f(13,1970,208,1,'kyo/bench/InterruptBench.$anonfun$2')
f(14,1970,208,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(15,1970,208,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(16,1970,208,2,'kyo.concurrent.fibers$Fiber$$anon$11')
f(11,2178,976,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,2178,976,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,2178,976,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(14,2178,976,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,2178,219,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,2397,530,2,'kyo.concurrent.scheduler.IOTask')
f(15,2927,227,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,2927,227,2,'kyo.concurrent.fibers$Fiber')
f(10,3154,1205,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(11,3154,1205,2,'kyo.bench.InterruptBench$$anon$3')
f(10,4359,675,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,4359,476,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(12,4359,476,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$62.0x0000000800d49f40.apply')
f(13,4359,476,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$_$$anonfun$adapted$1')
f(14,4359,476,1,'kyo/concurrent/fibers$.$anonfun$3')
f(15,4359,244,2,'kyo.concurrent.fibers$Fiber')
f(15,4603,232,1,'kyo/concurrent/fibers$Fiber.join')
f(16,4603,232,1,'kyo/concurrent/fibers$Fibers.get')
f(17,4603,232,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(18,4603,232,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(11,4835,199,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(12,4835,199,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(13,4835,199,1,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10')
f(14,4835,199,2,'kyo.concurrent.fibers$Fiber$$anon$13$$anon$14')
f(10,5034,1272,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,5034,1272,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(12,5034,341,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(13,5034,341,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(14,5034,341,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(15,5034,184,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$61+0x0000000800d49a30')
f(15,5218,157,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$62+0x0000000800d49f40')
f(12,5375,299,2,'kyo.concurrent.scheduler.IOPromise')
f(12,5674,346,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(13,5674,346,2,'kyo.concurrent.fibers$$anon$12')
f(12,6020,286,1,'kyo/concurrent/fibers$Fiber.interrupt')
f(13,6020,286,2,'kyo.concurrent.fibers$Fiber$$anon$13')
f(9,6306,3136,1,'kyo/concurrent/scheduler/IOTask.finalize$1')
f(10,6306,3136,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$61.0x0000000800d49a30.apply$mcV$sp')
f(11,6306,3136,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1')
f(12,6306,3136,1,'kyo/concurrent/fibers$.loop$9')
f(13,6306,3136,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(14,6306,3136,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(15,6306,3136,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,6306,3136,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,6306,3136,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,6306,3136,1,'scala/runtime/function/JProcedure1.apply')
f(19,6306,3136,1,'scala/runtime/function/JProcedure1.apply')
f(20,6306,3136,1,'kyo/concurrent/scheduler/IOTask$$Lambda$67.0x0000000800d4e000.applyVoid')
f(21,6306,3136,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(22,6306,542,2,'kyo.concurrent.scheduler.IOTask')
f(22,6848,516,1,'kyo/concurrent/scheduler/IOPromise.become')
f(23,6848,516,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(24,6848,176,1,'kyo/concurrent/scheduler/IOPromise$Linked$.apply')
f(25,6848,176,2,'kyo.concurrent.scheduler.IOPromise$Linked')
f(24,7024,340,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(25,7024,340,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(26,7024,340,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(27,7024,340,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(22,7364,2078,1,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1')
f(23,7364,2078,1,'kyo/concurrent/scheduler/IOTask$$Lambda$68.0x0000000800d4e408.apply')
f(24,7364,2078,1,'kyo/concurrent/scheduler/IOTask.$anonfun$1')
f(25,7364,2078,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(26,7364,2078,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(27,7364,2078,1,'kyo/bench/InterruptBench$$Lambda$59.0x0000000800d48230.apply')
f(28,7364,2078,1,'kyo/bench/InterruptBench.$anonfun$adapted$1')
f(29,7364,2078,1,'kyo/bench/InterruptBench.$anonfun$3')
f(30,7364,2078,1,'kyo/bench/InterruptBench.iterate$2')
f(31,7364,440,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(32,7364,206,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(33,7364,206,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,7364,206,2,'kyo.bench.InterruptBench$$Lambda$57+0x0000000800d45690')
f(32,7570,234,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(33,7570,234,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,7570,234,2,'kyo.bench.InterruptBench$$Lambda$59+0x0000000800d48230')
f(31,7804,434,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(32,7804,434,2,'kyo.bench.InterruptBench$$anon$2')
f(31,8238,413,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(32,8238,413,2,'kyo.bench.InterruptBench$$anon$3')
f(31,8651,791,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(32,8651,207,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(33,8651,207,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(34,8651,207,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(35,8651,207,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(32,8858,378,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(33,8858,378,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(32,9236,206,1,'kyo/locals$Locals$.save')
f(33,9236,206,2,'kyo.locals$Locals$$anon$3')
f(9,9442,489,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,9442,199,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,9442,199,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,9442,199,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,9442,199,2,'kyo.concurrent.scheduler.IOTask$$Lambda$63+0x0000000800d4ad28')
f(10,9641,290,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,9641,290,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(9,9931,502,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,9931,258,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,9931,258,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,9931,258,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,9931,258,2,'kyo.concurrent.scheduler.IOTask$$Lambda$67+0x0000000800d4e000')
f(10,10189,244,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,10189,244,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,10433,414,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,10433,414,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,10433,414,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,10433,414,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,10433,414,2,'kyo.concurrent.scheduler.Queue$$Lambda$56+0x0000000800d47a70')
f(1,10847,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,10847,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,10847,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,10847,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,10847,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,10847,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,10847,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,10847,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,10847,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,10847,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,10847,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,10847,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,10847,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,10850,1,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,10850,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,10850,1,1,'java/lang/ClassLoader.loadClass')
f(10,10850,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,10850,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,10850,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,10850,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,10850,1,1,'jdk/internal/loader/URLClassPath.getResource')
f(15,10850,1,1,'jdk/internal/loader/URLClassPath$JarLoader.getResource')
f(16,10850,1,1,'java/util/jar/JarFile.getJarEntry')
f(17,10850,1,1,'java/util/jar/JarFile.getEntry')
f(18,10850,1,1,'java/util/zip/ZipFile.getEntry')
f(19,10850,1,1,'java/util/zip/ZipFile$Source.getEntryPos')
f(20,10850,1,1,'java/util/zip/ZipCoder$UTF8ZipCoder.toString')
f(21,10850,1,1,'java/lang/System$2.newStringUTF8NoRepl')
f(22,10850,1,1,'java/lang/String.newStringUTF8NoRepl')
f(23,10850,1,1,'java/util/Arrays.copyOfRange')
f(24,10850,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: 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,289,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,'PhaseOutput::fill_buffer(CodeBuffer*, 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,'StoreNode::Identity(PhaseGVN*)')
f(14,1,1,4,'MemNode::find_previous_store(PhaseTransform*)')
f(1,2,3,3,'[unknown_Java]')
f(2,2,1,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(2,3,1,1,'kyo/concurrent/fibers$$anon$12.apply')
f(2,4,1,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(1,5,284,1,'java/lang/Thread.run')
f(2,5,284,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,5,284,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,5,6,1,'java/util/concurrent/FutureTask.run')
f(5,5,6,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,5,6,1,'java/util/concurrent/FutureTask.run')
f(7,5,6,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,5,6,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,5,6,1,'java/lang/reflect/Method.invoke')
f(10,5,6,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,5,6,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,5,6,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,5,6,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,5,6,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,5,6,1,'kyo/bench/Bench.syncKyo')
f(16,5,6,1,'kyo/bench/Bench.runLoop$1')
f(17,5,3,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,5,3,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,5,3,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,5,3,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,5,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,5,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,5,3,1,'java/util/concurrent/locks/LockSupport.park')
f(24,5,3,1,'jdk/internal/misc/Unsafe.park')
f(25,5,3,3,'[unknown]')
f(26,5,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,5,2,5,'entry_SYSCALL_64_after_hwframe')
f(28,5,2,5,'do_syscall_64')
f(29,5,1,5,'__x64_sys_futex')
f(30,5,1,5,'do_futex')
f(31,5,1,5,'futex_wait')
f(32,5,1,5,'futex_wait_queue_me')
f(33,5,1,5,'schedule')
f(34,5,1,5,'__schedule')
f(35,5,1,5,'finish_task_switch.isra.0')
f(29,6,1,5,'syscall_exit_to_user_mode')
f(30,6,1,5,'exit_to_user_mode_prepare')
f(31,6,1,5,'exit_to_user_mode_loop')
f(32,6,1,5,'mem_cgroup_handle_over_high')
f(26,7,1,3,'pthread_cond_wait')
f(17,8,3,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,8,3,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,8,3,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,8,3,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,8,3,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,8,3,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,8,3,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(24,8,3,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,8,3,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,8,3,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,8,3,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(28,8,3,1,'java/util/concurrent/locks/LockSupport.unpark')
f(29,8,3,1,'jdk/internal/misc/Unsafe.unpark')
f(30,8,3,3,'pthread_cond_signal')
f(31,8,3,5,'entry_SYSCALL_64_after_hwframe')
f(32,8,3,5,'do_syscall_64')
f(33,8,3,5,'__x64_sys_futex')
f(34,8,3,5,'do_futex')
f(35,8,3,5,'futex_wake')
f(36,8,3,5,'wake_up_q')
f(37,8,3,5,'_raw_spin_unlock_irqrestore')
f(4,11,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec28.run')
f(5,11,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,11,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,11,1,1,'java/lang/Thread.sleep')
f(8,11,1,3,'JVM_Sleep')
f(9,11,1,4,'JavaThread::sleep(long)')
f(4,12,277,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23cb0.run')
f(5,12,277,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,12,277,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,26,2,2,'kyo/concurrent/scheduler/IOTask.reenqueue',2,0,0)
f(8,26,2,2,'scala/runtime/BoxesRunTime.equals',2,0,0)
f(7,28,206,1,'kyo/concurrent/scheduler/IOTask.run',1,0,0)
f(8,29,205,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,33,85,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,43,21,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,43,1,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1',1,0,0)
f(11,44,20,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,44,20,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,45,9,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply',8,0,0)
f(14,46,8,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',7,0,0)
f(15,50,1,4,'AccessInternal::PostRuntimeDispatch<G1BarrierSet::AccessBarrier<598116ul, G1BarrierSet>, (AccessInternal::BarrierType)2, 598116ul>::oop_access_barrier(void*)')
f(15,51,3,2,'kyo/concurrent/scheduler/IOTask.<init>',3,0,0)
f(16,53,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(17,53,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(18,53,1,2,'java/util/concurrent/atomic/AtomicReference.<init>',1,0,0)
f(13,54,10,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',10,0,0)
f(14,62,2,2,'kyo/core$internal$KyoCont.<init>',2,0,0)
f(10,64,21,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',9,0,0)
f(11,67,18,2,'kyo/bench/InterruptBench$$anon$3.<init>',6,0,0)
f(12,67,18,2,'kyo/core$internal$KyoCont.<init>',6,0,0)
f(13,69,4,6,'kyo/core$internal$KyoCont.effect',0,4,0)
f(13,73,2,6,'kyo/core$internal$KyoCont.value',0,2,0)
f(13,75,2,6,'kyo/core$internal$KyoRoot.effect',0,2,0)
f(13,77,1,6,'kyo/core$internal$KyoRoot.value',0,1,0)
f(13,78,3,1,'kyo/ios$KyoIO.value')
f(13,81,4,3,'vtable stub')
f(10,85,8,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,85,1,2,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1',1,0,0)
f(12,85,1,2,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$62.0x0000000800d4a140.apply',1,0,0)
f(13,85,1,2,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$_$$anonfun$adapted$1',1,0,0)
f(14,85,1,2,'kyo/concurrent/fibers$.$anonfun$3',1,0,0)
f(15,85,1,2,'kyo/concurrent/fibers$Fiber.join',1,0,0)
f(16,85,1,2,'kyo/concurrent/fibers$Fibers.get',1,0,0)
f(17,85,1,2,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1',1,0,0)
f(11,86,7,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',7,0,0)
f(12,86,7,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',7,0,0)
f(13,86,7,2,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10',7,0,0)
f(14,86,7,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',7,0,0)
f(15,86,7,2,'kyo/concurrent/scheduler/IOPromise.complete',7,0,0)
f(16,86,6,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',6,0,0)
f(17,86,6,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',6,0,0)
f(18,86,6,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',6,0,0)
f(16,92,1,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',1,0,0)
f(17,92,1,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',1,0,0)
f(10,93,24,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,96,21,2,'kyo/concurrent/fibers$Fiber$$anon$11.apply',20,0,0)
f(12,101,2,2,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1',2,0,0)
f(13,102,1,2,'kyo/concurrent/fibers$$anon$12.<init>',1,0,0)
f(12,103,1,2,'kyo/concurrent/fibers$Fiber.interrupt',1,0,0)
f(12,104,7,2,'kyo/concurrent/scheduler/IOPromise.<init>',7,0,0)
f(13,104,7,2,'kyo/concurrent/scheduler/IOPromise.<init>',7,0,0)
f(14,104,7,2,'java/util/concurrent/atomic/AtomicReference.<init>',7,0,0)
f(12,111,6,2,'kyo/concurrent/scheduler/IOTask.ensure',5,0,0)
f(13,111,2,2,'kyo/concurrent/scheduler/IOTask.curr',2,0,0)
f(13,113,2,2,'kyo/concurrent/scheduler/IOTask.ensures',2,0,0)
f(13,115,1,2,'kyo/concurrent/scheduler/IOTask.ensures_$eq',1,0,0)
f(13,116,1,1,'scala/runtime/BoxesRunTime.equals')
f(14,116,1,1,'scala/runtime/BoxesRunTime.equals2')
f(15,116,1,1,'java/lang/Object.equals')
f(10,117,1,3,'vtable stub')
f(9,118,1,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',1,0,0)
f(9,119,76,1,'kyo/concurrent/scheduler/IOTask.finalize$1',21,0,0)
f(10,119,75,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$61.0x0000000800d49c30.apply$mcV$sp',20,0,0)
f(11,119,75,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1',20,0,0)
f(12,119,75,1,'kyo/concurrent/fibers$.loop$9',20,0,0)
f(13,119,57,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',2,0,0)
f(14,119,57,1,'kyo/concurrent/scheduler/IOPromise.complete',2,0,0)
f(15,120,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(16,120,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(17,120,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(15,121,55,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,121,55,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,121,55,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,121,55,1,'scala/runtime/function/JProcedure1.apply')
f(19,121,55,1,'scala/runtime/function/JProcedure1.apply')
f(20,122,54,1,'kyo/concurrent/scheduler/IOTask$$Lambda$69.0x0000000800d4e580.applyVoid')
f(21,122,54,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',27,0,0)
f(22,124,50,2,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1',23,0,0)
f(23,128,46,2,'kyo/concurrent/scheduler/IOTask$$Lambda$70.0x0000000800d4e988.apply',19,0,0)
f(24,129,45,2,'kyo/concurrent/scheduler/IOTask.$anonfun$1',18,0,0)
f(25,130,44,2,'kyo/bench/InterruptBench$$anon$3.apply',17,0,0)
f(26,135,39,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',12,0,0)
f(27,136,30,1,'kyo/bench/InterruptBench$$Lambda$59.0x0000000800d488b0.apply',4,0,0)
f(28,140,26,1,'kyo/bench/InterruptBench.$anonfun$adapted$1')
f(29,140,26,1,'kyo/bench/InterruptBench.$anonfun$3')
f(30,140,26,1,'kyo/bench/InterruptBench.iterate$2')
f(31,140,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(32,140,2,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial',2,0,0)
f(33,140,2,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',2,0,0)
f(31,142,7,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1',7,0,0)
f(32,148,1,2,'kyo/bench/InterruptBench$$anon$2.<init>',1,0,0)
f(31,149,14,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',13,0,0)
f(32,152,11,2,'kyo/bench/InterruptBench$$anon$3.<init>',10,0,0)
f(33,153,10,2,'kyo/core$internal$KyoCont.<init>',9,0,0)
f(34,162,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(31,163,3,2,'kyo/concurrent/fibers$Fibers.forkFiber',1,0,0)
f(32,163,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(33,163,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(34,163,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(32,164,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(27,166,8,2,'kyo/bench/InterruptBench$$anon$3.<init>',7,0,0)
f(28,166,8,2,'kyo/core$internal$KyoCont.<init>',7,0,0)
f(29,173,1,1,'kyo/core$internal$Kyo.<init>')
f(30,173,1,1,'java/lang/Object.<init>')
f(31,173,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(32,173,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(33,173,1,4,'MemAllocator::allocate() const')
f(34,173,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(35,173,1,4,'ThreadLocalAllocBuffer::fill(HeapWordImpl**, HeapWordImpl**, unsigned long)')
f(22,174,2,2,'kyo/concurrent/scheduler/Scheduler$.schedule',2,0,0)
f(23,174,2,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',2,0,0)
f(24,174,2,2,'kyo/concurrent/scheduler/Queue.offer',2,0,0)
f(25,174,2,2,'kyo/concurrent/scheduler/Queue.tryModify',2,0,0)
f(26,175,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(27,175,1,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',1,0,0)
f(28,175,1,2,'java/lang/invoke/VarForm.getMemberName',1,0,0)
f(13,176,18,2,'scala/runtime/BoxesRunTime.boxToBoolean',18,0,0)
f(10,194,1,2,'kyo/concurrent/scheduler/IOTask.ensures_$eq',1,0,0)
f(9,195,4,2,'kyo/concurrent/scheduler/IOTask.loop$2',4,0,0)
f(10,195,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(11,195,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',2,0,0)
f(12,195,2,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',2,0,0)
f(10,197,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(11,197,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(12,197,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(10,198,1,2,'kyo/concurrent/scheduler/IOPromise$Pending.add',1,0,0)
f(9,199,11,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,199,9,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',9,0,0)
f(11,201,7,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',7,0,0)
f(10,208,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(11,208,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(12,208,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(10,209,1,2,'kyo/concurrent/scheduler/Scheduler$.schedule',1,0,0)
f(11,209,1,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',1,0,0)
f(12,209,1,2,'kyo/concurrent/scheduler/Queue.offer',1,0,0)
f(13,209,1,2,'kyo/concurrent/scheduler/Queue.tryModify',1,0,0)
f(14,209,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(15,209,1,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',1,0,0)
f(16,209,1,2,'java/lang/invoke/VarHandle.checkExactAccessMode',1,0,0)
f(9,210,18,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,210,18,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',13,0,0)
f(11,210,18,2,'kyo/concurrent/scheduler/IOPromise.complete',13,0,0)
f(12,210,18,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',13,0,0)
f(13,210,18,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',13,0,0)
f(14,213,14,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run',9,0,0)
f(15,214,8,3,'itable stub')
f(15,222,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,222,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,222,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,222,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,222,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,222,2,1,'jdk/internal/misc/Unsafe.unpark')
f(21,222,2,3,'pthread_cond_signal')
f(22,222,2,5,'entry_SYSCALL_64_after_hwframe')
f(23,222,2,5,'do_syscall_64')
f(24,222,2,5,'__x64_sys_futex')
f(25,222,2,5,'do_futex')
f(26,222,2,5,'futex_wake')
f(27,222,2,5,'wake_up_q')
f(28,222,2,5,'_raw_spin_unlock_irqrestore')
f(15,224,3,1,'scala/runtime/function/JProcedure1.apply')
f(14,227,1,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$5.run',1,0,0)
f(9,228,3,6,'kyo/core$internal$KyoCont.effect',0,3,0)
f(9,231,3,3,'vtable stub')
f(7,234,39,1,'kyo/concurrent/scheduler/Queue.poll',2,0,0)
f(8,234,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(9,234,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',2,0,0)
f(8,236,37,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,237,14,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',14,0,0)
f(10,243,8,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',8,0,0)
f(11,245,6,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',6,0,0)
f(12,247,4,2,'java/util/Objects.requireNonNull',4,0,0)
f(9,251,22,2,'kyo/concurrent/scheduler/Queue$$Lambda$60.0x0000000800d49770.apply',22,0,0)
f(10,251,22,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',22,0,0)
f(11,253,20,2,'scala/collection/mutable/PriorityQueue.dequeue',20,0,0)
f(12,265,6,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',6,0,0)
f(12,271,2,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',2,0,0)
f(7,273,2,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,273,2,1,'kyo/concurrent/scheduler/Worker.park')
f(9,273,2,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,273,2,1,'jdk/internal/misc/Unsafe.park')
f(11,273,2,3,'[unknown]')
f(12,273,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,273,2,5,'entry_SYSCALL_64_after_hwframe')
f(14,273,2,5,'do_syscall_64')
f(15,273,2,5,'__x64_sys_futex')
f(16,273,2,5,'do_futex')
f(17,273,2,5,'futex_wait')
f(18,273,1,5,'futex_wait_queue_me')
f(19,273,1,5,'schedule')
f(20,273,1,5,'__schedule')
f(21,273,1,5,'finish_task_switch.isra.0')
f(18,274,1,5,'futex_wait_setup')
f(7,275,10,2,'kyo/concurrent/scheduler/Scheduler$.steal',10,0,0)
f(8,281,4,2,'kyo/concurrent/scheduler/Scheduler$.randomWorker',4,0,0)
f(9,284,1,2,'java/util/concurrent/CopyOnWriteArrayList.size',1,0,0)
f(7,285,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: 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,14406,3,'all')
f(1,0,14401,1,'java/lang/Thread.run')
f(2,0,14401,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,14401,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,3142,1,'java/util/concurrent/FutureTask.run')
f(5,0,3142,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,3142,1,'java/util/concurrent/FutureTask.run')
f(7,0,3142,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,3142,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,3142,1,'java/lang/reflect/Method.invoke')
f(10,0,3142,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,3142,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,3142,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,3142,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,3142,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,3142,1,'kyo/bench/Bench.forkKyo')
f(16,0,211,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,211,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,211,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,75,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,0,75,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3ee58')
f(19,75,136,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3ee58')
f(16,211,255,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,211,255,2,'kyo.bench.Bench$$anon$1')
f(16,466,2036,1,'kyo/bench/Bench.runLoop$2')
f(17,466,879,1,'kyo/bench/Bench$$anon$1.apply')
f(18,466,29,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,466,29,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c83220.apply')
f(20,466,29,1,'kyo/bench/Bench.$anonfun$2')
f(21,466,29,1,'kyo/concurrent/fibers$Fiber.block')
f(22,466,29,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,495,850,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,495,850,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,495,850,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84600.apply')
f(21,495,850,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,495,93,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,588,534,2,'kyo.concurrent.scheduler.IOTask')
f(22,1122,223,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,1122,223,2,'kyo.concurrent.fibers$Fiber')
f(17,1345,1157,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,1345,1157,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,1345,1157,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,1345,1157,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,1345,417,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,1345,417,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,1345,146,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,1491,271,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,1491,271,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,1762,291,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,2053,449,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,2053,449,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,2053,449,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,2502,640,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,2502,295,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,2502,295,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,2502,295,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,2502,295,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84600')
f(17,2797,301,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,2797,301,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,3098,44,1,'kyo/locals$Locals$.save')
f(18,3098,44,2,'kyo.locals$Locals$$anon$3')
f(4,3142,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ee28.run')
f(5,3142,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,3142,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,3142,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,3142,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,3142,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,3142,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,3142,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,3153,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f050.run')
f(5,3153,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,3153,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,3153,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,3153,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,3153,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,3153,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$60+0x0000000800d496f0')
f(4,3164,11237,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fd98.run')
f(5,3164,11237,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,3164,11237,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,3164,11237,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,3164,11237,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,3164,11123,1,'kyo/bench/NarrowBindBench$$anon$2.apply')
f(10,3164,11123,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(11,3164,11123,1,'kyo/bench/NarrowBindBench$$Lambda$57.0x0000000800d44400.apply')
f(12,3164,11123,1,'kyo/bench/NarrowBindBench.$anonfun$adapted$1')
f(13,3164,11123,1,'kyo/bench/NarrowBindBench.$anonfun$1')
f(14,3164,11123,1,'kyo/bench/NarrowBindBench.loop$1')
f(15,3164,2196,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,3164,2196,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,3164,2196,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,3164,2196,2,'kyo.bench.NarrowBindBench$$Lambda$57+0x0000000800d44400')
f(15,5360,3750,2,'kyo.bench.NarrowBindBench$$anon$1')
f(15,9110,5177,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(16,9110,5177,2,'kyo.bench.NarrowBindBench$$anon$2')
f(9,14287,2,1,'kyo/bench/NarrowBindBench$$anon$5.apply')
f(10,14287,2,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$2')
f(11,14287,2,1,'kyo/bench/NarrowBindBench$$Lambda$56.0x0000000800d458c0.apply')
f(12,14287,2,1,'kyo/bench/NarrowBindBench.$anonfun$adapted$2')
f(13,14287,2,1,'kyo/bench/NarrowBindBench.$anonfun$2')
f(14,14287,2,1,'kyo/bench/NarrowBindBench.loop$1')
f(15,14287,1,2,'kyo.bench.NarrowBindBench$$anon$1')
f(15,14288,1,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(16,14288,1,2,'kyo.bench.NarrowBindBench$$anon$2')
f(9,14289,112,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,14289,112,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,14289,112,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3ee58.apply')
f(12,14289,112,1,'kyo/bench/Bench.$anonfun$1')
f(13,14289,112,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,14289,112,1,'kyo/bench/NarrowBindBench.kyoBench')
f(15,14289,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,14289,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,14289,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,14289,1,2,'kyo.bench.NarrowBindBench$$Lambda$56+0x0000000800d458c0')
f(15,14290,111,2,'kyo.bench.NarrowBindBench$$anon$4')
f(1,14401,5,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,14401,5,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,14401,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,14401,5,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,14401,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,14401,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,14401,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,14401,1,2,'org.openjdk.jmh.runner.InfraControl')
f(8,14402,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,14402,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,14402,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,14402,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,14402,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,14402,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,14405,1,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,14405,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,14405,1,1,'java/lang/ClassLoader.loadClass')
f(10,14405,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,14405,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,14405,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,14405,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,14405,1,1,'jdk/internal/loader/URLClassPath.getResource')
f(15,14405,1,1,'jdk/internal/loader/URLClassPath$JarLoader.getResource')
f(16,14405,1,1,'java/util/jar/JarFile.getJarEntry')
f(17,14405,1,1,'java/util/jar/JarFile.getEntry')
f(18,14405,1,1,'java/util/zip/ZipFile.getEntry')
f(19,14405,1,1,'java/util/zip/ZipFile$Source.getEntryPos')
f(20,14405,1,1,'java/util/zip/ZipCoder$UTF8ZipCoder.toString')
f(21,14405,1,1,'java/lang/System$2.newStringUTF8NoRepl')
f(22,14405,1,1,'java/lang/String.newStringUTF8NoRepl')
f(23,14405,1,1,'java/util/Arrays.copyOfRange')
f(24,14405,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: 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,275,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,'PhaseCFG::do_global_code_motion()')
f(11,0,1,4,'PhaseCFG::build_dominator_tree()')
f(12,0,1,4,'PhaseCFG::do_DFS(Tarjan*, unsigned int)')
f(13,0,1,4,'Block_Stack::most_frequent_successor(Block*)')
f(1,1,274,1,'java/lang/Thread.run')
f(2,1,274,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,1,274,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,1,13,1,'java/util/concurrent/FutureTask.run')
f(5,1,13,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,1,13,1,'java/util/concurrent/FutureTask.run')
f(7,1,13,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,1,13,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,1,13,1,'java/lang/reflect/Method.invoke')
f(10,1,13,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,1,13,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,1,13,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,1,13,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,1,13,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,1,13,1,'kyo/bench/Bench.forkKyo')
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')
f(21,1,6,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,1,6,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,1,6,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,1,6,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,1,6,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,1,6,1,'jdk/internal/misc/Unsafe.unpark')
f(27,1,6,3,'pthread_cond_signal')
f(28,1,6,5,'entry_SYSCALL_64_after_hwframe')
f(29,1,6,5,'do_syscall_64')
f(30,1,6,5,'__x64_sys_futex')
f(31,1,6,5,'do_futex')
f(32,1,6,5,'futex_wake')
f(33,1,1,5,'mark_wake_futex')
f(33,2,5,5,'wake_up_q')
f(34,2,5,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,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,5,5,'__x64_sys_futex')
f(30,8,5,5,'do_futex')
f(31,8,5,5,'futex_wait')
f(32,8,1,5,'__get_user_nocheck_4')
f(32,9,4,5,'futex_wait_queue_me')
f(33,9,1,5,'__cond_resched')
f(33,10,3,5,'schedule')
f(34,10,3,5,'__schedule')
f(35,10,3,5,'finish_task_switch.isra.0')
f(29,13,1,5,'syscall_enter_from_user_mode')
f(4,14,261,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fd98.run')
f(5,14,261,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,14,261,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,14,63,2,'kyo/concurrent/scheduler/IOTask.run',55,0,0)
f(8,21,1,2,'kyo/concurrent/scheduler/Coordinator$.tick',1,0,0)
f(8,22,2,2,'kyo/concurrent/scheduler/IOTask.curr_$eq',2,0,0)
f(8,24,53,2,'kyo/concurrent/scheduler/IOTask.eval',45,0,0)
f(9,69,1,1,'kyo/bench/NarrowBindBench$$anon$3.apply')
f(9,70,7,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,70,7,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',1,0,0)
f(11,70,7,1,'kyo/concurrent/scheduler/IOPromise.complete',1,0,0)
f(12,70,7,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush',1,0,0)
f(13,70,7,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',1,0,0)
f(14,70,7,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run',1,0,0)
f(15,70,7,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply',1,0,0)
f(16,70,7,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply',1,0,0)
f(17,70,7,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared',1,0,0)
f(18,70,7,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext',1,0,0)
f(19,70,1,2,'java/util/concurrent/locks/AbstractQueuedSynchronizer$Node.getAndUnsetStatus',1,0,0)
f(20,70,1,2,'jdk/internal/misc/Unsafe.getAndBitwiseAndInt',1,0,0)
f(19,71,6,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,71,6,1,'jdk/internal/misc/Unsafe.unpark')
f(21,71,6,3,'pthread_cond_signal')
f(22,71,6,5,'entry_SYSCALL_64_after_hwframe')
f(23,71,6,5,'do_syscall_64')
f(24,71,6,5,'__x64_sys_futex')
f(25,72,5,5,'do_futex')
f(26,72,5,5,'futex_wake')
f(27,72,5,5,'wake_up_q')
f(28,72,5,5,'_raw_spin_unlock_irqrestore')
f(7,77,192,2,'kyo/concurrent/scheduler/Queue.poll',192,0,0)
f(8,77,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(9,77,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',2,0,0)
f(10,77,2,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d45230.<init>',2,0,0)
f(8,79,190,2,'kyo/concurrent/scheduler/Queue.modify',190,0,0)
f(9,107,162,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d45230.apply',162,0,0)
f(10,107,162,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',162,0,0)
f(11,127,17,2,'kyo/concurrent/scheduler/Queue.isEmpty',17,0,0)
f(11,144,125,2,'scala/collection/mutable/PriorityQueue.dequeue',125,0,0)
f(12,250,12,2,'scala/collection/mutable/PriorityQueue.fixDown',12,0,0)
f(12,262,7,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',7,0,0)
f(7,269,6,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,269,6,1,'kyo/concurrent/scheduler/Worker.park')
f(9,269,6,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,269,6,1,'jdk/internal/misc/Unsafe.park')
f(11,269,6,3,'[unknown]')
f(12,269,5,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,271,3,5,'entry_SYSCALL_64_after_hwframe')
f(14,271,3,5,'do_syscall_64')
f(15,271,2,5,'__x64_sys_futex')
f(16,271,2,5,'do_futex')
f(17,271,2,5,'futex_wait')
f(18,271,1,5,'futex_wait_queue_me')
f(19,271,1,5,'schedule')
f(20,271,1,5,'__schedule')
f(21,271,1,5,'finish_task_switch.isra.0')
f(18,272,1,5,'futex_wait_setup')
f(15,273,1,5,'syscall_exit_to_user_mode')
f(16,273,1,5,'exit_to_user_mode_prepare')
f(17,273,1,5,'exit_to_user_mode_loop')
f(12,274,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: 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,18890,3,'all')
f(1,0,18885,1,'java/lang/Thread.run')
f(2,0,18885,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,18885,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,18885,1,'java/util/concurrent/FutureTask.run')
f(5,0,18885,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,18885,1,'java/util/concurrent/FutureTask.run')
f(7,0,18885,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,18885,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,18885,1,'java/lang/reflect/Method.invoke')
f(10,0,18885,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,18885,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,18885,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,18885,1,'kyo/bench/jmh_generated/NarrowBindBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,18885,1,'kyo/bench/jmh_generated/NarrowBindBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,18885,1,'kyo/bench/Bench.syncKyo')
f(16,0,18883,1,'kyo/bench/Bench.runLoop$1')
f(17,0,18881,1,'kyo/bench/NarrowBindBench$$anon$2.apply')
f(18,0,18881,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(19,0,18881,1,'kyo/bench/NarrowBindBench$$Lambda$40.0x0000000800cd38c0.apply')
f(20,0,18881,1,'kyo/bench/NarrowBindBench.$anonfun$adapted$1')
f(21,0,18881,1,'kyo/bench/NarrowBindBench.$anonfun$1')
f(22,0,18881,1,'kyo/bench/NarrowBindBench.loop$1')
f(23,0,9440,2,'kyo.bench.NarrowBindBench$$anon$1')
f(23,9440,3,2,'kyo.bench.NarrowBindBench$$anon$3')
f(23,9443,9438,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(24,9443,9438,2,'kyo.bench.NarrowBindBench$$anon$2')
f(17,18881,2,1,'kyo/bench/NarrowBindBench$$anon$5.apply')
f(18,18881,2,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$2')
f(19,18881,2,1,'kyo/bench/NarrowBindBench$$Lambda$37.0x0000000800c2d568.apply')
f(20,18881,2,1,'kyo/bench/NarrowBindBench.$anonfun$adapted$2')
f(21,18881,2,1,'kyo/bench/NarrowBindBench.$anonfun$2')
f(22,18881,2,1,'kyo/bench/NarrowBindBench.loop$1')
f(23,18881,1,2,'kyo.bench.NarrowBindBench$$anon$1')
f(23,18882,1,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(24,18882,1,2,'kyo.bench.NarrowBindBench$$anon$2')
f(16,18883,2,1,'kyo/bench/NarrowBindBench.kyoBench')
f(17,18883,2,2,'kyo.bench.NarrowBindBench$$anon$4')
f(1,18885,5,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,18885,5,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,18885,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,18885,5,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,18885,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,18885,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,18885,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,18885,1,2,'org.openjdk.jmh.runner.InfraControl')
f(8,18886,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,18886,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,18886,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,18886,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,18886,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,18886,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,18889,1,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,18889,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,18889,1,1,'java/lang/ClassLoader.loadClass')
f(10,18889,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,18889,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,18889,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,18889,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,18889,1,1,'jdk/internal/loader/URLClassPath.getResource')
f(15,18889,1,1,'jdk/internal/loader/URLClassPath$JarLoader.getResource')
f(16,18889,1,1,'java/util/jar/JarFile.getJarEntry')
f(17,18889,1,1,'java/util/jar/JarFile.getEntry')
f(18,18889,1,1,'java/util/zip/ZipFile.getEntry')
f(19,18889,1,1,'java/util/zip/ZipFile.getZipEntry')
f(20,18889,1,1,'java/util/jar/JavaUtilJarAccessImpl.entryFor')
f(21,18889,1,1,'java/util/jar/JarFile.entryFor')
f(22,18889,1,2,'java.util.jar.JarFile$JarFileEntry')
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: 464px}
</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(29);
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::satisfy_failed_allocation(unsigned long, bool*)')
f(10,0,1,4,'G1AllocRegion::new_alloc_region_and_allocate(unsigned long, bool)')
f(11,0,1,4,'G1CollectedHeap::new_mutator_alloc_region(unsigned long, bool, unsigned int)')
f(12,0,1,4,'HeapRegionRemSet::clear_fcc()')
f(1,1,297,1,'java/lang/Thread.run')
f(2,1,297,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,1,297,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,1,297,1,'java/util/concurrent/FutureTask.run')
f(5,1,297,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,1,297,1,'java/util/concurrent/FutureTask.run')
f(7,1,297,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,1,297,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,1,297,1,'java/lang/reflect/Method.invoke')
f(10,1,297,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,1,297,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,1,297,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,1,297,1,'kyo/bench/jmh_generated/NarrowBindBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,1,297,1,'kyo/bench/jmh_generated/NarrowBindBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,1,297,2,'kyo/bench/Bench.syncKyo',295,0,0)
f(16,1,180,2,'kyo/bench/Bench.runLoop$1',178,0,0)
f(17,127,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(18,127,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(19,127,1,4,'MemAllocator::allocate() const')
f(20,127,1,4,'MemAllocator::Allocation::check_out_of_memory()')
f(17,128,47,2,'kyo/bench/NarrowBindBench$$anon$2.apply',46,0,0)
f(18,144,7,2,'kyo/bench/NarrowBindBench$$anon$1.apply',7,0,0)
f(18,151,24,2,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1',23,0,0)
f(19,151,13,2,'kyo/bench/NarrowBindBench$$Lambda$40.0x0000000800cd38c0.apply',12,0,0)
f(20,151,13,2,'kyo/bench/NarrowBindBench.$anonfun$adapted$1',12,0,0)
f(21,151,13,2,'kyo/bench/NarrowBindBench.$anonfun$1',12,0,0)
f(22,151,13,2,'kyo/bench/NarrowBindBench.loop$1',12,0,0)
f(23,151,13,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',12,0,0)
f(24,155,9,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',8,0,0)
f(25,163,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(26,163,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(27,163,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(28,163,1,4,'MemAllocator::allocate() const')
f(19,164,11,2,'scala/runtime/BoxesRunTime.unboxToInt',11,0,0)
f(17,175,6,2,'kyo/locals$Locals$State$.empty',6,0,0)
f(16,181,117,2,'kyo/bench/NarrowBindBench.kyoBench',117,0,0)
f(17,181,17,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',17,0,0)
f(18,181,17,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',17,0,0)
f(17,198,100,2,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$2',100,0,0)
f(18,198,100,2,'kyo/bench/NarrowBindBench$$anon$5.<init>',100,0,0)
f(19,265,33,2,'kyo/core$internal$KyoCont.<init>',33,0,0)
f(20,269,6,2,'kyo/ios$KyoIO.effect',6,0,0)
f(20,275,23,2,'kyo/ios$KyoIO.value',23,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,12809,3,'all')
f(1,0,12805,1,'java/lang/Thread.run')
f(2,0,12805,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,12805,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,898,1,'java/util/concurrent/FutureTask.run')
f(5,0,898,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,898,1,'java/util/concurrent/FutureTask.run')
f(7,0,898,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,898,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,898,1,'java/lang/reflect/Method.invoke')
f(10,0,898,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,898,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,898,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,898,1,'kyo/bench/jmh_generated/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,896,1,'kyo/bench/jmh_generated/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,896,1,'kyo/bench/Bench.forkKyo')
f(16,0,78,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,78,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,78,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,78,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c80820')
f(16,78,101,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,78,101,2,'kyo.bench.Bench$$anon$1')
f(16,179,546,1,'kyo/bench/Bench.runLoop$2')
f(17,179,271,1,'kyo/bench/Bench$$anon$1.apply')
f(18,179,52,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,179,52,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c85ba8.apply')
f(20,179,52,1,'kyo/bench/Bench.$anonfun$2')
f(21,179,52,1,'kyo/concurrent/fibers$Fiber.block')
f(22,179,52,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,231,219,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,231,219,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,231,219,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c81f78.apply')
f(21,231,219,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,231,219,2,'kyo.concurrent.scheduler.IOTask')
f(17,450,275,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,450,275,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,450,275,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,450,275,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,450,42,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,450,42,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,450,42,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,450,42,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,492,40,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,532,193,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,532,193,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,532,193,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,725,171,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,725,170,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,725,170,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,725,170,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,725,170,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c81f78')
f(17,895,1,1,'kyo/locals$Locals$.save')
f(18,895,1,2,'kyo.locals$Locals$$anon$3')
f(14,896,1,2,'org.openjdk.jmh.results.BenchmarkTaskResult')
f(14,897,1,1,'org/openjdk/jmh/results/BenchmarkTaskResult.add')
f(15,897,1,1,'java/util/ArrayList.add')
f(16,897,1,1,'java/util/ArrayList.add')
f(17,897,1,1,'java/util/ArrayList.grow')
f(18,897,1,1,'java/util/ArrayList.grow')
f(19,897,1,2,'java.lang.Object[]')
f(4,898,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e478.run')
f(5,898,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,898,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,898,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,898,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,898,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,898,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,898,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,909,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e6a0.run')
f(5,909,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,909,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,909,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,909,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,909,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,909,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$68+0x0000000800d4cc00')
f(4,920,11885,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d22b68.run')
f(5,920,11885,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,920,11885,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,920,11885,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,920,11885,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,920,11768,1,'kyo/bench/NarrowBindMapBench$$anon$12.apply')
f(10,920,573,1,'kyo/bench/NarrowBindMapBench$$anon$11.apply')
f(11,920,573,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$transformLoop$10')
f(12,920,573,1,'kyo/bench/NarrowBindMapBench$$Lambda$66.0x0000000800d4c468.apply')
f(13,920,573,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$10')
f(14,920,573,1,'kyo/bench/NarrowBindMapBench.$anonfun$10')
f(15,920,573,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(16,920,573,1,'java/lang/Integer.valueOf')
f(17,920,573,2,'java.lang.Integer')
f(10,1493,11195,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11')
f(11,1493,11195,1,'kyo/bench/NarrowBindMapBench$$Lambda$67.0x0000000800d4c830.apply')
f(12,1493,11195,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$11')
f(13,1493,11195,1,'kyo/bench/NarrowBindMapBench.$anonfun$11')
f(14,1493,11195,1,'kyo/bench/NarrowBindMapBench.loop$1')
f(15,1493,414,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,1493,414,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,1493,414,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,1493,414,2,'kyo.bench.NarrowBindMapBench$$Lambda$67+0x0000000800d4c830')
f(15,1907,259,2,'kyo.bench.NarrowBindMapBench$$anon$1')
f(15,2166,1054,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(16,2166,1054,2,'kyo.bench.NarrowBindMapBench$$anon$2')
f(15,3220,663,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$transformLoop$2')
f(16,3220,663,2,'kyo.bench.NarrowBindMapBench$$anon$3')
f(15,3883,1254,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$transformLoop$3')
f(16,3883,1254,2,'kyo.bench.NarrowBindMapBench$$anon$4')
f(15,5137,661,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$transformLoop$4')
f(16,5137,661,2,'kyo.bench.NarrowBindMapBench$$anon$5')
f(15,5798,1307,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$transformLoop$5')
f(16,5798,1307,2,'kyo.bench.NarrowBindMapBench$$anon$6')
f(15,7105,719,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$transformLoop$6')
f(16,7105,719,2,'kyo.bench.NarrowBindMapBench$$anon$7')
f(15,7824,1232,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$transformLoop$7')
f(16,7824,1232,2,'kyo.bench.NarrowBindMapBench$$anon$8')
f(15,9056,659,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$transformLoop$8')
f(16,9056,659,2,'kyo.bench.NarrowBindMapBench$$anon$9')
f(15,9715,1321,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$transformLoop$9')
f(16,9715,1321,2,'kyo.bench.NarrowBindMapBench$$anon$10')
f(15,11036,681,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$transformLoop$10')
f(16,11036,681,2,'kyo.bench.NarrowBindMapBench$$anon$11')
f(15,11717,971,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11')
f(16,11717,971,2,'kyo.bench.NarrowBindMapBench$$anon$12')
f(9,12688,117,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,12688,117,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,12688,117,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c80820.apply')
f(12,12688,117,1,'kyo/bench/Bench.$anonfun$1')
f(13,12688,117,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,12688,117,1,'kyo/bench/NarrowBindMapBench.kyoBench')
f(15,12688,117,2,'kyo.bench.NarrowBindMapBench$$anon$14')
f(1,12805,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,12805,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,12805,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,12805,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,12805,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,12805,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,12805,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,12805,1,2,'org.openjdk.jmh.runner.InfraControl')
f(8,12806,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,12806,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,12806,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,12806,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,12806,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,12806,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,294,3,'all')
f(1,0,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,1,5,'entry_SYSCALL_64_after_hwframe')
f(3,0,1,5,'do_syscall_64')
f(4,0,1,5,'__x64_sys_futex')
f(5,0,1,5,'do_futex')
f(6,0,1,5,'futex_wait')
f(7,0,1,5,'futex_wait_queue_me')
f(8,0,1,5,'schedule')
f(9,0,1,5,'__schedule')
f(10,0,1,5,'finish_task_switch.isra.0')
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/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,1,2,1,'kyo/bench/jmh_generated/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,1,2,1,'kyo/bench/Bench.forkKyo')
f(16,1,2,1,'kyo/bench/Bench.runLoop$2')
f(17,1,2,1,'kyo/bench/Bench$$anon$1.apply')
f(18,1,2,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,1,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,1,2,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c81f78.apply')
f(21,1,2,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,1,2,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,1,2,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,1,2,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,1,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,1,2,1,'jdk/internal/misc/Unsafe.unpark')
f(27,1,2,3,'pthread_cond_signal')
f(28,1,2,5,'entry_SYSCALL_64_after_hwframe')
f(29,1,2,5,'do_syscall_64')
f(30,1,2,5,'__x64_sys_futex')
f(31,1,2,5,'do_futex')
f(32,1,2,5,'futex_wake')
f(33,1,2,5,'wake_up_q')
f(34,1,2,5,'_raw_spin_unlock_irqrestore')
f(4,3,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e478.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,'JVM_Sleep')
f(9,3,1,4,'HandleMark::pop_and_restore()')
f(4,4,290,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d22b68.run')
f(5,4,290,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,4,290,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,4,289,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,4,289,1,'kyo/concurrent/scheduler/IOTask.eval',14,0,0)
f(9,17,274,1,'kyo/bench/NarrowBindMapBench$$anon$12.apply')
f(10,28,113,1,'kyo/bench/NarrowBindMapBench$$anon$11.apply')
f(11,30,21,2,'kyo/bench/NarrowBindMapBench$$anon$10.apply',21,0,0)
f(12,30,21,2,'kyo/bench/NarrowBindMapBench$$anon$9.apply',21,0,0)
f(13,32,19,2,'kyo/bench/NarrowBindMapBench$$anon$8.apply',19,0,0)
f(14,32,19,2,'kyo/bench/NarrowBindMapBench$$anon$7.apply',19,0,0)
f(15,48,3,2,'kyo/bench/NarrowBindMapBench$$anon$6.apply',3,0,0)
f(16,50,1,2,'kyo/bench/NarrowBindMapBench$$anon$5.apply',1,0,0)
f(17,50,1,2,'kyo/bench/NarrowBindMapBench$$anon$4.apply',1,0,0)
f(18,50,1,2,'kyo/bench/NarrowBindMapBench$$anon$3.apply',1,0,0)
f(19,50,1,2,'kyo/bench/NarrowBindMapBench$$anon$2.apply',1,0,0)
f(20,50,1,2,'kyo/bench/NarrowBindMapBench$$anon$1.apply',1,0,0)
f(11,51,90,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$transformLoop$10',90,0,0)
f(12,51,90,2,'kyo/bench/NarrowBindMapBench$$Lambda$66.0x0000000800d4c468.apply',90,0,0)
f(13,51,90,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$10',90,0,0)
f(14,51,90,2,'kyo/bench/NarrowBindMapBench.$anonfun$10',90,0,0)
f(15,51,90,2,'scala/runtime/BoxesRunTime.boxToInteger',90,0,0)
f(10,141,150,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11',148,0,0)
f(11,154,109,2,'kyo/bench/NarrowBindMapBench$$Lambda$67.0x0000000800d4c830.apply',109,0,0)
f(12,154,109,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$11',109,0,0)
f(13,154,109,2,'kyo/bench/NarrowBindMapBench.$anonfun$11',109,0,0)
f(14,156,107,2,'kyo/bench/NarrowBindMapBench.loop$1',107,0,0)
f(15,163,65,2,'kyo/bench/NarrowBindMapBench$$anon$1.<init>',65,0,0)
f(15,228,28,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1',28,0,0)
f(16,231,25,2,'kyo/bench/NarrowBindMapBench$$anon$2.<init>',25,0,0)
f(17,232,24,2,'kyo/core$internal$KyoCont.<init>',24,0,0)
f(18,242,6,2,'kyo/core$internal$Kyo.<init>',6,0,0)
f(18,248,8,2,'kyo/ios$KyoIO.effect',8,0,0)
f(15,256,7,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$transformLoop$2',7,0,0)
f(11,263,27,2,'kyo/bench/NarrowBindMapBench$$anon$12.<init>',25,0,0)
f(12,263,27,2,'kyo/core$internal$KyoCont.<init>',25,0,0)
f(13,281,2,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(14,281,2,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(15,281,2,4,'MemAllocator::allocate() const')
f(16,281,2,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(17,281,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(17,282,1,4,'G1Allocator::unsafe_max_tlab_alloc()')
f(13,283,1,2,'kyo/core$internal$Kyo.<init>',1,0,0)
f(14,283,1,2,'java/lang/Object.<init>',1,0,0)
f(13,284,6,2,'kyo/core$internal$KyoCont.effect',6,0,0)
f(11,290,1,2,'scala/runtime/BoxesRunTime.unboxToInt',1,0,0)
f(12,290,1,2,'java/lang/Integer.intValue',1,0,0)
f(9,291,1,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',1,0,0)
f(9,292,1,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,292,1,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,292,1,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,292,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,292,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,292,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,292,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,292,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,292,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,292,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,292,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,292,1,1,'jdk/internal/misc/Unsafe.unpark')
f(21,292,1,3,'pthread_cond_signal')
f(22,292,1,5,'entry_SYSCALL_64_after_hwframe')
f(23,292,1,5,'__x64_sys_futex')
f(7,293,1,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,293,1,1,'java/util/AbstractQueue.add')
f(9,293,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.offer')
f(10,293,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.producerChunkForIndex')
f(11,293,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.appendNextChunks')
f(12,293,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.newOrPooledChunk')
f(13,293,1,6,'org/jctools/queues/MpUnboundedXaddChunk.soPrev',0,1,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: 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(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,13517,3,'all')
f(1,0,13512,1,'java/lang/Thread.run')
f(2,0,13512,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,13512,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,13512,1,'java/util/concurrent/FutureTask.run')
f(5,0,13512,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,13512,1,'java/util/concurrent/FutureTask.run')
f(7,0,13512,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,13512,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,13512,1,'java/lang/reflect/Method.invoke')
f(10,0,13512,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,13512,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,13512,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,13512,1,'kyo/bench/jmh_generated/NarrowBindMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,13512,1,'kyo/bench/jmh_generated/NarrowBindMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,13512,1,'kyo/bench/Bench.syncKyo')
f(16,0,13512,1,'kyo/bench/Bench.runLoop$1')
f(17,0,13508,1,'kyo/bench/NarrowBindMapBench$$anon$12.apply')
f(18,0,1544,1,'kyo/bench/NarrowBindMapBench$$anon$11.apply')
f(19,0,1544,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$transformLoop$10')
f(20,0,1544,1,'kyo/bench/NarrowBindMapBench$$Lambda$49.0x0000000800cd7078.apply')
f(21,0,1544,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$10')
f(22,0,1544,1,'kyo/bench/NarrowBindMapBench.$anonfun$10')
f(23,0,1544,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(24,0,1544,1,'java/lang/Integer.valueOf')
f(25,0,1544,2,'java.lang.Integer')
f(18,1544,11964,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11')
f(19,1544,11964,1,'kyo/bench/NarrowBindMapBench$$Lambda$50.0x0000000800cd7440.apply')
f(20,1544,11964,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$11')
f(21,1544,11964,1,'kyo/bench/NarrowBindMapBench.$anonfun$11')
f(22,1544,11964,1,'kyo/bench/NarrowBindMapBench.loop$1')
f(23,1544,716,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(24,1544,716,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(25,1544,716,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(26,1544,716,2,'kyo.bench.NarrowBindMapBench$$Lambda$50+0x0000000800cd7440')
f(23,2260,1,2,'kyo.bench.NarrowBindMapBench$$anon$13')
f(23,2261,337,2,'kyo.bench.NarrowBindMapBench$$anon$1')
f(23,2598,872,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(24,2598,872,2,'kyo.bench.NarrowBindMapBench$$anon$2')
f(23,3470,594,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$transformLoop$2')
f(24,3470,594,2,'kyo.bench.NarrowBindMapBench$$anon$3')
f(23,4064,1464,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$transformLoop$3')
f(24,4064,1464,2,'kyo.bench.NarrowBindMapBench$$anon$4')
f(23,5528,1261,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$transformLoop$4')
f(24,5528,1261,2,'kyo.bench.NarrowBindMapBench$$anon$5')
f(23,6789,631,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$transformLoop$5')
f(24,6789,631,2,'kyo.bench.NarrowBindMapBench$$anon$6')
f(23,7420,1383,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$transformLoop$6')
f(24,7420,1383,2,'kyo.bench.NarrowBindMapBench$$anon$7')
f(23,8803,1324,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$transformLoop$7')
f(24,8803,1324,2,'kyo.bench.NarrowBindMapBench$$anon$8')
f(23,10127,694,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$transformLoop$8')
f(24,10127,694,2,'kyo.bench.NarrowBindMapBench$$anon$9')
f(23,10821,1482,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$transformLoop$9')
f(24,10821,1482,2,'kyo.bench.NarrowBindMapBench$$anon$10')
f(23,12303,1161,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$transformLoop$10')
f(24,12303,1161,2,'kyo.bench.NarrowBindMapBench$$anon$11')
f(23,13464,44,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11')
f(24,13464,44,2,'kyo.bench.NarrowBindMapBench$$anon$12')
f(17,13508,4,1,'kyo/bench/NarrowBindMapBench$$anon$15.apply')
f(18,13508,4,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$12')
f(19,13508,4,1,'kyo/bench/NarrowBindMapBench$$Lambda$37.0x0000000800c2eb48.apply')
f(20,13508,4,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$12')
f(21,13508,4,1,'kyo/bench/NarrowBindMapBench.$anonfun$12')
f(22,13508,4,1,'kyo/bench/NarrowBindMapBench.loop$1')
f(23,13508,1,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$transformLoop$6')
f(24,13508,1,2,'kyo.bench.NarrowBindMapBench$$anon$7')
f(23,13509,2,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$transformLoop$9')
f(24,13509,2,2,'kyo.bench.NarrowBindMapBench$$anon$10')
f(23,13511,1,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$transformLoop$10')
f(24,13511,1,2,'kyo.bench.NarrowBindMapBench$$anon$11')
f(1,13512,5,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,13512,5,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,13512,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,13512,5,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,13512,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,13512,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,13512,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,13512,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,13512,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,13512,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,13512,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,13512,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,13512,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,13515,2,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,13515,2,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,13515,2,1,'java/lang/ClassLoader.loadClass')
f(10,13515,2,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,13515,2,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,13515,2,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,13515,2,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,13515,1,1,'jdk/internal/loader/BuiltinClassLoader.defineClass')
f(15,13515,1,1,'jdk/internal/loader/Resource.getByteBuffer')
f(16,13515,1,1,'jdk/internal/loader/Resource.cachedInputStream')
f(17,13515,1,1,'jdk/internal/loader/URLClassPath$JarLoader$2.getInputStream')
f(18,13515,1,1,'java/util/jar/JarFile.getInputStream')
f(19,13515,1,1,'java/util/zip/ZipFile.getInputStream')
f(20,13515,1,1,'java/util/zip/ZipFile$ZipFileInflaterInputStream.<init>')
f(21,13515,1,1,'java/util/zip/ZipFile$ZipFileInflaterInputStream.<init>')
f(22,13515,1,1,'java/util/zip/InflaterInputStream.<init>')
f(23,13515,1,2,'byte[]')
f(14,13516,1,1,'jdk/internal/loader/URLClassPath.getResource')
f(15,13516,1,1,'jdk/internal/loader/URLClassPath$JarLoader.getResource')
f(16,13516,1,1,'java/util/jar/JarFile.getJarEntry')
f(17,13516,1,1,'java/util/jar/JarFile.getEntry')
f(18,13516,1,1,'java/util/zip/ZipFile.getEntry')
f(19,13516,1,1,'java/util/zip/ZipFile$Source.getEntryPos')
f(20,13516,1,1,'java/util/zip/ZipCoder$UTF8ZipCoder.toString')
f(21,13516,1,1,'java/lang/System$2.newStringUTF8NoRepl')
f(22,13516,1,1,'java/lang/String.newStringUTF8NoRepl')
f(23,13516,1,1,'java/util/Arrays.copyOfRange')
f(24,13516,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: 512px}
</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(32);
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/NarrowBindMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,298,1,'kyo/bench/jmh_generated/NarrowBindMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,298,1,'kyo/bench/Bench.syncKyo')
f(16,0,298,1,'kyo/bench/Bench.runLoop$1',18,0,0)
f(17,18,280,1,'kyo/bench/NarrowBindMapBench$$anon$12.apply')
f(18,18,280,2,'kyo/bench/NarrowBindMapBench$$anon$11.apply',280,0,0)
f(19,19,279,2,'kyo/bench/NarrowBindMapBench$$anon$10.apply',279,0,0)
f(20,19,279,2,'kyo/bench/NarrowBindMapBench$$anon$9.apply',279,0,0)
f(21,19,279,2,'kyo/bench/NarrowBindMapBench$$anon$8.apply',279,0,0)
f(22,19,279,2,'kyo/bench/NarrowBindMapBench$$anon$7.apply',279,0,0)
f(23,30,268,2,'kyo/bench/NarrowBindMapBench$$anon$6.apply',268,0,0)
f(24,35,263,2,'kyo/bench/NarrowBindMapBench$$anon$5.apply',263,0,0)
f(25,49,244,2,'kyo/bench/NarrowBindMapBench$$anon$4.apply',244,0,0)
f(26,101,165,2,'kyo/bench/NarrowBindMapBench$$anon$3.apply',165,0,0)
f(27,146,45,2,'kyo/bench/NarrowBindMapBench$$anon$2.apply',45,0,0)
f(28,153,26,2,'kyo/bench/NarrowBindMapBench$$anon$1.apply',26,0,0)
f(29,170,9,2,'kyo/bench/NarrowBindMapBench$$anon$1.apply',9,0,0)
f(30,175,4,2,'scala/runtime/BoxesRunTime.boxToInteger',4,0,0)
f(28,179,12,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1',12,0,0)
f(29,186,5,2,'scala/runtime/BoxesRunTime.unboxToInt',5,0,0)
f(27,191,75,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$transformLoop$2',75,0,0)
f(28,193,73,2,'kyo/bench/NarrowBindMapBench$$Lambda$41.0x0000000800cd5238.apply',73,0,0)
f(29,193,73,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$2',73,0,0)
f(30,193,73,2,'kyo/bench/NarrowBindMapBench.$anonfun$2',73,0,0)
f(31,193,73,2,'scala/runtime/BoxesRunTime.boxToInteger',73,0,0)
f(26,266,27,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$transformLoop$3',27,0,0)
f(27,270,22,2,'kyo/bench/NarrowBindMapBench$$Lambda$42.0x0000000800cd5600.apply',22,0,0)
f(28,281,11,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$3',11,0,0)
f(29,284,3,2,'kyo/bench/NarrowBindMapBench.$anonfun$3',3,0,0)
f(29,287,5,2,'scala/runtime/BoxesRunTime.unboxToInt',5,0,0)
f(27,292,1,2,'scala/runtime/BoxesRunTime.boxToInteger',1,0,0)
f(25,293,5,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$transformLoop$4',5,0,0)
f(26,294,4,2,'scala/runtime/BoxesRunTime.unboxToInt',4,0,0)
f(27,294,4,2,'java/lang/Integer.intValue',4,0,0)
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: 544px}
</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(34);
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,5083,3,'all')
f(1,0,5080,1,'java/lang/Thread.run')
f(2,0,5080,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,5080,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,648,1,'java/util/concurrent/FutureTask.run')
f(5,0,648,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,648,1,'java/util/concurrent/FutureTask.run')
f(7,0,648,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,648,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,648,1,'java/lang/reflect/Method.invoke')
f(10,0,648,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,648,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,648,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,648,1,'kyo/bench/jmh_generated/PingPongBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,648,1,'kyo/bench/jmh_generated/PingPongBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,648,1,'kyo/bench/Bench.forkKyo')
f(16,0,76,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,76,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,76,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,76,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c82620')
f(16,76,71,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,76,71,2,'kyo.bench.Bench$$anon$1')
f(16,147,391,1,'kyo/bench/Bench.runLoop$2')
f(17,147,265,1,'kyo/bench/Bench$$anon$1.apply')
f(18,147,108,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,147,108,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c89220.apply')
f(20,147,108,1,'kyo/bench/Bench.$anonfun$2')
f(21,147,108,1,'kyo/concurrent/fibers$Fiber.block')
f(22,147,108,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,255,157,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,255,157,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,255,157,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c86000.apply')
f(21,255,157,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,255,62,2,'kyo.concurrent.scheduler.IOTask')
f(22,317,95,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,317,95,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,317,95,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,317,95,1,'kyo/concurrent/scheduler/Queue.offer')
f(26,317,95,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(27,317,95,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(28,317,95,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(29,317,95,2,'kyo.concurrent.scheduler.Queue$$Lambda$54+0x0000000800d4a680')
f(17,412,126,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,412,126,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,412,126,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,412,126,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,412,126,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,412,126,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,412,126,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(16,538,110,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,538,110,1,'java/lang/invoke/Invokers$
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