Skip to content

Instantly share code, notes, and snippets.

@fwbrasil
Created June 10, 2023 09:24
Show Gist options
  • Save fwbrasil/69dde0305731ccbccc73658c81d0c8cb to your computer and use it in GitHub Desktop.
Save fwbrasil/69dde0305731ccbccc73658c81d0c8cb to your computer and use it in GitHub Desktop.
[
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.BroadFlatMapBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 50290.42754606723,
"scoreError" : 26661.5578213455,
"scoreConfidence" : [
23628.869724721728,
76951.98536741274
],
"scorePercentiles" : {
"0.0" : 49094.97694562376,
"50.0" : 49856.701229793296,
"90.0" : 51919.60446278462,
"95.0" : 51919.60446278462,
"99.0" : 51919.60446278462,
"99.9" : 51919.60446278462,
"99.99" : 51919.60446278462,
"99.999" : 51919.60446278462,
"99.9999" : 51919.60446278462,
"100.0" : 51919.60446278462
},
"scoreUnit" : "ops/s",
"rawData" : [
[
49094.97694562376,
49856.701229793296,
51919.60446278462
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.BroadFlatMapBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 206355.45991226015,
"scoreError" : 11640.28346766095,
"scoreConfidence" : [
194715.1764445992,
217995.7433799211
],
"scorePercentiles" : {
"0.0" : 205913.11316929746,
"50.0" : 206066.39200380008,
"90.0" : 207086.87456368294,
"95.0" : 207086.87456368294,
"99.0" : 207086.87456368294,
"99.9" : 207086.87456368294,
"99.99" : 207086.87456368294,
"99.999" : 207086.87456368294,
"99.9999" : 207086.87456368294,
"100.0" : 207086.87456368294
},
"scoreUnit" : "ops/s",
"rawData" : [
[
207086.87456368294,
206066.39200380008,
205913.11316929746
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.ChainedForkBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1246.73064040665,
"scoreError" : 371.3311322958722,
"scoreConfidence" : [
875.3995081107779,
1618.0617727025224
],
"scorePercentiles" : {
"0.0" : 1229.4481019764708,
"50.0" : 1241.5781738154462,
"90.0" : 1269.165645428033,
"95.0" : 1269.165645428033,
"99.0" : 1269.165645428033,
"99.9" : 1269.165645428033,
"99.99" : 1269.165645428033,
"99.999" : 1269.165645428033,
"99.9999" : 1269.165645428033,
"100.0" : 1269.165645428033
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1269.165645428033,
1241.5781738154462,
1229.4481019764708
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.ChainedForkBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1381.5048076919102,
"scoreError" : 418.67318633307195,
"scoreConfidence" : [
962.8316213588382,
1800.1779940249821
],
"scorePercentiles" : {
"0.0" : 1359.1101905582416,
"50.0" : 1380.4337667753753,
"90.0" : 1404.9704657421134,
"95.0" : 1404.9704657421134,
"99.0" : 1404.9704657421134,
"99.9" : 1404.9704657421134,
"99.99" : 1404.9704657421134,
"99.999" : 1404.9704657421134,
"99.9999" : 1404.9704657421134,
"100.0" : 1404.9704657421134
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1380.4337667753753,
1359.1101905582416,
1404.9704657421134
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.CollectAllBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 23139.853959790587,
"scoreError" : 1175.9765961540093,
"scoreConfidence" : [
21963.877363636577,
24315.830555944598
],
"scorePercentiles" : {
"0.0" : 23068.51252229472,
"50.0" : 23157.145511301405,
"90.0" : 23193.90384577563,
"95.0" : 23193.90384577563,
"99.0" : 23193.90384577563,
"99.9" : 23193.90384577563,
"99.99" : 23193.90384577563,
"99.999" : 23193.90384577563,
"99.9999" : 23193.90384577563,
"100.0" : 23193.90384577563
},
"scoreUnit" : "ops/s",
"rawData" : [
[
23068.51252229472,
23193.90384577563,
23157.145511301405
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.CollectAllBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 40803.44038615154,
"scoreError" : 2448.2000371611784,
"scoreConfidence" : [
38355.24034899036,
43251.64042331272
],
"scorePercentiles" : {
"0.0" : 40711.9178905778,
"50.0" : 40740.91598183554,
"90.0" : 40957.48728604125,
"95.0" : 40957.48728604125,
"99.0" : 40957.48728604125,
"99.9" : 40957.48728604125,
"99.99" : 40957.48728604125,
"99.999" : 40957.48728604125,
"99.9999" : 40957.48728604125,
"100.0" : 40957.48728604125
},
"scoreUnit" : "ops/s",
"rawData" : [
[
40711.9178905778,
40740.91598183554,
40957.48728604125
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.CountdownLatchBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 10792.036857401412,
"scoreError" : 587.3434128547888,
"scoreConfidence" : [
10204.693444546623,
11379.3802702562
],
"scorePercentiles" : {
"0.0" : 10757.01658447836,
"50.0" : 10798.746222368598,
"90.0" : 10820.347765357274,
"95.0" : 10820.347765357274,
"99.0" : 10820.347765357274,
"99.9" : 10820.347765357274,
"99.99" : 10820.347765357274,
"99.999" : 10820.347765357274,
"99.9999" : 10820.347765357274,
"100.0" : 10820.347765357274
},
"scoreUnit" : "ops/s",
"rawData" : [
[
10820.347765357274,
10798.746222368598,
10757.01658447836
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.CountdownLatchBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 11483.814547009779,
"scoreError" : 504.8196595668537,
"scoreConfidence" : [
10978.994887442925,
11988.634206576633
],
"scorePercentiles" : {
"0.0" : 11459.460811061701,
"50.0" : 11478.07916640766,
"90.0" : 11513.903663559975,
"95.0" : 11513.903663559975,
"99.0" : 11513.903663559975,
"99.9" : 11513.903663559975,
"99.99" : 11513.903663559975,
"99.999" : 11513.903663559975,
"99.9999" : 11513.903663559975,
"100.0" : 11513.903663559975
},
"scoreUnit" : "ops/s",
"rawData" : [
[
11459.460811061701,
11513.903663559975,
11478.07916640766
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.DeepBindBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 20901.454850038463,
"scoreError" : 4942.05684381618,
"scoreConfidence" : [
15959.398006222284,
25843.51169385464
],
"scorePercentiles" : {
"0.0" : 20592.84301420171,
"50.0" : 21011.591966502678,
"90.0" : 21099.929569411,
"95.0" : 21099.929569411,
"99.0" : 21099.929569411,
"99.9" : 21099.929569411,
"99.99" : 21099.929569411,
"99.999" : 21099.929569411,
"99.9999" : 21099.929569411,
"100.0" : 21099.929569411
},
"scoreUnit" : "ops/s",
"rawData" : [
[
21099.929569411,
21011.591966502678,
20592.84301420171
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.DeepBindBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 40833.75880554275,
"scoreError" : 769.5930655078644,
"scoreConfidence" : [
40064.165740034885,
41603.35187105061
],
"scorePercentiles" : {
"0.0" : 40787.73679123219,
"50.0" : 40842.95062685695,
"90.0" : 40870.5889985391,
"95.0" : 40870.5889985391,
"99.0" : 40870.5889985391,
"99.9" : 40870.5889985391,
"99.99" : 40870.5889985391,
"99.999" : 40870.5889985391,
"99.9999" : 40870.5889985391,
"100.0" : 40870.5889985391
},
"scoreUnit" : "ops/s",
"rawData" : [
[
40842.95062685695,
40870.5889985391,
40787.73679123219
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.DeepBindMapBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1351.7797986985388,
"scoreError" : 463.1921497408969,
"scoreConfidence" : [
888.5876489576419,
1814.9719484394357
],
"scorePercentiles" : {
"0.0" : 1323.7780699303541,
"50.0" : 1358.2616842632383,
"90.0" : 1373.2996419020235,
"95.0" : 1373.2996419020235,
"99.0" : 1373.2996419020235,
"99.9" : 1373.2996419020235,
"99.99" : 1373.2996419020235,
"99.999" : 1373.2996419020235,
"99.9999" : 1373.2996419020235,
"100.0" : 1373.2996419020235
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1323.7780699303541,
1358.2616842632383,
1373.2996419020235
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.DeepBindMapBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1590.970793966638,
"scoreError" : 29.11880537462966,
"scoreConfidence" : [
1561.8519885920084,
1620.0895993412676
],
"scorePercentiles" : {
"0.0" : 1589.6337452058372,
"50.0" : 1590.5407917869215,
"90.0" : 1592.7378449071552,
"95.0" : 1592.7378449071552,
"99.0" : 1592.7378449071552,
"99.9" : 1592.7378449071552,
"99.99" : 1592.7378449071552,
"99.999" : 1592.7378449071552,
"99.9999" : 1592.7378449071552,
"100.0" : 1592.7378449071552
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1592.7378449071552,
1589.6337452058372,
1590.5407917869215
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.EnqueueDequeueBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1912.3320533006736,
"scoreError" : 299.62291410602637,
"scoreConfidence" : [
1612.7091391946472,
2211.9549674067
],
"scorePercentiles" : {
"0.0" : 1898.7162304886608,
"50.0" : 1907.7082885101872,
"90.0" : 1930.5716409031731,
"95.0" : 1930.5716409031731,
"99.0" : 1930.5716409031731,
"99.9" : 1930.5716409031731,
"99.99" : 1930.5716409031731,
"99.999" : 1930.5716409031731,
"99.9999" : 1930.5716409031731,
"100.0" : 1930.5716409031731
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1930.5716409031731,
1907.7082885101872,
1898.7162304886608
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.EnqueueDequeueBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1764.851286911981,
"scoreError" : 341.7518756384846,
"scoreConfidence" : [
1423.0994112734966,
2106.6031625504656
],
"scorePercentiles" : {
"0.0" : 1743.4881816094066,
"50.0" : 1772.5964117037904,
"90.0" : 1778.4692674227465,
"95.0" : 1778.4692674227465,
"99.0" : 1778.4692674227465,
"99.9" : 1778.4692674227465,
"99.99" : 1778.4692674227465,
"99.999" : 1778.4692674227465,
"99.9999" : 1778.4692674227465,
"100.0" : 1778.4692674227465
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1772.5964117037904,
1743.4881816094066,
1778.4692674227465
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.ForkManyBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 597.4257768823152,
"scoreError" : 146.19849678696198,
"scoreConfidence" : [
451.2272800953532,
743.6242736692772
],
"scorePercentiles" : {
"0.0" : 589.1887795531936,
"50.0" : 597.8929444135886,
"90.0" : 605.1956066801635,
"95.0" : 605.1956066801635,
"99.0" : 605.1956066801635,
"99.9" : 605.1956066801635,
"99.99" : 605.1956066801635,
"99.999" : 605.1956066801635,
"99.9999" : 605.1956066801635,
"100.0" : 605.1956066801635
},
"scoreUnit" : "ops/s",
"rawData" : [
[
605.1956066801635,
597.8929444135886,
589.1887795531936
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.ForkManyBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 615.1218985239357,
"scoreError" : 121.9271293855501,
"scoreConfidence" : [
493.1947691383856,
737.0490279094857
],
"scorePercentiles" : {
"0.0" : 607.4054320817253,
"50.0" : 618.8919773564883,
"90.0" : 619.0682861335935,
"95.0" : 619.0682861335935,
"99.0" : 619.0682861335935,
"99.9" : 619.0682861335935,
"99.99" : 619.0682861335935,
"99.999" : 619.0682861335935,
"99.9999" : 619.0682861335935,
"100.0" : 619.0682861335935
},
"scoreUnit" : "ops/s",
"rawData" : [
[
619.0682861335935,
618.8919773564883,
607.4054320817253
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.InterruptBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 4401.099473406374,
"scoreError" : 310.56835456762946,
"scoreConfidence" : [
4090.531118838745,
4711.667827974004
],
"scorePercentiles" : {
"0.0" : 4390.87507097944,
"50.0" : 4391.672454508744,
"90.0" : 4420.750894730939,
"95.0" : 4420.750894730939,
"99.0" : 4420.750894730939,
"99.9" : 4420.750894730939,
"99.99" : 4420.750894730939,
"99.999" : 4420.750894730939,
"99.9999" : 4420.750894730939,
"100.0" : 4420.750894730939
},
"scoreUnit" : "ops/s",
"rawData" : [
[
4420.750894730939,
4390.87507097944,
4391.672454508744
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.InterruptBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1173.7057936966796,
"scoreError" : 5587.688659574087,
"scoreConfidence" : [
-4413.982865877408,
6761.3944532707665
],
"scorePercentiles" : {
"0.0" : 913.5432985707445,
"50.0" : 1096.3163480884955,
"90.0" : 1511.2577344307995,
"95.0" : 1511.2577344307995,
"99.0" : 1511.2577344307995,
"99.9" : 1511.2577344307995,
"99.99" : 1511.2577344307995,
"99.999" : 1511.2577344307995,
"99.9999" : 1511.2577344307995,
"100.0" : 1511.2577344307995
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1096.3163480884955,
913.5432985707445,
1511.2577344307995
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.NarrowBindBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 9856.714693458094,
"scoreError" : 5098.232847971735,
"scoreConfidence" : [
4758.481845486359,
14954.947541429829
],
"scorePercentiles" : {
"0.0" : 9618.240140983164,
"50.0" : 9787.695574235431,
"90.0" : 10164.208365155682,
"95.0" : 10164.208365155682,
"99.0" : 10164.208365155682,
"99.9" : 10164.208365155682,
"99.99" : 10164.208365155682,
"99.999" : 10164.208365155682,
"99.9999" : 10164.208365155682,
"100.0" : 10164.208365155682
},
"scoreUnit" : "ops/s",
"rawData" : [
[
10164.208365155682,
9787.695574235431,
9618.240140983164
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.NarrowBindBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 14282.855216893964,
"scoreError" : 5795.497268339982,
"scoreConfidence" : [
8487.357948553981,
20078.352485233947
],
"scorePercentiles" : {
"0.0" : 13916.109746980848,
"50.0" : 14460.060876916285,
"90.0" : 14472.39502678476,
"95.0" : 14472.39502678476,
"99.0" : 14472.39502678476,
"99.9" : 14472.39502678476,
"99.99" : 14472.39502678476,
"99.999" : 14472.39502678476,
"99.9999" : 14472.39502678476,
"100.0" : 14472.39502678476
},
"scoreUnit" : "ops/s",
"rawData" : [
[
14472.39502678476,
14460.060876916285,
13916.109746980848
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.NarrowBindMapBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1483.1697941939844,
"scoreError" : 1452.3629298893297,
"scoreConfidence" : [
30.80686430465471,
2935.532724083314
],
"scorePercentiles" : {
"0.0" : 1393.3107848871477,
"50.0" : 1511.318421084504,
"90.0" : 1544.880176610302,
"95.0" : 1544.880176610302,
"99.0" : 1544.880176610302,
"99.9" : 1544.880176610302,
"99.99" : 1544.880176610302,
"99.999" : 1544.880176610302,
"99.9999" : 1544.880176610302,
"100.0" : 1544.880176610302
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1511.318421084504,
1393.3107848871477,
1544.880176610302
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.NarrowBindMapBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1736.4548751407904,
"scoreError" : 13.078075975079717,
"scoreConfidence" : [
1723.3767991657107,
1749.53295111587
],
"scorePercentiles" : {
"0.0" : 1735.6805705548368,
"50.0" : 1736.5886143133894,
"90.0" : 1737.0954405541447,
"95.0" : 1737.0954405541447,
"99.0" : 1737.0954405541447,
"99.9" : 1737.0954405541447,
"99.99" : 1737.0954405541447,
"99.999" : 1737.0954405541447,
"99.9999" : 1737.0954405541447,
"100.0" : 1737.0954405541447
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1735.6805705548368,
1737.0954405541447,
1736.5886143133894
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.PingPongBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 2151.4767650497115,
"scoreError" : 1027.8030034449232,
"scoreConfidence" : [
1123.6737616047883,
3179.2797684946345
],
"scorePercentiles" : {
"0.0" : 2087.6616631125676,
"50.0" : 2172.447146960253,
"90.0" : 2194.321485076314,
"95.0" : 2194.321485076314,
"99.0" : 2194.321485076314,
"99.9" : 2194.321485076314,
"99.99" : 2194.321485076314,
"99.999" : 2194.321485076314,
"99.9999" : 2194.321485076314,
"100.0" : 2194.321485076314
},
"scoreUnit" : "ops/s",
"rawData" : [
[
2087.6616631125676,
2194.321485076314,
2172.447146960253
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.PingPongBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 2008.7650812725335,
"scoreError" : 586.4630283373368,
"scoreConfidence" : [
1422.3020529351966,
2595.2281096098704
],
"scorePercentiles" : {
"0.0" : 1972.324321134066,
"50.0" : 2020.8682975864053,
"90.0" : 2033.1026250971295,
"95.0" : 2033.1026250971295,
"99.0" : 2033.1026250971295,
"99.9" : 2033.1026250971295,
"99.99" : 2033.1026250971295,
"99.999" : 2033.1026250971295,
"99.9999" : 2033.1026250971295,
"100.0" : 2033.1026250971295
},
"scoreUnit" : "ops/s",
"rawData" : [
[
2020.8682975864053,
1972.324321134066,
2033.1026250971295
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.ProducerConsumerBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1781.4470223999633,
"scoreError" : 616.6677194005728,
"scoreConfidence" : [
1164.7793029993904,
2398.114741800536
],
"scorePercentiles" : {
"0.0" : 1749.1233708507502,
"50.0" : 1778.6632172344696,
"90.0" : 1816.5544791146704,
"95.0" : 1816.5544791146704,
"99.0" : 1816.5544791146704,
"99.9" : 1816.5544791146704,
"99.99" : 1816.5544791146704,
"99.999" : 1816.5544791146704,
"99.9999" : 1816.5544791146704,
"100.0" : 1816.5544791146704
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1778.6632172344696,
1749.1233708507502,
1816.5544791146704
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.ProducerConsumerBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1815.770650561194,
"scoreError" : 254.4796312586308,
"scoreConfidence" : [
1561.2910193025632,
2070.250281819825
],
"scorePercentiles" : {
"0.0" : 1799.9091920328065,
"50.0" : 1821.2760846457033,
"90.0" : 1826.1266750050722,
"95.0" : 1826.1266750050722,
"99.0" : 1826.1266750050722,
"99.9" : 1826.1266750050722,
"99.99" : 1826.1266750050722,
"99.999" : 1826.1266750050722,
"99.9999" : 1826.1266750050722,
"100.0" : 1826.1266750050722
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1826.1266750050722,
1799.9091920328065,
1821.2760846457033
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.SemaphoreBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1171.9542586526456,
"scoreError" : 729.288053537655,
"scoreConfidence" : [
442.6662051149907,
1901.2423121903007
],
"scorePercentiles" : {
"0.0" : 1139.8133221133346,
"50.0" : 1159.3332662792295,
"90.0" : 1216.7161875653724,
"95.0" : 1216.7161875653724,
"99.0" : 1216.7161875653724,
"99.9" : 1216.7161875653724,
"99.99" : 1216.7161875653724,
"99.999" : 1216.7161875653724,
"99.9999" : 1216.7161875653724,
"100.0" : 1216.7161875653724
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1216.7161875653724,
1159.3332662792295,
1139.8133221133346
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.SemaphoreBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1146.4048082251581,
"scoreError" : 92.12814900224046,
"scoreConfidence" : [
1054.2766592229177,
1238.5329572273986
],
"scorePercentiles" : {
"0.0" : 1140.8135625435414,
"50.0" : 1147.7670743475712,
"90.0" : 1150.6337877843619,
"95.0" : 1150.6337877843619,
"99.0" : 1150.6337877843619,
"99.9" : 1150.6337877843619,
"99.99" : 1150.6337877843619,
"99.999" : 1150.6337877843619,
"99.9999" : 1150.6337877843619,
"100.0" : 1150.6337877843619
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1140.8135625435414,
1147.7670743475712,
1150.6337877843619
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.SuspensionBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 62130.50623193384,
"scoreError" : 14675.00191727114,
"scoreConfidence" : [
47455.5043146627,
76805.50814920498
],
"scorePercentiles" : {
"0.0" : 61258.922257287166,
"50.0" : 62288.281188327535,
"90.0" : 62844.31525018684,
"95.0" : 62844.31525018684,
"99.0" : 62844.31525018684,
"99.9" : 62844.31525018684,
"99.99" : 62844.31525018684,
"99.999" : 62844.31525018684,
"99.9999" : 62844.31525018684,
"100.0" : 62844.31525018684
},
"scoreUnit" : "ops/s",
"rawData" : [
[
61258.922257287166,
62288.281188327535,
62844.31525018684
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.SuspensionBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 5,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1116013.6798865758,
"scoreError" : 32840.083312689894,
"scoreConfidence" : [
1083173.596573886,
1148853.7631992656
],
"scorePercentiles" : {
"0.0" : 1114035.6517685137,
"50.0" : 1116449.6782244754,
"90.0" : 1117555.7096667383,
"95.0" : 1117555.7096667383,
"99.0" : 1117555.7096667383,
"99.9" : 1117555.7096667383,
"99.99" : 1117555.7096667383,
"99.999" : 1117555.7096667383,
"99.9999" : 1117555.7096667383,
"100.0" : 1117555.7096667383
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1117555.7096667383,
1114035.6517685137,
1116449.6782244754
]
]
},
"secondaryMetrics" : {
}
}
]
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 400px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(25);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,43,3,'all')
f(1,0,43,1,'java/lang/Thread.run')
f(2,0,43,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,43,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,37,1,'java/util/concurrent/FutureTask.run')
f(5,0,37,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,37,1,'java/util/concurrent/FutureTask.run')
f(7,0,37,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,37,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,37,1,'java/lang/reflect/Method.invoke')
f(10,0,37,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,37,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,37,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,37,1,'kyo/bench/jmh_generated/BroadFlatMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,37,1,'kyo/bench/jmh_generated/BroadFlatMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,37,1,'kyo/bench/Bench.forkKyo')
f(16,0,10,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,0,10,2,'kyo.bench.Bench$$anon$1')
f(16,10,18,1,'kyo/bench/Bench.runLoop$2')
f(17,10,7,1,'kyo/bench/Bench$$anon$1.apply')
f(18,10,7,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,10,7,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,10,7,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(21,10,7,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,10,5,2,'kyo.concurrent.scheduler.IOTask')
f(22,15,2,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,15,2,2,'kyo.concurrent.fibers$Fiber')
f(17,17,11,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,17,11,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,17,11,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,17,11,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,17,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,17,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,17,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,17,1,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,18,3,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,21,7,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,21,7,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,21,7,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,28,9,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,28,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,28,1,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,29,8,1,'kyo/locals$Locals$.save')
f(18,29,8,2,'kyo.locals$Locals$$anon$3')
f(4,37,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e5f8.run')
f(5,37,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,37,1,1,'kyo/concurrent/scheduler/Coordinator$.jitter')
f(7,37,1,1,'scala/Predef$.long2Long')
f(8,37,1,1,'java/lang/Long.valueOf')
f(9,37,1,2,'java.lang.Long')
f(4,38,5,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,38,5,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,38,5,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,38,5,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,38,5,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,38,5,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,38,5,1,'scala/runtime/ObjectRef.create')
f(11,38,5,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: 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,199,3,'all')
f(1,0,4,3,'[unknown_Java]')
f(2,0,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(1,4,195,1,'java/lang/Thread.run')
f(2,4,195,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,4,195,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,4,65,1,'java/util/concurrent/FutureTask.run')
f(5,4,65,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,4,65,1,'java/util/concurrent/FutureTask.run')
f(7,4,65,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,4,65,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,4,65,1,'java/lang/reflect/Method.invoke')
f(10,4,65,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,4,65,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,4,65,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,4,65,1,'kyo/bench/jmh_generated/BroadFlatMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,4,65,1,'kyo/bench/jmh_generated/BroadFlatMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,4,65,1,'kyo/bench/Bench.forkKyo',1,0,0)
f(16,4,65,1,'kyo/bench/Bench.runLoop$2',1,0,0)
f(17,4,32,1,'kyo/bench/Bench$$anon$1.apply')
f(18,4,32,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,4,32,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,5,31,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(21,5,31,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,5,31,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,5,31,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,5,30,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,5,30,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,5,30,1,'jdk/internal/misc/Unsafe.unpark')
f(27,5,30,3,'pthread_cond_signal')
f(28,6,29,5,'entry_SYSCALL_64_after_hwframe')
f(29,6,29,5,'do_syscall_64')
f(30,6,29,5,'__x64_sys_futex')
f(31,6,29,5,'do_futex')
f(32,7,28,5,'futex_wake')
f(33,8,1,5,'mark_wake_futex')
f(33,9,26,5,'wake_up_q')
f(34,9,26,5,'_raw_spin_unlock_irqrestore')
f(24,35,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.poll')
f(25,35,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.switchToNextConsumerChunkAndPoll')
f(26,35,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.moveToNextConsumerChunk')
f(27,35,1,2,'org/jctools/queues/SpscArrayQueue.offer',1,0,0)
f(17,36,33,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply',1,0,0)
f(18,36,33,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply',1,0,0)
f(19,36,33,1,'kyo/concurrent/scheduler/IOPromise.block',1,0,0)
f(20,36,33,1,'kyo/concurrent/scheduler/IOPromise.loop$4',1,0,0)
f(21,36,32,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,36,32,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,38,30,1,'java/util/concurrent/locks/LockSupport.park')
f(24,38,30,1,'jdk/internal/misc/Unsafe.park')
f(25,39,1,4,'AccessInternal::PostRuntimeDispatch<G1BarrierSet::AccessBarrier<548964ul, G1BarrierSet>, (AccessInternal::BarrierType)2, 548964ul>::oop_access_barrier(void*)')
f(25,40,3,3,'Unsafe_Park')
f(26,41,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,42,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,42,1,5,'do_syscall_64')
f(29,42,1,5,'__x64_sys_futex')
f(25,43,25,3,'[unknown]')
f(26,43,25,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,44,24,5,'entry_SYSCALL_64_after_hwframe')
f(28,44,24,5,'do_syscall_64')
f(29,44,22,5,'__x64_sys_futex')
f(30,44,22,5,'do_futex')
f(31,44,22,5,'futex_wait')
f(32,45,3,5,'__get_user_nocheck_4')
f(32,48,18,5,'futex_wait_queue_me')
f(33,48,18,5,'schedule')
f(34,48,18,5,'__schedule')
f(35,48,18,5,'finish_task_switch.isra.0')
f(29,66,1,5,'syscall_enter_from_user_mode')
f(29,67,1,5,'syscall_exit_to_user_mode')
f(30,67,1,5,'exit_to_user_mode_prepare')
f(31,67,1,5,'exit_to_user_mode_loop')
f(32,67,1,5,'__rseq_handle_notify_resume')
f(21,68,1,2,'kyo/concurrent/scheduler/IOPromise.loop$5',1,0,0)
f(22,68,1,2,'kyo/concurrent/scheduler/IOPromise$Pending.add',1,0,0)
f(23,68,1,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.<init>',1,0,0)
f(4,69,130,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,69,130,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,69,130,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,69,92,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,69,92,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,69,65,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,69,65,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,69,65,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e9f8.apply')
f(12,69,65,1,'kyo/bench/Bench.$anonfun$1')
f(13,69,65,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,69,65,1,'kyo/bench/BroadFlatMapBench.kyoBench')
f(15,69,65,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(16,69,29,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(17,69,29,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(18,69,29,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(19,69,29,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,69,10,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(21,69,10,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(22,69,10,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(23,69,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,69,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,69,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(26,69,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,69,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,69,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,69,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(30,69,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,69,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,69,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,69,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(34,69,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,69,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,69,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(39,69,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(40,69,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(41,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,70,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,71,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,71,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,71,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,71,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,71,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,71,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(38,71,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',1,0,0)
f(28,72,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,72,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,72,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,72,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,72,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(33,72,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,72,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,72,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(37,72,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,72,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,72,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(42,72,1,2,'scala/math/BigInt.<init>',1,0,0)
f(31,73,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,73,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,73,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(34,73,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,73,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,73,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,74,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,74,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,74,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(27,74,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,74,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,74,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,74,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(31,74,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,74,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,74,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,74,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,75,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,75,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(35,75,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,75,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,75,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(39,75,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,75,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(43,75,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',1,0,0)
f(44,75,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(45,75,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$1',1,0,0)
f(25,76,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,76,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,76,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(28,76,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,76,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,76,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,76,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(32,76,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,76,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,76,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,76,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,76,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,76,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',1,0,0)
f(26,77,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,77,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,77,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(29,77,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,77,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,77,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,77,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(33,77,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,77,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,78,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,78,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,78,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,78,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,78,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(20,79,19,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,79,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(22,79,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(23,79,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,79,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,79,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,79,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(27,79,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,79,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,79,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(30,79,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',1,0,0)
f(31,80,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,80,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,80,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,80,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(35,80,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',1,0,0)
f(36,80,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(25,81,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,81,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,81,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(28,81,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,81,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(32,81,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',1,0,0)
f(33,81,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(26,82,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,82,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,82,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(29,82,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,82,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,82,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(33,82,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,82,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,82,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,83,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,83,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,83,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(30,83,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,83,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,83,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,83,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(34,83,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,83,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,83,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,84,14,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,84,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,84,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(24,84,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,84,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,84,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,84,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(28,84,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,84,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,84,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,84,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(32,84,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,84,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,84,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,85,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,85,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',1,0,0)
f(35,85,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(26,86,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,86,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,86,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(29,86,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,86,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,86,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,86,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(33,86,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,86,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,86,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,86,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,87,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,87,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,87,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(30,87,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,87,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,87,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,87,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(34,87,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,87,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,87,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,88,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,88,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,88,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(31,88,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,88,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,88,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,88,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',1,0,0)
f(35,88,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(22,89,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,89,6,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(24,89,6,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',2,0,0)
f(25,89,6,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',2,0,0)
f(26,91,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,92,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,92,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(29,92,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,92,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
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.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,92,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(35,92,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,92,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,92,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,92,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,92,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,93,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,93,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,93,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(30,93,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,93,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,93,1,2,'scala/math/BigInt$.apply',1,0,0)
f(28,94,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,94,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,94,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,94,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',1,0,0)
f(23,95,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,95,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,95,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(26,95,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,95,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,95,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,95,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(30,95,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,95,1,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.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,95,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(36,95,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,95,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,95,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,95,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,96,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,96,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(26,96,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',1,0,0)
f(27,96,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(28,97,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,97,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,97,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,97,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(32,97,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d44400.newInvokeSpecial',1,0,0)
f(33,97,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.<init>',1,0,0)
f(16,98,36,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(17,98,14,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(18,98,14,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(19,98,14,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(20,98,14,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,98,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(22,98,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(23,98,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,98,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,98,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,98,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(27,98,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,98,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,98,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,98,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(31,98,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,98,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,98,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,98,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(35,98,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,98,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,98,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,98,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,98,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(25,99,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,99,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,99,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(28,99,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,99,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,99,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,99,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(32,99,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,99,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,99,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(35,99,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',1,0,0)
f(26,100,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,100,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,100,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(29,100,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',1,0,0)
f(30,100,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
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(33,101,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,101,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',1,0,0)
f(21,102,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,102,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,102,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(24,102,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,102,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,102,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,102,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,102,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(29,102,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,102,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,102,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,102,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(33,102,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$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,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,102,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',1,0,0)
f(27,103,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,103,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,103,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,103,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(31,103,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,103,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,103,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,103,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(35,103,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',1,0,0)
f(36,104,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,104,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,104,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,105,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,105,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,105,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(25,105,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,105,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,105,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,105,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(29,105,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,105,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,105,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
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.0x0000000800d45460.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.kyoFib$1')
f(38,105,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,105,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,105,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,106,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,106,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,106,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(30,106,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,107,2,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.0x0000000800d45460.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.kyoFib$1')
f(34,107,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,107,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,108,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,108,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,108,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,108,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(23,109,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,109,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,109,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(26,109,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,109,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,109,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,109,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(30,109,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,109,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,109,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,109,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,109,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',1,0,0)
f(24,110,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,110,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,110,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,110,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,110,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,110,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(30,110,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,110,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,111,1,2,'scala/math/BigInt$.apply',1,0,0)
f(27,111,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(17,112,22,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(18,112,10,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(19,112,10,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(20,112,10,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(21,112,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,112,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,112,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(24,112,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,112,4,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.0x0000000800d45460.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.0x0000000800d45460.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,2,'scala/math/BigInt$.apply',1,0,0)
f(26,113,3,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.0x0000000800d45460.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.0x0000000800d45460.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,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,113,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,113,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,114,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,114,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,114,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(30,114,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,114,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,114,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,114,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,114,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,114,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,115,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,115,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,115,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,115,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',1,0,0)
f(22,116,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,116,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(24,116,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',1,0,0)
f(25,117,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,117,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,117,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,117,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(29,117,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,117,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,117,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,117,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(33,117,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,117,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,117,1,2,'scala/math/BigInt$.apply',1,0,0)
f(27,118,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,118,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,118,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(30,118,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,118,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,118,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,118,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(34,118,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,118,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,118,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,118,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,118,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,118,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,118,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(23,119,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,119,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,119,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(26,119,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
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,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,119,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(32,119,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,119,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,120,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,120,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,121,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,121,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,121,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,121,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(28,121,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,121,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,121,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,121,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',1,0,0)
f(32,121,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(18,122,12,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(19,122,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(20,122,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(21,122,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(22,122,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,122,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,122,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(25,122,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,122,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,123,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,123,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(29,123,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,123,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,123,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,123,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,123,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,123,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,123,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,123,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(23,124,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,124,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,124,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(26,124,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,124,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,124,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,124,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(30,124,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,124,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,124,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,124,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,124,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',1,0,0)
f(24,125,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,125,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,125,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(27,125,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,125,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,126,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,126,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,126,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,126,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(29,126,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,126,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,126,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,126,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(33,126,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,126,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,126,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,126,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(37,126,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,126,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,126,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,126,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(19,127,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,127,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(21,127,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',2,0,0)
f(22,127,3,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',2,0,0)
f(23,129,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,129,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,129,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,129,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,129,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(28,129,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,129,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,129,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,129,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,129,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,130,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,130,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(22,130,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(23,130,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,130,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,130,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(26,130,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',1,0,0)
f(27,130,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(25,131,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,131,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,131,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(28,131,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',1,0,0)
f(29,131,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(21,132,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,132,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,132,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(24,132,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,132,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,132,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,132,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,132,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(29,132,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,132,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,132,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,132,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,132,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply',1,0,0)
f(22,133,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,133,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,133,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,133,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45460.apply')
f(26,133,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,133,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,133,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,133,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,133,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(9,134,27,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,134,27,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,134,27,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,134,27,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,134,27,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,134,27,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,134,27,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,134,27,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,134,27,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,134,27,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,134,27,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,134,27,1,'jdk/internal/misc/Unsafe.unpark')
f(21,134,1,3,'Unsafe_Unpark')
f(22,134,1,3,'pthread_mutex_lock')
f(21,135,1,3,'__tls_get_addr')
f(21,136,25,3,'pthread_cond_signal')
f(22,136,25,5,'entry_SYSCALL_64_after_hwframe')
f(23,136,2,5,'__x64_sys_futex')
f(23,138,23,5,'do_syscall_64')
f(24,138,21,5,'__x64_sys_futex')
f(25,138,21,5,'do_futex')
f(26,138,21,5,'futex_wake')
f(27,138,1,5,'wake_q_add_safe')
f(27,139,20,5,'wake_up_q')
f(28,139,20,5,'_raw_spin_unlock_irqrestore')
f(24,159,1,5,'syscall_enter_from_user_mode')
f(24,160,1,5,'syscall_exit_to_user_mode_prepare')
f(7,161,3,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,161,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,161,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(8,162,2,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,162,2,1,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d475a8.apply')
f(10,162,2,1,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1')
f(11,162,2,1,'scala/collection/mutable/PriorityQueue.dequeue')
f(12,163,1,1,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array')
f(7,164,35,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,164,35,1,'kyo/concurrent/scheduler/Worker.park')
f(9,164,35,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,164,35,1,'jdk/internal/misc/Unsafe.park')
f(11,166,1,3,'Unsafe_Park')
f(12,166,1,3,'clock_gettime')
f(11,167,32,3,'[unknown]')
f(12,167,32,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,168,31,5,'entry_SYSCALL_64_after_hwframe')
f(14,168,31,5,'do_syscall_64')
f(15,168,30,5,'__x64_sys_futex')
f(16,168,30,5,'do_futex')
f(17,169,29,5,'futex_wait')
f(18,169,1,5,'_raw_spin_lock')
f(18,170,26,5,'futex_wait_queue_me')
f(19,172,3,5,'hrtimer_sleeper_start_expires')
f(20,172,2,5,'_raw_spin_unlock_irqrestore')
f(20,174,1,5,'hrtimer_start_range_ns')
f(21,174,1,5,'_raw_spin_lock_irqsave')
f(19,175,21,5,'schedule')
f(20,175,21,5,'__schedule')
f(21,176,20,5,'finish_task_switch.isra.0')
f(18,196,2,5,'futex_wait_setup')
f(19,197,1,5,'get_futex_key')
f(15,198,1,5,'syscall_exit_to_user_mode')
f(16,198,1,5,'exit_to_user_mode_prepare')
f(17,198,1,5,'exit_to_user_mode_loop')
f(18,198,1,5,'__rseq_handle_notify_resume')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 16px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(1);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,0,2,'all')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 832px}
</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(52);
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,7,3,'[unknown_Java]')
f(2,0,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(1,7,292,1,'java/lang/Thread.run')
f(2,7,292,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,7,292,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,7,292,1,'java/util/concurrent/FutureTask.run')
f(5,7,292,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,7,292,1,'java/util/concurrent/FutureTask.run')
f(7,7,292,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,7,292,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,7,292,1,'java/lang/reflect/Method.invoke')
f(10,7,292,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,7,292,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,7,292,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,7,292,1,'kyo/bench/jmh_generated/BroadFlatMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,7,292,1,'kyo/bench/jmh_generated/BroadFlatMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,7,292,1,'kyo/bench/Bench.syncKyo')
f(16,7,292,1,'kyo/bench/BroadFlatMapBench.kyoBench')
f(17,7,292,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(18,7,102,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(19,7,102,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(20,7,102,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(21,7,102,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,8,43,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,8,43,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(24,8,43,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,8,43,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,8,19,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,8,19,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,8,19,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,8,19,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,8,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,8,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,8,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,8,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,8,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(35,8,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(36,8,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(37,9,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,9,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(39,9,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(40,9,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(41,9,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,10,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,10,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(44,10,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(45,10,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(38,11,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,11,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,11,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,11,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(38,12,2,2,'scala/math/BigInt$.apply',2,0,0)
f(34,14,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,14,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,14,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,14,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(38,14,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(39,14,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(30,15,11,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,15,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,15,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,15,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,15,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,15,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,15,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,15,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,15,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,15,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,15,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,15,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,15,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(40,16,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,16,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,17,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,17,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(33,17,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(34,17,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(32,18,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,18,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,18,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,18,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,18,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,18,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,18,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(39,18,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(40,18,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(41,18,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,19,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,19,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,19,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,19,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,19,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,19,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,19,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,19,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,19,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,19,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(42,19,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(43,19,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(44,19,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(45,19,1,2,'scala/math/BigInt$.apply',1,0,0)
f(46,19,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,20,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,20,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,20,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,20,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,20,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(38,21,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,21,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,21,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,21,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,21,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,21,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(44,21,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(45,21,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(46,21,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(47,21,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$1',1,0,0)
f(35,22,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,22,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(37,22,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(38,22,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(36,23,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,23,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,24,2,2,'scala/math/BigInt$.apply',2,0,0)
f(33,24,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(30,26,1,2,'scala/math/BigInt$.apply',1,0,0)
f(26,27,24,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
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,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,27,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,27,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,27,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,27,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,27,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,27,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,27,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,27,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(40,27,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(41,27,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(42,28,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,29,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,29,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,29,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,29,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(43,29,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(44,29,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
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(38,31,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,31,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,31,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,32,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,32,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(33,32,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(34,32,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(32,33,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,33,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,33,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,33,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,33,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,33,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,34,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,34,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,34,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,34,2,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(36,35,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,35,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,36,13,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,36,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,36,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,36,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,36,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,36,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,36,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,36,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,36,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,36,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,37,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,37,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,37,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,37,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,38,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,38,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,38,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,38,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,38,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,38,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,38,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,39,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,39,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,40,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,40,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,40,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,40,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,40,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,40,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,41,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,41,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,41,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,41,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,41,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,41,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,42,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,42,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,42,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,42,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,42,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,42,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,42,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,42,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,42,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,42,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,43,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,44,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,45,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,45,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,46,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,46,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,46,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,46,2,2,'scala/math/BigInt$.apply',2,0,0)
f(35,46,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(31,48,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,48,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,49,2,2,'scala/math/BigInt$.apply',2,0,0)
f(28,49,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(22,51,58,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,51,27,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(24,51,27,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(25,51,27,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',2,0,0)
f(26,53,25,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,53,14,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,53,14,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,53,14,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,53,14,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,53,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,53,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,53,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,53,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,53,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,53,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,53,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,53,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,53,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(40,53,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(41,53,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(42,54,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,54,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(44,54,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(45,54,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(46,54,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(47,54,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(48,54,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(49,54,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(50,54,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(51,54,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$1',1,0,0)
f(39,55,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,55,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,55,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,55,1,2,'scala/math/BigInt$.apply',1,0,0)
f(43,55,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(44,55,1,2,'scala/math/BigInt.<init>',1,0,0)
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,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,57,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(37,57,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(38,58,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(36,59,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,59,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,59,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,59,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,59,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,59,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,59,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,60,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,60,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,60,1,2,'scala/math/BigInt.<init>',1,0,0)
f(31,61,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,61,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,61,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,61,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,61,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,61,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,61,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,61,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(39,62,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,62,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(41,62,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(42,62,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(43,62,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(44,62,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(45,62,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(46,62,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(47,62,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(48,62,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$1',1,0,0)
f(36,63,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,63,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,63,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(39,63,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(40,63,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(41,63,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,64,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,64,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,65,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,65,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,65,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,65,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,65,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,65,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,65,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,66,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,66,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,66,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,66,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,66,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(44,66,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(45,66,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(46,66,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(47,66,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(48,66,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(49,66,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(27,67,11,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,67,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,67,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,67,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,67,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,68,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,68,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,68,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,68,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,68,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,68,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,68,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,68,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,69,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,69,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,69,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,69,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(39,69,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(40,69,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(41,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,70,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,70,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,70,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,70,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,70,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,70,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,70,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,70,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,70,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,71,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,71,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,71,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,71,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,71,1,2,'scala/math/BigInt$.apply',1,0,0)
f(42,71,1,2,'scala/math/BigInt$.getCached',1,0,0)
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(33,73,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,73,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,73,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,74,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,74,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(36,74,1,2,'scala/math/BigInt.<init>',1,0,0)
f(29,75,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,75,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,75,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,75,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,75,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,75,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,75,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,75,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,75,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,75,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,76,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,76,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,76,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,76,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,76,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,76,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,76,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,76,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,76,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,76,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,76,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,77,1,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$39.0x0000000800ca1228.apply')
f(34,77,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,77,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,78,31,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,78,10,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,78,10,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(26,78,10,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,78,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,78,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(29,78,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(30,78,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(31,79,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,79,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,79,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,79,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,79,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,79,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,79,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,79,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,79,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,80,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,80,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(34,80,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(35,82,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,82,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(40,82,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(33,83,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,83,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,83,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,83,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,83,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,83,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,83,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(39,84,1,2,'scala/math/BigInt$.apply',1,0,0)
f(28,85,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,85,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,85,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,85,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,85,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,85,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,85,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,85,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(39,85,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(29,86,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,86,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,86,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,86,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,86,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,86,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,87,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,87,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,87,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,87,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,87,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,87,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,87,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,87,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,87,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,87,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,88,21,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,88,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,88,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,88,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,88,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,88,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,88,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,88,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,88,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,88,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,88,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,88,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,88,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,88,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,88,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,88,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,88,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,89,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,89,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(35,89,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(36,89,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(34,90,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,90,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,90,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,90,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,90,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(39,90,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(40,90,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(41,90,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(29,92,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,92,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,92,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,92,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,92,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,92,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,92,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,92,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,93,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,93,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(32,93,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(33,93,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(31,94,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,94,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,94,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,94,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,94,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,94,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,94,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,95,14,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,96,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,96,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,96,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,96,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,96,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,96,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,96,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,96,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,96,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,96,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,97,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,97,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,97,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,97,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,97,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,97,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,98,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,98,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,98,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,98,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,98,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,98,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,98,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,99,2,2,'scala/math/BigInt$.apply',2,0,0)
f(32,99,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(33,100,1,2,'scala/math/BigInt.<init>',1,0,0)
f(26,101,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,101,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,101,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,101,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,101,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,101,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,101,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,101,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,101,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,101,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,101,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,102,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,103,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,103,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,104,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,104,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,104,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,104,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(32,105,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,105,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,105,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,105,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,105,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,106,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,106,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,106,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,106,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,106,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(35,106,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(28,107,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,107,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,107,2,2,'scala/math/BigInt$.apply',2,0,0)
f(31,107,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(18,109,190,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(19,109,74,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(20,109,74,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(21,109,74,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(22,109,74,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,109,31,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,109,31,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(25,109,31,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,109,31,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,109,11,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,109,11,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,109,11,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,109,11,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,109,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(32,109,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(33,110,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,110,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,110,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,110,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,110,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,111,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,111,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,112,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,112,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,112,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,112,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,112,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(37,113,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,114,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,114,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,114,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,114,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,114,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,115,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,116,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,116,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,116,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,116,3,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(36,117,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,117,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,117,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,117,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,117,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,117,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,117,1,2,'scala/math/BigInt$.apply',1,0,0)
f(43,117,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(44,117,1,2,'scala/math/BigInt.<init>',1,0,0)
f(37,118,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,119,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,119,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,119,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,119,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,119,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,120,20,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,120,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,120,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,120,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,120,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,120,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,120,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,120,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,120,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,120,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,120,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,121,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,121,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,121,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,121,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,121,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(35,122,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,122,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,122,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,122,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,122,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,124,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,125,15,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,125,9,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,125,9,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,125,9,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,125,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,125,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,125,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,125,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(33,126,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,127,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,127,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,127,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,127,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,127,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,127,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,127,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,127,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(42,127,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(43,127,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(44,127,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$1',1,0,0)
f(39,128,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,129,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,130,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,131,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,131,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,131,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(35,132,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,132,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,133,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,133,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,134,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,134,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,134,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,134,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,134,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,134,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,134,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,134,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(37,134,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(38,134,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(30,135,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,135,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,135,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,135,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,135,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,135,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,135,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,136,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,136,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,137,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,137,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,137,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,138,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,138,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,139,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,139,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(23,140,43,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,140,13,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,140,13,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(26,140,13,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,140,13,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,140,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,140,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,140,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,140,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,140,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,140,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,140,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,140,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,140,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,140,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,140,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,140,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,140,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,140,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,141,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,141,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,141,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(33,142,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,142,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,142,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,142,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,142,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,143,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,143,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,143,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,143,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,143,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,143,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,143,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,144,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,144,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,144,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,144,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,144,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,144,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,144,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,144,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,145,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,146,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,146,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,146,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,146,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,146,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,146,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,146,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,146,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,147,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,147,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,147,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,148,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,149,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,149,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,149,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(30,150,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,150,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,150,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,150,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,150,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,151,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,151,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,151,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,151,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,151,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,152,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,152,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,152,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,152,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,152,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,152,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,152,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,152,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,152,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,152,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,152,1,2,'scala/math/BigInt$.apply',1,0,0)
f(42,152,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,153,30,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,153,10,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,153,10,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,153,10,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,153,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,153,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,153,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,153,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,153,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,153,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,153,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,153,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,153,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,153,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,153,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,153,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,153,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,153,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(42,153,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(43,153,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(44,153,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(45,153,1,2,'scala/math/BigInt$.apply',1,0,0)
f(46,153,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,154,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,154,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,154,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,154,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,154,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,154,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,154,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,155,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,155,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,155,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,155,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(29,156,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,156,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,156,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,157,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,157,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,157,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,157,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,157,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,158,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,158,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,158,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,159,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,160,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,160,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,160,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,160,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,160,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,161,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,161,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,161,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,161,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,162,1,2,'scala/math/BigInt$.apply',1,0,0)
f(25,163,20,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,163,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,163,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,163,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,163,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,163,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,163,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,163,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(33,164,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,164,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,164,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,164,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,164,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,164,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,164,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,164,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,164,1,2,'scala/math/BigInt.<init>',1,0,0)
f(34,165,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,165,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,165,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,165,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,165,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,165,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,166,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,167,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,167,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,167,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,167,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,167,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,168,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,168,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,168,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,168,1,2,'scala/math/BigInt$.apply',1,0,0)
f(26,169,14,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,169,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(28,169,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(29,170,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,170,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,170,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,170,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,170,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,170,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,170,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,170,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,170,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,170,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,170,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,170,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,170,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,170,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,170,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(44,171,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(45,171,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(46,171,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(47,171,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$1',1,0,0)
f(31,172,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,172,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,172,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,172,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(32,173,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,173,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,173,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,173,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,173,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(37,173,1,2,'scala/math/BigInt.<init>',1,0,0)
f(33,174,2,2,'scala/math/BigInt$.apply',2,0,0)
f(34,175,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,175,1,2,'scala/math/BigInt.<init>',1,0,0)
f(27,176,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,176,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,176,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,176,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,176,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,176,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,176,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(28,177,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,177,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(30,177,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(31,178,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,178,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,178,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,178,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,178,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,178,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,178,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,178,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,178,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,178,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,178,1,2,'scala/math/BigInt$.apply',1,0,0)
f(42,178,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,179,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,179,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(31,179,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(32,179,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(30,180,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,180,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,180,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,180,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,180,2,2,'scala/math/BigInt$.apply',2,0,0)
f(35,180,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(30,182,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,182,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,182,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(19,183,116,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,183,43,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(21,183,43,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(22,183,43,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(23,183,43,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,183,17,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,183,17,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(26,183,17,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,183,17,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,183,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(29,183,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(30,184,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,184,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,184,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,184,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,184,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,184,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,185,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,185,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,185,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,185,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,185,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,185,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,185,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(43,185,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(44,185,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(36,186,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,187,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,187,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,187,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,188,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,188,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,188,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,188,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,188,2,2,'scala/math/BigInt$.apply',2,0,0)
f(40,188,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(33,190,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,190,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,191,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,191,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,191,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,191,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,191,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,191,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,191,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,191,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,191,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,191,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,191,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(39,191,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(40,191,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(41,191,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,192,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,192,3,2,'scala/math/BigInt$.apply',3,0,0)
f(40,192,3,2,'scala/math/BigInt$.getCached',3,0,0)
f(41,194,1,2,'scala/math/BigInt.<init>',1,0,0)
f(33,195,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,195,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,195,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,195,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,195,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(29,196,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,196,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,196,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,196,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,196,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,196,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,196,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,196,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,197,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,197,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,198,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,198,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,198,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,198,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(31,199,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,199,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,200,26,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,200,10,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,200,10,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,200,10,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,200,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,202,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,202,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,202,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,202,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,202,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,202,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,202,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,202,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,202,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,203,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,203,4,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(31,203,4,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(32,203,4,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',2,0,0)
f(33,205,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,205,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,206,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,206,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(30,207,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,207,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,207,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,207,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,207,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,207,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,207,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,207,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,207,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,207,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(36,208,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,208,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,209,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,209,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,209,1,2,'scala/math/BigInt.<init>',1,0,0)
f(25,210,16,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,210,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,210,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,210,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,210,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,210,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,210,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,210,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,210,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,210,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,210,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,210,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,210,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,210,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,210,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,210,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,210,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,210,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,210,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(44,210,1,2,'scala/math/BigInt$.apply',1,0,0)
f(45,210,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(39,211,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,212,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,212,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,212,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,212,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,212,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(26,213,13,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,213,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,213,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,213,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,213,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,213,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,213,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,214,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(34,214,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(35,214,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(33,215,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,215,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,216,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,216,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,217,1,2,'scala/math/BigInt$.apply',1,0,0)
f(27,218,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,218,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,218,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,218,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,218,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,218,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,219,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,219,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,219,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,219,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,220,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,220,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,220,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,220,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,220,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,220,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,220,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,220,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,220,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,221,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,221,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(31,221,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(32,221,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(30,222,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,222,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,222,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,222,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,222,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,222,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,223,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,223,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,223,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,223,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,223,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,223,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,224,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,225,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,225,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,225,1,2,'scala/math/BigInt.<init>',1,0,0)
f(20,226,73,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,226,29,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(22,226,29,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(23,226,29,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,226,29,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,226,12,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,226,12,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,226,12,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,226,12,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,226,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,226,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,226,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,226,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,226,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,226,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,226,3,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(36,227,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,227,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,227,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,228,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,228,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,228,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,228,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,228,1,2,'scala/math/BigInt$.apply',1,0,0)
f(44,228,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,229,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,229,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,229,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,230,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,230,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,230,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,230,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,230,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,230,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,230,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(36,231,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,231,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,232,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,232,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,233,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,234,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,234,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,234,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,234,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,234,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,234,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,234,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,235,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,235,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,236,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,236,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,236,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,237,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,237,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,237,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,237,1,2,'scala/math/BigInt$.apply',1,0,0)
f(25,238,17,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,238,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(27,238,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(28,238,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(26,239,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,239,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,239,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,239,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,239,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,239,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,239,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,239,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,239,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,239,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,239,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,239,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,239,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,239,2,2,'scala/math/BigInt$.apply',2,0,0)
f(40,239,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(30,241,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,241,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,241,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,241,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,241,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(32,242,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,242,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,242,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,242,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,242,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,242,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,242,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,243,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,243,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,243,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,243,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,243,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,243,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,244,11,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,244,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,244,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,244,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,244,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,244,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,244,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,244,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,244,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,244,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,244,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,245,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,246,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,246,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,246,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,246,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,246,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,247,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,247,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,247,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,247,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,247,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,247,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,247,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,248,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,248,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,248,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,248,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,248,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,249,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,249,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,249,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,249,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,249,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,249,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,249,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,249,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,249,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,249,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,249,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,249,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,249,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,250,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,250,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(30,250,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(31,250,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(29,251,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,251,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,251,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,251,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,251,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,251,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,251,2,2,'scala/math/BigInt$.apply',2,0,0)
f(36,251,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(37,252,1,2,'scala/math/BigInt.<init>',1,0,0)
f(30,253,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,253,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,254,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(33,254,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(34,254,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(21,255,42,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,255,20,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,255,20,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(24,255,20,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,255,20,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,255,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,255,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,255,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,255,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,255,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,255,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,255,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,255,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,255,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,255,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,255,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,255,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,255,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,255,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,255,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,255,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,255,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,255,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(44,255,1,2,'scala/math/BigInt$.apply',1,0,0)
f(45,255,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(39,256,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,256,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,257,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,257,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,257,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,257,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,257,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,257,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,257,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,257,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,258,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,258,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,259,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,259,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,259,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,259,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,259,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,259,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,260,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,260,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,261,13,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,261,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,261,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,261,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,261,2,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,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,262,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,262,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,263,11,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,263,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,263,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,263,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,263,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,263,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,263,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,263,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,263,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,263,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,263,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,263,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,263,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,263,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,264,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,264,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,264,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,265,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,265,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(30,265,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(31,266,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(32,267,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,267,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,267,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,269,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(36,269,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(37,269,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(33,270,2,2,'scala/math/BigInt$.apply',2,0,0)
f(29,272,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,272,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,272,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(32,272,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(31,273,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,273,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,273,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,273,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(35,273,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(36,273,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(26,274,1,2,'scala/math/BigInt$.apply',1,0,0)
f(22,275,22,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,275,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,275,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(25,275,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,275,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,275,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,275,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,275,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,275,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,275,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,275,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,275,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,276,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,276,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,277,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,277,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,277,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,277,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,277,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,277,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,277,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,277,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,277,2,2,'scala/math/BigInt$.apply',2,0,0)
f(41,277,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(31,279,1,2,'scala/math/BigInt$.apply',1,0,0)
f(27,280,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,280,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,280,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,280,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,280,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,280,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,280,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,280,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,280,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,280,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,280,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,281,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,282,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,282,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,282,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,282,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(33,282,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(34,282,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(23,283,14,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,283,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(25,283,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(26,283,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(27,284,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,284,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,284,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,284,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,284,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,284,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,284,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,284,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,284,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,285,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,285,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,285,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,285,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,285,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,286,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,286,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(30,286,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(31,286,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(29,287,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,287,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,287,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,287,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,287,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,287,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,287,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,288,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,288,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,288,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,288,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,288,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,288,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,288,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,288,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,288,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,288,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,288,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,288,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(36,288,1,2,'scala/math/BigInt.<init>',1,0,0)
f(30,289,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,289,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(25,290,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,290,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,290,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,290,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,290,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,290,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,290,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,290,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,290,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,290,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,290,2,2,'scala/math/BigInt$.apply',2,0,0)
f(36,290,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(30,292,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,292,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,292,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,292,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,293,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,293,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,293,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,293,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,293,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,293,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,293,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,293,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,293,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,293,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,294,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,294,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,294,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,294,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(32,295,2,2,'scala/math/BigInt$.apply',2,0,0)
f(33,295,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(21,297,2,2,'scala/math/BigInt$.apply',2,0,0)
f(22,297,2,2,'scala/math/BigInt$.getCached',2,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 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,9011,3,'all')
f(1,0,9008,1,'java/lang/Thread.run')
f(2,0,9008,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,9008,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,672,1,'java/util/concurrent/FutureTask.run')
f(5,0,672,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,672,1,'java/util/concurrent/FutureTask.run')
f(7,0,672,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,672,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,672,1,'java/lang/reflect/Method.invoke')
f(10,0,672,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,672,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,672,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,672,1,'kyo/bench/jmh_generated/ChainedForkBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,672,1,'kyo/bench/jmh_generated/ChainedForkBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,671,1,'kyo/bench/Bench.forkKyo')
f(16,0,97,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,97,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,97,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,97,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3f088')
f(16,97,77,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,97,77,2,'kyo.bench.Bench$$anon$1')
f(16,174,384,1,'kyo/bench/Bench.runLoop$2')
f(17,174,201,1,'kyo/bench/Bench$$anon$1.apply')
f(18,174,92,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,174,92,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c83420.apply')
f(20,174,92,1,'kyo/bench/Bench.$anonfun$2')
f(21,174,92,1,'kyo/concurrent/fibers$Fiber.block')
f(22,174,92,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,266,109,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,266,109,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,266,109,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(21,266,109,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,266,109,2,'kyo.concurrent.scheduler.IOTask')
f(17,375,183,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,375,183,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,375,183,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,375,183,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,375,87,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,375,87,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,375,77,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,452,10,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,452,10,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,462,4,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,466,92,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,466,92,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,466,92,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,558,113,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,558,90,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,558,90,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,558,90,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,558,90,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(17,648,11,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,648,11,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,659,12,1,'kyo/locals$Locals$.save')
f(18,659,12,2,'kyo.locals$Locals$$anon$3')
f(15,671,1,1,'org/openjdk/jmh/infra/Blackhole.consume')
f(16,671,1,2,'java.lang.String')
f(4,672,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f2b8.run')
f(5,672,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,672,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,672,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,672,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,672,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,672,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,672,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,682,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,682,1,2,'java.lang.String')
f(4,683,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f4e0.run')
f(5,683,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,683,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,683,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,683,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,683,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,683,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$70+0x0000000800d4eb70')
f(4,694,8314,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fda8.run')
f(5,694,8314,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,694,8314,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,694,8314,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,694,8314,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,694,2943,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,694,2943,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,694,2943,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,694,2943,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(13,694,2943,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,694,465,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(14,1159,1835,2,'kyo.concurrent.scheduler.IOTask')
f(14,2994,643,1,'kyo/concurrent/fibers$Fiber$.promise')
f(15,2994,643,2,'kyo.concurrent.fibers$Fiber')
f(9,3637,1,1,'kyo/bench/ChainedForkBench$$anon$5.apply')
f(10,3637,1,1,'kyo/concurrent/fibers$Fibers$$anon$31.apply')
f(11,3637,1,1,'kyo/concurrent/fibers$Fibers$$anon$31.apply')
f(12,3637,1,2,'kyo.concurrent.fibers$Fiber$Promise')
f(9,3638,5369,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,3638,5369,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,3638,78,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3f088.apply')
f(12,3638,78,1,'kyo/bench/Bench.$anonfun$1')
f(13,3638,78,1,'kyo/bench/ChainedForkBench.kyoBenchFiber')
f(14,3638,78,1,'kyo/concurrent/fibers$Fibers.promise')
f(15,3638,78,2,'kyo.concurrent.fibers$Fibers$$anon$31')
f(11,3716,5291,1,'kyo/bench/ChainedForkBench$$Lambda$61.0x0000000800d4a518.apply')
f(12,3716,5291,1,'kyo/bench/ChainedForkBench.$anonfun$3')
f(13,3716,5291,1,'kyo/bench/ChainedForkBench.iterate$2')
f(14,3716,1190,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4c800.linkToTargetMethod')
f(15,3716,1190,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(16,3716,1190,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,3716,1190,2,'kyo.bench.ChainedForkBench$$Lambda$61+0x0000000800d4a518')
f(14,4906,1330,1,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2')
f(15,4906,1330,2,'kyo.bench.ChainedForkBench$$anon$2')
f(14,6236,2771,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(15,6236,1020,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,6236,1020,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,6236,1020,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,6236,1020,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(15,7256,1225,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(16,7256,1225,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(15,8481,526,1,'kyo/locals$Locals$.save')
f(16,8481,526,2,'kyo.locals$Locals$$anon$3')
f(9,9007,1,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,9007,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,9007,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(1,9008,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,9008,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,9008,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,9008,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,9008,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,9008,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,9008,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,9008,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,9008,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,9008,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,9008,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,9008,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,9008,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 576px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(36);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,296,3,'all')
f(1,0,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,1,3,'thread_native_entry(Thread*)')
f(3,0,1,4,'Thread::call_run()')
f(4,0,1,4,'JavaThread::thread_main_inner()')
f(5,0,1,4,'CompileBroker::compiler_thread_loop()')
f(6,0,1,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,1,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,1,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,1,4,'Compile::Code_Gen()')
f(10,0,1,4,'PhaseChaitin::Register_Allocate()')
f(11,0,1,4,'PhaseChaitin::Simplify()')
f(1,1,2,3,'[unknown_Java]')
f(2,1,2,1,'kyo/ios$KyoIO.effect')
f(1,3,293,1,'java/lang/Thread.run')
f(2,3,293,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,3,293,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,3,2,1,'java/util/concurrent/FutureTask.run')
f(5,3,2,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,3,2,1,'java/util/concurrent/FutureTask.run')
f(7,3,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,3,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,3,2,1,'java/lang/reflect/Method.invoke')
f(10,3,2,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,3,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,3,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,3,2,1,'kyo/bench/jmh_generated/ChainedForkBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,3,2,1,'kyo/bench/jmh_generated/ChainedForkBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,3,2,1,'kyo/bench/Bench.forkKyo')
f(16,3,2,1,'kyo/bench/Bench.runLoop$2')
f(17,3,1,1,'kyo/bench/Bench$$anon$1.apply')
f(18,3,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,3,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,3,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(21,3,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,3,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,3,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,3,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,3,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,3,1,1,'jdk/internal/misc/Unsafe.unpark')
f(27,3,1,3,'pthread_cond_signal')
f(28,3,1,5,'entry_SYSCALL_64_after_hwframe')
f(29,3,1,5,'do_syscall_64')
f(30,3,1,5,'__x64_sys_futex')
f(31,3,1,5,'do_futex')
f(32,3,1,5,'futex_wake')
f(33,3,1,5,'wake_up_q')
f(34,3,1,5,'_raw_spin_unlock_irqrestore')
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(4,5,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f2b8.run')
f(5,5,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,5,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,5,1,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,5,1,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,5,1,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,5,1,1,'java/util/concurrent/SynchronousQueue$TransferStack$SNode.tryMatch')
f(11,5,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(12,5,1,1,'jdk/internal/misc/Unsafe.unpark')
f(13,5,1,3,'pthread_cond_signal')
f(14,5,1,5,'entry_SYSCALL_64_after_hwframe')
f(15,5,1,5,'do_syscall_64')
f(16,5,1,5,'__x64_sys_futex')
f(17,5,1,5,'do_futex')
f(18,5,1,5,'futex_wake')
f(19,5,1,5,'wake_up_q')
f(20,5,1,5,'_raw_spin_unlock_irqrestore')
f(4,6,290,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fda8.run')
f(5,6,290,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,6,290,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,15,216,1,'kyo/concurrent/scheduler/IOTask.run',35,0,0)
f(8,16,3,1,'kyo/concurrent/scheduler/IOTask.curr')
f(8,19,212,1,'kyo/concurrent/scheduler/IOTask.eval',35,0,0)
f(9,50,110,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,56,104,2,'kyo/concurrent/fibers$Fibers$$anon$33.apply',104,0,0)
f(11,63,97,2,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',97,0,0)
f(12,74,50,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply',50,0,0)
f(13,75,49,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',49,0,0)
f(14,81,10,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',10,0,0)
f(15,81,10,2,'kyo/ios$KyoIO.<init>',10,0,0)
f(16,81,10,2,'kyo/core$internal$Kyo.<init>',10,0,0)
f(14,91,19,2,'kyo/concurrent/scheduler/IOTask.<init>',19,0,0)
f(15,99,1,2,'kyo/concurrent/scheduler/Coordinator$.tick',1,0,0)
f(15,100,10,2,'kyo/concurrent/scheduler/IOPromise.<init>',10,0,0)
f(16,100,10,2,'kyo/concurrent/scheduler/IOPromise.<init>',10,0,0)
f(17,102,8,2,'java/util/concurrent/atomic/AtomicReference.<init>',8,0,0)
f(18,108,2,2,'java/lang/Object.<init>',2,0,0)
f(14,110,14,2,'kyo/concurrent/scheduler/Scheduler$.schedule',14,0,0)
f(15,119,5,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',5,0,0)
f(16,119,5,2,'kyo/concurrent/scheduler/Queue.offer',5,0,0)
f(17,119,5,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',5,0,0)
f(18,119,5,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',5,0,0)
f(12,124,36,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',36,0,0)
f(13,131,29,2,'kyo/core$internal$KyoCont.<init>',29,0,0)
f(14,151,9,2,'kyo/ios$KyoIO.value',9,0,0)
f(9,160,35,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,162,33,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',28,0,0)
f(11,167,28,2,'kyo/bench/ChainedForkBench$$Lambda$61.0x0000000800d4a488.apply',23,0,0)
f(12,167,28,2,'kyo/bench/ChainedForkBench.$anonfun$3',23,0,0)
f(13,167,28,2,'kyo/bench/ChainedForkBench.iterate$2',23,0,0)
f(14,175,12,2,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2',12,0,0)
f(15,186,1,2,'kyo/bench/ChainedForkBench$$anon$2.<init>',1,0,0)
f(16,186,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(14,187,8,2,'kyo/concurrent/fibers$Fibers.forkFiber',3,0,0)
f(15,188,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(16,188,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(17,188,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(15,189,5,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(16,192,2,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',2,0,0)
f(17,193,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(15,194,1,2,'kyo/locals$Locals$.save',1,0,0)
f(9,195,10,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',10,0,0)
f(9,205,12,2,'kyo/concurrent/scheduler/IOTask.loop$8',9,0,0)
f(10,210,7,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',6,0,0)
f(11,214,3,2,'kyo/concurrent/scheduler/IOPromise.complete',2,0,0)
f(12,214,2,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',2,0,0)
f(13,214,2,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',2,0,0)
f(12,216,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,216,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,216,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,216,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,216,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,216,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,216,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,216,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,216,1,1,'jdk/internal/misc/Unsafe.unpark')
f(21,216,1,3,'pthread_cond_signal')
f(22,216,1,5,'entry_SYSCALL_64_after_hwframe')
f(23,216,1,5,'do_syscall_64')
f(24,216,1,5,'__x64_sys_futex')
f(25,216,1,5,'do_futex')
f(26,216,1,5,'futex_wake')
f(27,216,1,5,'wake_up_q')
f(28,216,1,5,'_raw_spin_unlock_irqrestore')
f(9,217,9,6,'kyo/core$internal$KyoCont.effect',0,9,0)
f(9,226,3,1,'kyo/ios$.IOs')
f(9,229,2,1,'kyo/ios$KyoIO.effect')
f(7,231,64,1,'kyo/concurrent/scheduler/Queue.poll',13,0,0)
f(8,232,25,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',9,0,0)
f(9,234,23,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',7,0,0)
f(10,239,18,1,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d45000.<init>',5,0,0)
f(11,252,5,2,'java/lang/Object.<init>',5,0,0)
f(8,257,4,2,'kyo/concurrent/scheduler/Queue.isEmpty',4,0,0)
f(8,261,34,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,262,21,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',21,0,0)
f(10,268,15,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',15,0,0)
f(11,273,10,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',10,0,0)
f(12,274,9,2,'java/util/Objects.requireNonNull',9,0,0)
f(9,283,12,2,'kyo/concurrent/scheduler/Queue$$Lambda$60.0x0000000800d4a1c8.apply',12,0,0)
f(10,283,12,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',12,0,0)
f(11,284,11,2,'scala/collection/mutable/PriorityQueue.dequeue',11,0,0)
f(12,291,2,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',2,0,0)
f(12,293,2,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',2,0,0)
f(7,295,1,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,295,1,1,'kyo/concurrent/scheduler/Worker.park')
f(9,295,1,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,295,1,1,'jdk/internal/misc/Unsafe.park')
f(11,295,1,3,'[unknown]')
f(12,295,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 560px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(35);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,8777,3,'all')
f(1,0,8773,1,'java/lang/Thread.run')
f(2,0,8773,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,8773,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,940,1,'java/util/concurrent/FutureTask.run')
f(5,0,940,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,940,1,'java/util/concurrent/FutureTask.run')
f(7,0,940,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,940,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,940,1,'java/lang/reflect/Method.invoke')
f(10,0,940,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,940,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,940,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,940,1,'kyo/bench/jmh_generated/ChainedForkBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,939,1,'kyo/bench/jmh_generated/ChainedForkBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,939,1,'kyo/bench/Bench.syncKyo')
f(16,0,437,1,'kyo/bench/Bench.runLoop$1')
f(17,0,228,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,228,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,228,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,228,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,151,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,151,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,88,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,88,63,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,88,63,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,151,64,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,215,13,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,215,13,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,215,13,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,228,209,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,228,195,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,228,195,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,228,195,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,228,118,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,228,118,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,228,118,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(24,228,118,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,228,104,2,'kyo.concurrent.scheduler.IOTask')
f(25,332,14,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,332,14,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,332,14,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(28,332,14,1,'kyo/concurrent/scheduler/Queue.offer')
f(29,332,14,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(30,332,14,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(31,332,14,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(32,332,14,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(33,332,14,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d474b0')
f(21,346,77,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,346,77,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c83420.apply')
f(23,346,77,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,346,77,1,'kyo/concurrent/fibers$Fiber.join')
f(25,346,77,1,'kyo/concurrent/fibers$Fibers.get')
f(26,346,77,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,346,77,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,423,14,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,423,14,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c83c20.apply')
f(20,423,14,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,423,14,1,'kyo/concurrent/fibers$Fiber.block')
f(22,423,14,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,437,502,1,'kyo/bench/ChainedForkBench.kyoBench')
f(17,437,66,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,437,66,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,437,66,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,437,66,2,'kyo.bench.ChainedForkBench$$Lambda$37+0x0000000800c3f088')
f(17,503,222,1,'kyo/concurrent/fibers$Fibers.block')
f(18,503,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,503,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,503,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,503,2,2,'kyo.concurrent.fibers$Fibers$$Lambda$40+0x0000000800c83c20')
f(18,505,62,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,505,62,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,567,88,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,567,88,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,655,70,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,655,70,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,725,214,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,725,72,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,725,72,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,725,72,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,725,72,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c83420')
f(18,797,90,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,797,76,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,797,76,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,797,76,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,797,76,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(19,873,14,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,873,14,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(18,887,52,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,887,52,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(14,939,1,1,'org/openjdk/jmh/results/ThroughputResult.<init>')
f(15,939,1,1,'java/lang/StringBuilder.toString')
f(16,939,1,1,'java/lang/StringLatin1.newString')
f(17,939,1,2,'java.lang.String')
f(4,940,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f2b8.run')
f(5,940,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,940,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,940,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,940,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,940,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,940,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,940,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,950,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,950,1,2,'java.lang.String')
f(4,951,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1f4e0.run')
f(5,951,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,951,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,951,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,951,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,951,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,951,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$71+0x0000000800d4eb70')
f(4,962,7811,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d1fda8.run')
f(5,962,7811,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,962,7811,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,962,7344,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,962,7344,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,962,1,1,'kyo/bench/ChainedForkBench$$anon$1.apply')
f(10,962,1,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(11,962,1,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(12,962,1,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$Promise$$anon$26$$_$loop$22')
f(13,962,1,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(14,962,1,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(15,962,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,962,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,962,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,962,1,1,'scala/runtime/function/JProcedure1.apply')
f(19,962,1,1,'scala/runtime/function/JProcedure1.apply')
f(20,962,1,1,'kyo/concurrent/scheduler/IOTask$$Lambda$65.0x0000000800d4afa8.applyVoid')
f(21,962,1,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(22,962,1,1,'kyo/concurrent/scheduler/IOPromise.become')
f(23,962,1,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(24,962,1,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(25,962,1,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(26,962,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(27,962,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(9,963,2897,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,963,2897,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,963,2897,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,963,2897,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(13,963,2897,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,963,446,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(14,1409,1715,2,'kyo.concurrent.scheduler.IOTask')
f(14,3124,736,1,'kyo/concurrent/fibers$Fiber$.promise')
f(15,3124,736,2,'kyo.concurrent.fibers$Fiber')
f(9,3860,4446,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,3860,4446,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,3860,4446,1,'kyo/bench/ChainedForkBench$$Lambda$62.0x0000000800d4a518.apply')
f(12,3860,4446,1,'kyo/bench/ChainedForkBench.$anonfun$3')
f(13,3860,4446,1,'kyo/bench/ChainedForkBench.iterate$2')
f(14,3860,899,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4c800.linkToTargetMethod')
f(15,3860,899,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(16,3860,899,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,3860,899,2,'kyo.bench.ChainedForkBench$$Lambda$62+0x0000000800d4a518')
f(14,4759,1075,1,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2')
f(15,4759,1075,2,'kyo.bench.ChainedForkBench$$anon$2')
f(14,5834,2472,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(15,5834,682,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,5834,682,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,5834,682,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,5834,682,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(15,6516,990,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(16,6516,990,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(15,7506,800,1,'kyo/locals$Locals$.save')
f(16,7506,800,2,'kyo.locals$Locals$$anon$3')
f(7,8306,467,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,8306,467,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,8306,467,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,8306,467,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,8306,467,2,'kyo.concurrent.scheduler.Queue$$Lambda$56+0x0000000800d45000')
f(1,8773,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,8773,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,8773,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,8773,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,8773,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,8773,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,8773,1,1,'jdk/proxy1/$Proxy0.iterationResult')
f(8,8773,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient$$Lambda$8.0x0000000800c01c70.invoke')
f(9,8773,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.lambda$new$0')
f(10,8773,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushFrame')
f(11,8773,1,1,'java/io/ObjectOutputStream.writeObject')
f(12,8773,1,1,'java/io/ObjectOutputStream.writeObject0')
f(13,8773,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(14,8773,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(15,8773,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(16,8773,1,1,'java/io/ObjectOutputStream.writeObject0')
f(17,8773,1,1,'java/io/ObjectOutputStream.writeArray')
f(18,8773,1,1,'java/io/ObjectOutputStream.writeObject0')
f(19,8773,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(20,8773,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(21,8773,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(22,8773,1,1,'java/io/ObjectOutputStream.writeObject0')
f(23,8773,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(24,8773,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(25,8773,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(26,8773,1,1,'java/io/ObjectOutputStream.writeObject0')
f(27,8773,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(28,8773,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(29,8773,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(30,8773,1,1,'java/io/ObjectOutputStream.writeObject0')
f(31,8773,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(32,8773,1,1,'java/io/ObjectOutputStream$HandleTable.assign')
f(33,8773,1,1,'java/io/ObjectOutputStream$HandleTable.growEntries')
f(34,8773,1,2,'int[]')
f(7,8774,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,8774,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,8774,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,8774,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,8774,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,8774,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,8774,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 576px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(36);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,296,3,'all')
f(1,0,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,1,3,'thread_native_entry(Thread*)')
f(3,0,1,4,'Thread::call_run()')
f(4,0,1,4,'JavaThread::thread_main_inner()')
f(5,0,1,4,'CompileBroker::compiler_thread_loop()')
f(6,0,1,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,1,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,1,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,1,4,'Compile::Code_Gen()')
f(10,0,1,4,'PhaseChaitin::Register_Allocate()')
f(11,0,1,4,'subL_rRegNode::two_adr() const')
f(1,1,295,1,'java/lang/Thread.run')
f(2,1,295,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,1,295,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,1,2,1,'java/util/concurrent/FutureTask.run')
f(5,1,2,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,1,2,1,'java/util/concurrent/FutureTask.run')
f(7,1,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,1,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,1,2,1,'java/lang/reflect/Method.invoke')
f(10,1,2,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,1,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,1,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,1,2,1,'kyo/bench/jmh_generated/ChainedForkBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,1,2,1,'kyo/bench/jmh_generated/ChainedForkBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,1,2,1,'kyo/bench/Bench.syncKyo')
f(16,1,1,1,'kyo/bench/Bench.runLoop$1')
f(17,1,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,1,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,1,1,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,1,1,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,1,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,1,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,1,1,1,'java/util/concurrent/locks/LockSupport.park')
f(24,1,1,1,'jdk/internal/misc/Unsafe.park')
f(25,1,1,3,'[unknown]')
f(26,1,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,1,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,1,1,5,'do_syscall_64')
f(29,1,1,5,'__x64_sys_futex')
f(30,1,1,5,'do_futex')
f(31,1,1,5,'futex_wait')
f(32,1,1,5,'futex_wait_queue_me')
f(33,1,1,5,'schedule')
f(34,1,1,5,'__schedule')
f(35,1,1,5,'finish_task_switch.isra.0')
f(16,2,1,1,'kyo/bench/ChainedForkBench.kyoBench')
f(17,2,1,1,'kyo/concurrent/fibers$Fibers.block')
f(18,2,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,2,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(20,2,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(21,2,1,4,'MemAllocator::Allocation::notify_allocation_jfr_sampler()')
f(4,3,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f2b8.run')
f(5,3,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,3,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,3,1,1,'java/lang/Thread.sleep')
f(8,3,1,3,'[unknown]')
f(9,3,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,3,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,3,1,5,'do_syscall_64')
f(12,3,1,5,'__x64_sys_futex')
f(13,3,1,5,'do_futex')
f(14,3,1,5,'futex_wait')
f(15,3,1,5,'futex_wait_queue_me')
f(16,3,1,5,'schedule')
f(17,3,1,5,'__schedule')
f(18,3,1,5,'finish_task_switch.isra.0')
f(4,4,292,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d1fda8.run')
f(5,4,292,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,4,292,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,18,207,1,'kyo/concurrent/scheduler/IOTask.run',48,0,0)
f(8,19,206,1,'kyo/concurrent/scheduler/IOTask.eval',47,0,0)
f(9,49,94,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,55,88,2,'kyo/concurrent/fibers$Fibers$$anon$33.apply',88,0,0)
f(11,69,74,2,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',74,0,0)
f(12,80,41,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply',41,0,0)
f(13,80,41,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',41,0,0)
f(14,82,13,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',13,0,0)
f(15,82,13,2,'kyo/ios$KyoIO.<init>',13,0,0)
f(16,82,13,2,'kyo/core$internal$Kyo.<init>',13,0,0)
f(14,95,10,2,'kyo/concurrent/scheduler/IOTask.<init>',10,0,0)
f(15,102,1,2,'kyo/concurrent/scheduler/Coordinator$.tick',1,0,0)
f(15,103,2,2,'kyo/concurrent/scheduler/IOPromise.<init>',2,0,0)
f(16,103,2,2,'kyo/concurrent/scheduler/IOPromise.<init>',2,0,0)
f(17,103,2,2,'java/util/concurrent/atomic/AtomicReference.<init>',2,0,0)
f(18,103,2,2,'java/lang/Object.<init>',2,0,0)
f(14,105,16,2,'kyo/concurrent/scheduler/Scheduler$.schedule',16,0,0)
f(15,119,2,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',2,0,0)
f(16,120,1,2,'kyo/concurrent/scheduler/Queue.offer',1,0,0)
f(17,120,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(18,120,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(12,121,22,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',22,0,0)
f(13,121,22,2,'kyo/core$internal$KyoCont.<init>',22,0,0)
f(14,134,9,2,'kyo/ios$KyoIO.value',9,0,0)
f(9,143,32,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,144,31,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',22,0,0)
f(11,144,31,2,'kyo/bench/ChainedForkBench$$Lambda$62.0x0000000800d4a2e8.apply',22,0,0)
f(12,144,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(13,144,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(14,144,1,4,'MemAllocator::allocate() const')
f(15,144,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(16,144,1,4,'G1Allocator::unsafe_max_tlab_alloc()')
f(12,145,30,2,'kyo/bench/ChainedForkBench.$anonfun$3',22,0,0)
f(13,145,30,2,'kyo/bench/ChainedForkBench.iterate$2',22,0,0)
f(14,146,2,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d4c800.linkToTargetMethod',2,0,0)
f(15,146,2,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial',2,0,0)
f(16,146,2,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',2,0,0)
f(14,148,17,2,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2',17,0,0)
f(14,165,10,1,'kyo/concurrent/fibers$Fibers.forkFiber',2,0,0)
f(15,166,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(16,166,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(17,166,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(15,167,8,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(16,169,6,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply',6,0,0)
f(17,169,6,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',6,0,0)
f(18,170,5,2,'kyo/concurrent/scheduler/IOTask.<init>',5,0,0)
f(19,170,5,2,'kyo/concurrent/scheduler/IOPromise.<init>',5,0,0)
f(20,170,5,2,'kyo/concurrent/scheduler/IOPromise.<init>',5,0,0)
f(21,170,5,2,'java/util/concurrent/atomic/AtomicReference.<init>',5,0,0)
f(9,175,1,1,'kyo/concurrent/scheduler/IOTask$$anon$4.apply')
f(9,176,21,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',13,0,0)
f(9,197,16,2,'kyo/concurrent/scheduler/IOTask.loop$8',14,0,0)
f(10,198,15,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',14,0,0)
f(11,198,15,2,'kyo/concurrent/scheduler/IOPromise.complete',14,0,0)
f(12,198,14,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',14,0,0)
f(13,198,14,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',14,0,0)
f(14,198,14,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',14,0,0)
f(12,212,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,212,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,212,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,212,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(9,213,7,6,'kyo/core$internal$KyoCont.effect',0,7,0)
f(9,220,5,3,'vtable stub')
f(7,225,52,1,'kyo/concurrent/scheduler/Queue.poll',1,0,0)
f(8,230,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,232,1,1,'kyo/concurrent/scheduler/Queue.isEmpty')
f(9,232,1,1,'kyo/concurrent/scheduler/Queue.items')
f(8,233,44,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,236,24,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',24,0,0)
f(10,248,12,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',12,0,0)
f(11,251,9,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',9,0,0)
f(12,257,3,2,'java/util/Objects.requireNonNull',3,0,0)
f(9,260,17,2,'kyo/concurrent/scheduler/Queue$$Lambda$61.0x0000000800d4a028.apply',17,0,0)
f(10,260,17,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',17,0,0)
f(11,262,15,2,'scala/collection/mutable/PriorityQueue.dequeue',15,0,0)
f(12,269,7,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',7,0,0)
f(12,276,1,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',1,0,0)
f(7,277,1,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,277,1,1,'kyo/concurrent/scheduler/Worker.park')
f(9,277,1,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,277,1,1,'jdk/internal/misc/Unsafe.park')
f(11,277,1,3,'[unknown]')
f(12,277,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,277,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,277,1,5,'do_syscall_64')
f(15,277,1,5,'__x64_sys_futex')
f(16,277,1,5,'do_futex')
f(17,277,1,5,'futex_wait')
f(18,277,1,5,'futex_wait_queue_me')
f(19,277,1,5,'schedule')
f(7,278,4,2,'kyo/concurrent/scheduler/Worker.queue',4,0,0)
f(7,282,14,2,'kyo/concurrent/scheduler/Worker.stop$1',12,0,0)
f(8,283,13,2,'kyo/concurrent/scheduler/Scheduler$.stopWorker',12,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 560px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(35);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,13159,3,'all')
f(1,0,13155,1,'java/lang/Thread.run')
f(2,0,13155,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,13155,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,2242,1,'java/util/concurrent/FutureTask.run')
f(5,0,2242,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,2242,1,'java/util/concurrent/FutureTask.run')
f(7,0,2242,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,2242,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,2242,1,'java/lang/reflect/Method.invoke')
f(10,0,2242,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,2242,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,2242,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,2242,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,2242,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,2242,1,'kyo/bench/Bench.forkKyo')
f(16,0,87,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,87,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,87,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,6,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,0,6,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3fb00')
f(19,6,81,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3fb00')
f(16,87,184,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,87,184,2,'kyo.bench.Bench$$anon$1')
f(16,271,1452,1,'kyo/bench/Bench.runLoop$2')
f(17,271,633,1,'kyo/bench/Bench$$anon$1.apply')
f(18,271,103,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,271,103,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c81000.apply')
f(20,271,103,1,'kyo/bench/Bench.$anonfun$2')
f(21,271,103,1,'kyo/concurrent/fibers$Fiber.block')
f(22,271,103,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,374,530,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,374,530,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,374,530,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85290.apply')
f(21,374,530,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,374,38,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,412,402,2,'kyo.concurrent.scheduler.IOTask')
f(22,814,90,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,814,90,2,'kyo.concurrent.fibers$Fiber')
f(17,904,819,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,904,819,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,904,819,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,904,819,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,904,361,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,904,361,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,904,83,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,987,278,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,987,278,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,1265,217,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,1482,241,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,1482,241,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,1482,241,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,1723,519,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,1723,180,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1723,180,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1723,180,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1723,180,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c85290')
f(17,1903,228,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,1903,228,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,2131,111,1,'kyo/locals$Locals$.save')
f(18,2131,111,2,'kyo.locals$Locals$$anon$3')
f(4,2242,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f4b8.run')
f(5,2242,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,2242,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,2242,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,2242,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,2242,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,2242,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,2242,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,2252,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,2252,1,2,'java.lang.String')
f(4,2253,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f6e0.run')
f(5,2253,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,2253,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,2253,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,2253,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,2253,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,2253,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,2253,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$61+0x0000000800d552c0')
f(4,2264,10891,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d243c0.run')
f(5,2264,10891,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,2264,10891,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,2264,10891,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,2264,10891,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,2264,7240,1,'kyo/bench/CollectAllBench$$anon$2.apply')
f(10,2264,2701,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(11,2264,1744,2,'kyo.bench.CollectAllBench$$anon$2')
f(11,4008,957,1,'kyo/bench/CollectAllBench$$Lambda$58.0x0000000800d56000.apply')
f(12,4008,957,1,'kyo/bench/CollectAllBench.$anonfun$2')
f(13,4008,954,1,'scala/collection/AbstractIterable.sum')
f(14,4008,954,1,'scala/collection/IterableOnceOps.sum$')
f(15,4008,954,1,'scala/collection/IterableOnceOps.sum')
f(16,4008,954,1,'scala/collection/AbstractIterable.reduce')
f(17,4008,954,1,'scala/collection/IterableOnceOps.reduce$')
f(18,4008,954,1,'scala/collection/IterableOnceOps.reduce')
f(19,4008,954,1,'scala/collection/AbstractIterable.reduceLeft')
f(20,4008,954,1,'scala/collection/IterableOnceOps.reduceLeft$')
f(21,4008,954,1,'scala/collection/IterableOnceOps.reduceLeft')
f(22,4008,954,1,'scala/collection/IterableOnceOps$$Lambda$59.0x0000000800d57638.apply')
f(23,4008,954,1,'scala/collection/IterableOnceOps.$anonfun$sum$1')
f(24,4008,954,1,'scala/math/Numeric$IntIsIntegral$.plus')
f(25,4008,954,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(26,4008,954,1,'java/lang/Integer.valueOf')
f(27,4008,954,2,'java.lang.Integer')
f(13,4962,3,1,'scala/runtime/BoxesRunTime.boxToLong')
f(14,4962,3,1,'java/lang/Long.valueOf')
f(15,4962,3,2,'java.lang.Long')
f(10,4965,4539,1,'kyo/lists$Lists$$anon$11.apply')
f(11,4965,4539,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(12,4965,4539,1,'kyo/lists$Lists$$Lambda$57.0x0000000800d53b78.apply')
f(13,4965,4539,1,'kyo/lists$Lists.$anonfun$5')
f(14,4965,3187,1,'kyo/lists$Lists.loop$2')
f(15,4965,1324,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,4965,1324,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,4965,1324,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,4965,1324,2,'kyo.lists$Lists$$Lambda$57+0x0000000800d53b78')
f(15,6289,1863,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(16,6289,1863,2,'kyo.lists$Lists$$anon$11')
f(14,8152,1352,1,'scala/collection/mutable/ListBuffer.addOne')
f(15,8152,1352,2,'scala.collection.immutable.$colon$colon')
f(9,9504,3651,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,9504,3651,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,9504,3651,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3fb00.apply')
f(12,9504,3651,1,'kyo/bench/Bench.$anonfun$1')
f(13,9504,3651,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,9504,3651,1,'kyo/bench/CollectAllBench.kyoBench')
f(15,9504,1,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(16,9504,1,2,'kyo.bench.CollectAllBench$$anon$2')
f(15,9505,4,1,'kyo/lists$Lists.collect')
f(16,9505,1,2,'java.lang.Object[]')
f(16,9506,2,1,'kyo/lists$Lists.loop$2')
f(17,9506,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,9506,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,9506,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,9506,1,2,'kyo.lists$Lists$$Lambda$57+0x0000000800d53b78')
f(17,9507,1,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(18,9507,1,2,'kyo.lists$Lists$$anon$11')
f(16,9508,1,1,'scala/collection/mutable/ListBuffer$.apply')
f(17,9508,1,1,'scala/collection/IterableFactory.apply$')
f(18,9508,1,1,'scala/collection/IterableFactory.apply')
f(19,9508,1,1,'scala/collection/mutable/ListBuffer$.from')
f(20,9508,1,1,'scala/collection/mutable/ListBuffer$.from')
f(21,9508,1,2,'scala.collection.mutable.ListBuffer')
f(15,9509,1868,1,'scala/collection/AbstractIterable.toList')
f(16,9509,1868,1,'scala/collection/IterableOnceOps.toList$')
f(17,9509,1868,1,'scala/collection/IterableOnceOps.toList')
f(18,9509,1868,1,'scala/collection/immutable/List.prependedAll')
f(19,9509,1865,2,'scala.collection.immutable.$colon$colon')
f(19,11374,3,1,'scala/collection/immutable/Vector.iterator')
f(20,11374,3,2,'scala.collection.immutable.NewVectorIterator')
f(15,11377,1778,1,'scala/collection/immutable/Range.map')
f(16,11377,1261,1,'kyo/bench/CollectAllBench$$Lambda$56.0x0000000800d44800.apply')
f(17,11377,1261,1,'kyo/bench/CollectAllBench.$anonfun$adapted$1')
f(18,11377,1261,1,'kyo/bench/CollectAllBench.$anonfun$1')
f(19,11377,1261,2,'kyo.bench.CollectAllBench$$anon$1')
f(16,12638,130,1,'scala/collection/SeqFactory$Delegate.newBuilder')
f(17,12638,130,1,'scala/collection/immutable/Vector$.newBuilder')
f(18,12638,130,1,'scala/collection/immutable/Vector$.newBuilder')
f(19,12638,120,2,'scala.collection.immutable.VectorBuilder')
f(19,12758,10,1,'scala/collection/immutable/VectorBuilder.<init>')
f(20,12758,10,2,'java.lang.Object[]')
f(16,12768,368,1,'scala/collection/immutable/VectorBuilder.addOne')
f(17,12768,368,1,'scala/collection/immutable/VectorBuilder.addOne')
f(18,12768,368,1,'scala/collection/immutable/VectorBuilder.advance')
f(19,12768,368,1,'scala/collection/immutable/VectorBuilder.advance1')
f(20,12768,9,2,'java.lang.Object[][]')
f(20,12777,359,2,'java.lang.Object[]')
f(16,13136,19,1,'scala/collection/immutable/VectorBuilder.result')
f(17,13136,19,1,'scala/collection/immutable/VectorBuilder.result')
f(18,13136,4,1,'java/util/Arrays.copyOf')
f(19,13136,4,2,'java.lang.Object[]')
f(18,13140,11,1,'java/util/Arrays.copyOfRange')
f(19,13140,11,2,'java.lang.Object[][]')
f(18,13151,4,2,'scala.collection.immutable.Vector2')
f(1,13155,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,13155,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,13155,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,13155,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,13155,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,13155,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,13155,1,1,'jdk/proxy1/$Proxy0.iterationResult')
f(8,13155,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient$$Lambda$8.0x0000000800c01c70.invoke')
f(9,13155,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.lambda$new$0')
f(10,13155,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushFrame')
f(11,13155,1,1,'java/io/ObjectOutputStream.writeObject')
f(12,13155,1,1,'java/io/ObjectOutputStream.writeObject0')
f(13,13155,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(14,13155,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(15,13155,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(16,13155,1,1,'java/io/ObjectOutputStream.writeObject0')
f(17,13155,1,1,'java/io/ObjectOutputStream.writeArray')
f(18,13155,1,1,'java/io/ObjectOutputStream.writeObject0')
f(19,13155,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(20,13155,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(21,13155,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(22,13155,1,1,'java/io/ObjectOutputStream.writeObject0')
f(23,13155,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(24,13155,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(25,13155,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(26,13155,1,1,'java/io/ObjectOutputStream.writeObject0')
f(27,13155,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(28,13155,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(29,13155,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(30,13155,1,1,'java/io/ObjectOutputStream.writeObject0')
f(31,13155,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(32,13155,1,1,'java/io/ObjectOutputStream$HandleTable.assign')
f(33,13155,1,1,'java/io/ObjectOutputStream$HandleTable.growEntries')
f(34,13155,1,2,'int[]')
f(7,13156,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,13156,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,13156,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,13156,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,13156,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,13156,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,13156,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: 656px}
</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(41);
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,7,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,7,3,'thread_native_entry(Thread*)')
f(3,0,7,4,'Thread::call_run()')
f(4,0,7,4,'JavaThread::thread_main_inner()')
f(5,0,7,4,'CompileBroker::compiler_thread_loop()')
f(6,0,7,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,7,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,7,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,4,4,'Compile::Code_Gen()')
f(10,0,2,4,'PhaseChaitin::Register_Allocate()')
f(11,0,2,4,'PhaseChaitin::gather_lrg_masks(bool)')
f(10,2,1,4,'PhaseOutput::Output()')
f(11,2,1,4,'PhaseOutput::shorten_branches(unsigned int*)')
f(10,3,1,4,'PhaseOutput::fill_buffer(CodeBuffer*, unsigned int*)')
f(11,3,1,4,'PhaseOutput::Process_OopMap_Node(MachNode*, int)')
f(12,3,1,4,'PhaseOutput::FillLocArray(int, MachSafePointNode*, Node*, GrowableArray<ScopeValue*>*, GrowableArray<ScopeValue*>*)')
f(13,3,1,4,'resource_allocate_bytes(unsigned long, AllocFailStrategy::AllocFailEnum)')
f(9,4,2,4,'Compile::Optimize()')
f(10,4,1,4,'PhaseIdealLoop::build_and_optimize(LoopOptsMode)')
f(11,4,1,4,'PhaseIdealLoop::build_loop_late(VectorSet&, Node_List&, Node_Stack&)')
f(12,4,1,4,'PhaseIdealLoop::build_loop_late_post_work(Node*, bool)')
f(10,5,1,4,'PhaseIdealLoop::optimize(PhaseIterGVN&, LoopOptsMode)')
f(11,5,1,4,'PhaseIterGVN::optimize()')
f(12,5,1,4,'PhaseIterGVN::transform_old(Node*)')
f(13,5,1,4,'PhaseIterGVN::add_users_to_worklist(Node*)')
f(14,5,1,4,'PhaseIterGVN::add_users_to_worklist(Node*)')
f(9,6,1,4,'ParseGenerator::generate(JVMState*)')
f(10,6,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(11,6,1,4,'Parse::do_all_blocks()')
f(12,6,1,4,'Parse::do_one_block()')
f(13,6,1,4,'Parse::do_call()')
f(14,6,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(15,6,1,4,'ParseGenerator::generate(JVMState*)')
f(16,6,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(17,6,1,4,'Parse::do_all_blocks()')
f(18,6,1,4,'Parse::do_one_block()')
f(19,6,1,4,'Parse::do_call()')
f(20,6,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(21,6,1,4,'ParseGenerator::generate(JVMState*)')
f(22,6,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(23,6,1,4,'Parse::do_all_blocks()')
f(24,6,1,4,'Parse::do_one_block()')
f(25,6,1,4,'Parse::do_call()')
f(26,6,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(27,6,1,4,'ParseGenerator::generate(JVMState*)')
f(28,6,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(29,6,1,4,'Parse::do_all_blocks()')
f(30,6,1,4,'Parse::do_one_block()')
f(31,6,1,4,'Parse::do_call()')
f(32,6,1,4,'ParseGenerator::generate(JVMState*)')
f(33,6,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(34,6,1,4,'Parse::do_all_blocks()')
f(35,6,1,4,'Parse::do_one_block()')
f(36,6,1,4,'Parse::do_new()')
f(37,6,1,4,'GraphKit::new_instance(Node*, Node*, Node**, bool)')
f(38,6,1,4,'GraphKit::set_output_for_allocation(AllocateNode*, TypeOopPtr const*, bool)')
f(39,6,1,4,'GraphKit::make_slow_call_ex(Node*, ciInstanceKlass*, bool, bool) [clone .part.0]')
f(40,6,1,4,'CatchProjNode::Identity(PhaseGVN*)')
f(1,7,1,3,'[unknown_Java]')
f(2,7,1,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(1,8,248,1,'java/lang/Thread.run')
f(2,8,248,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,8,248,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,8,32,1,'java/util/concurrent/FutureTask.run')
f(5,8,32,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,8,32,1,'java/util/concurrent/FutureTask.run')
f(7,8,32,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,8,32,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,8,32,1,'java/lang/reflect/Method.invoke')
f(10,8,32,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,8,32,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,8,32,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,8,32,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,8,32,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,8,32,1,'kyo/bench/Bench.forkKyo')
f(16,8,32,1,'kyo/bench/Bench.runLoop$2')
f(17,8,11,1,'kyo/bench/Bench$$anon$1.apply')
f(18,8,11,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,8,11,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,8,11,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85290.apply',1,0,0)
f(21,8,11,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',1,0,0)
f(22,8,11,1,'kyo/concurrent/scheduler/Scheduler$.schedule',1,0,0)
f(23,9,10,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,9,10,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,9,10,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,9,10,1,'jdk/internal/misc/Unsafe.unpark')
f(27,9,1,3,'Unsafe_Unpark')
f(28,9,1,4,'ThreadsListHandle::cv_internal_thread_to_JavaThread(_jobject*, JavaThread**, oopDesc**)')
f(27,10,9,3,'pthread_cond_signal')
f(28,10,9,5,'entry_SYSCALL_64_after_hwframe')
f(29,10,9,5,'do_syscall_64')
f(30,10,8,5,'__x64_sys_futex')
f(31,10,8,5,'do_futex')
f(32,10,8,5,'futex_wake')
f(33,10,8,5,'wake_up_q')
f(34,10,8,5,'_raw_spin_unlock_irqrestore')
f(30,18,1,5,'syscall_enter_from_user_mode')
f(17,19,21,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,19,21,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,19,21,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,19,21,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,19,21,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,19,21,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,21,1,2,'java/util/concurrent/locks/AbstractQueuedSynchronizer$Node.clearStatus',1,0,0)
f(23,22,17,1,'java/util/concurrent/locks/LockSupport.park')
f(24,22,17,1,'jdk/internal/misc/Unsafe.park')
f(25,22,3,3,'Unsafe_Park')
f(26,22,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,22,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,22,1,5,'do_syscall_64')
f(29,22,1,5,'do_futex')
f(26,23,1,4,'Parker::park(bool, long)')
f(26,24,1,3,'pthread_mutex_trylock')
f(25,25,14,3,'[unknown]')
f(26,25,14,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,26,13,5,'entry_SYSCALL_64_after_hwframe')
f(28,26,13,5,'do_syscall_64')
f(29,26,12,5,'__x64_sys_futex')
f(30,26,12,5,'do_futex')
f(31,26,12,5,'futex_wait')
f(32,26,11,5,'futex_wait_queue_me')
f(33,26,11,5,'schedule')
f(34,28,9,5,'__schedule')
f(35,28,9,5,'finish_task_switch.isra.0')
f(32,37,1,5,'futex_wait_setup')
f(29,38,1,5,'syscall_exit_to_user_mode')
f(30,38,1,5,'exit_to_user_mode_prepare')
f(31,38,1,5,'exit_to_user_mode_loop')
f(32,38,1,5,'__rseq_handle_notify_resume')
f(33,38,1,5,'__put_user_nocheck_8')
f(23,39,1,2,'kyo/concurrent/scheduler/IOPromise$$anon$1.tryAcquireShared',1,0,0)
f(4,40,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f4b8.run')
f(5,40,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,40,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,40,1,1,'java/lang/Thread.sleep')
f(8,40,1,3,'[unknown]')
f(9,40,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,40,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,40,1,5,'do_syscall_64')
f(12,40,1,5,'__x64_sys_futex')
f(13,40,1,5,'do_futex')
f(14,40,1,5,'futex_wait')
f(15,40,1,5,'futex_wait_queue_me')
f(16,40,1,5,'schedule')
f(17,40,1,5,'__schedule')
f(18,40,1,5,'finish_task_switch.isra.0')
f(4,41,215,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d243c0.run')
f(5,41,215,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,41,215,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,41,184,1,'kyo/concurrent/scheduler/IOTask.run',8,0,0)
f(8,41,184,1,'kyo/concurrent/scheduler/IOTask.eval',22,0,0)
f(9,43,116,1,'kyo/bench/CollectAllBench$$anon$2.apply',20,0,0)
f(10,44,31,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1',4,0,0)
f(11,47,27,1,'kyo/bench/CollectAllBench$$Lambda$58.0x0000000800d56000.apply')
f(12,47,27,2,'kyo/bench/CollectAllBench.$anonfun$2',22,0,0)
f(13,47,27,2,'scala/collection/AbstractIterable.sum',22,0,0)
f(14,47,27,2,'scala/collection/IterableOnceOps.sum$',22,0,0)
f(15,47,27,2,'scala/collection/IterableOnceOps.sum',22,0,0)
f(16,47,27,2,'scala/collection/AbstractIterable.reduce',22,0,0)
f(17,47,27,2,'scala/collection/IterableOnceOps.reduce$',22,0,0)
f(18,47,27,2,'scala/collection/IterableOnceOps.reduce',22,0,0)
f(19,47,27,2,'scala/collection/AbstractIterable.reduceLeft',22,0,0)
f(20,47,27,2,'scala/collection/IterableOnceOps.reduceLeft$',22,0,0)
f(21,47,27,2,'scala/collection/IterableOnceOps.reduceLeft',22,0,0)
f(22,47,20,2,'scala/collection/IterableOnceOps$$Lambda$59.0x0000000800d57638.apply',15,0,0)
f(23,47,20,2,'scala/collection/IterableOnceOps.$anonfun$sum$1',15,0,0)
f(24,47,20,2,'scala/math/Numeric$IntIsIntegral$.plus',15,0,0)
f(25,47,16,2,'scala/runtime/BoxesRunTime.boxToInteger',11,0,0)
f(26,58,5,1,'java/lang/Integer.valueOf')
f(27,58,5,1,'java/lang/Integer.<init>')
f(28,58,5,1,'java/lang/Number.<init>')
f(25,63,4,2,'scala/runtime/BoxesRunTime.unboxToInt',4,0,0)
f(22,67,7,2,'scala/collection/StrictOptimizedLinearSeqOps$$anon$1.next',7,0,0)
f(23,72,1,2,'scala/collection/immutable/$colon$colon.head',1,0,0)
f(23,73,1,2,'scala/collection/immutable/$colon$colon.tail',1,0,0)
f(24,73,1,2,'scala/collection/immutable/$colon$colon.tail',1,0,0)
f(25,73,1,2,'scala/collection/immutable/$colon$colon.next',1,0,0)
f(11,74,1,2,'kyo/bench/CollectAllBench$$anon$2.<init>',1,0,0)
f(12,74,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(10,75,84,1,'kyo/lists$Lists$$anon$11.apply',15,0,0)
f(11,76,23,2,'kyo/bench/CollectAllBench$$anon$1.apply',14,0,0)
f(12,76,23,2,'kyo/bench/CollectAllBench$$anon$1.apply',14,0,0)
f(13,76,23,2,'scala/runtime/BoxesRunTime.boxToInteger',14,0,0)
f(11,99,60,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(12,101,50,2,'kyo/lists$Lists$$Lambda$57.0x0000000800d53b78.apply',50,0,0)
f(13,101,50,2,'kyo/lists$Lists.$anonfun$5',50,0,0)
f(14,102,17,2,'kyo/lists$Lists.loop$2',17,0,0)
f(15,117,2,2,'scala/collection/immutable/List.equals',2,0,0)
f(16,117,2,2,'scala/collection/immutable/List.listEq$1',2,0,0)
f(14,119,32,2,'scala/collection/mutable/ListBuffer.addOne',32,0,0)
f(15,122,8,2,'scala/collection/immutable/$colon$colon.<init>',8,0,0)
f(16,123,4,2,'scala/collection/immutable/List.<init>',4,0,0)
f(17,123,4,2,'scala/collection/immutable/AbstractSeq.<init>',4,0,0)
f(18,123,4,2,'scala/collection/AbstractSeq.<init>',4,0,0)
f(19,123,4,2,'scala/collection/AbstractIterable.<init>',4,0,0)
f(16,127,3,2,'scala/runtime/Statics.releaseFence',3,0,0)
f(17,127,3,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d1c400.invoke_MT',3,0,0)
f(18,129,1,2,'java/lang/invoke/Invokers.checkGenericType',1,0,0)
f(19,129,1,2,'java/lang/invoke/MethodHandle.asType',1,0,0)
f(15,130,2,2,'scala/collection/immutable/$colon$colon.next_$eq',2,0,0)
f(15,132,1,2,'scala/collection/mutable/ListBuffer.ensureUnaliased',1,0,0)
f(15,133,6,2,'scala/collection/mutable/ListBuffer.first_$eq',6,0,0)
f(15,139,12,2,'scala/collection/mutable/ListBuffer.last0_$eq',12,0,0)
f(12,151,8,2,'kyo/lists$Lists$$anon$11.<init>',8,0,0)
f(13,151,8,2,'kyo/core$internal$KyoCont.<init>',8,0,0)
f(14,152,4,2,'kyo/core$internal$Kyo.<init>',4,0,0)
f(14,156,3,2,'kyo/ios$KyoIO.effect',3,0,0)
f(9,159,50,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,159,50,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',48,0,0)
f(11,159,50,2,'kyo/bench/Bench$$Lambda$37.0x0000000800c3fb00.apply',48,0,0)
f(12,159,50,2,'kyo/bench/Bench.$anonfun$1',48,0,0)
f(13,159,50,2,'kyo/bench/Bench.kyoBenchFiber',48,0,0)
f(14,159,50,2,'kyo/bench/CollectAllBench.kyoBench',48,0,0)
f(15,159,40,2,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1',40,0,0)
f(16,159,40,2,'kyo/bench/CollectAllBench$$Lambda$58.0x0000000800d56000.apply',40,0,0)
f(17,159,40,2,'kyo/bench/CollectAllBench.$anonfun$2',40,0,0)
f(18,159,40,2,'scala/runtime/BoxesRunTime.boxToLong',40,0,0)
f(15,199,8,2,'scala/collection/immutable/Range.map',6,0,0)
f(16,200,1,2,'kyo/bench/CollectAllBench$$Lambda$56.0x0000000800d44800.apply',1,0,0)
f(17,200,1,2,'kyo/bench/CollectAllBench.$anonfun$adapted$1',1,0,0)
f(18,200,1,2,'scala/runtime/BoxesRunTime.unboxToInt',1,0,0)
f(16,201,1,2,'scala/collection/SeqFactory$Delegate.newBuilder',1,0,0)
f(17,201,1,2,'scala/collection/immutable/Vector$.newBuilder',1,0,0)
f(16,202,3,2,'scala/collection/immutable/Range.iterator',3,0,0)
f(16,205,2,1,'scala/collection/immutable/VectorBuilder.addOne')
f(17,205,2,1,'scala/collection/immutable/VectorBuilder.addOne')
f(18,205,2,1,'scala/collection/immutable/VectorBuilder.advance')
f(19,205,2,1,'scala/collection/immutable/VectorBuilder.advance1')
f(15,207,2,2,'scala/runtime/RichInt$.until$extension',2,0,0)
f(16,207,2,2,'scala/collection/immutable/Range$Exclusive.<init>',2,0,0)
f(17,207,2,2,'scala/collection/immutable/Range.<init>',2,0,0)
f(9,209,16,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,209,16,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,209,16,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,209,16,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,209,16,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,209,16,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,209,16,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,209,16,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,209,16,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,209,16,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,209,16,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,209,16,1,'jdk/internal/misc/Unsafe.unpark')
f(21,209,16,3,'pthread_cond_signal')
f(22,209,16,5,'entry_SYSCALL_64_after_hwframe')
f(23,209,16,5,'do_syscall_64')
f(24,209,16,5,'__x64_sys_futex')
f(25,209,16,5,'do_futex')
f(26,209,16,5,'futex_wake')
f(27,210,1,5,'mark_wake_futex')
f(27,211,14,5,'wake_up_q')
f(28,211,14,5,'_raw_spin_unlock_irqrestore')
f(7,225,11,2,'kyo/concurrent/scheduler/Queue.poll',6,0,0)
f(8,225,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(9,225,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(10,226,1,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d45230.<init>',1,0,0)
f(11,226,1,2,'java/lang/Object.<init>',1,0,0)
f(8,227,1,1,'kyo/concurrent/scheduler/Queue.isEmpty')
f(9,227,1,1,'kyo/concurrent/scheduler/Queue.items')
f(8,228,8,2,'kyo/concurrent/scheduler/Queue.modify',5,0,0)
f(9,230,6,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d45230.apply',4,0,0)
f(10,230,6,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',4,0,0)
f(11,231,2,2,'kyo/concurrent/scheduler/Queue.isEmpty',2,0,0)
f(11,233,3,2,'scala/collection/mutable/PriorityQueue.dequeue',2,0,0)
f(7,236,19,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,236,19,1,'kyo/concurrent/scheduler/Worker.park')
f(9,236,19,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,236,19,1,'jdk/internal/misc/Unsafe.park')
f(11,236,3,3,'Unsafe_Park')
f(12,236,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,236,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,236,1,5,'do_syscall_64')
f(15,236,1,5,'__x64_sys_futex')
f(16,236,1,5,'do_futex')
f(17,236,1,5,'hash_futex')
f(12,237,1,4,'Parker::park(bool, long)')
f(12,238,1,3,'clock_gettime')
f(13,238,1,3,'[vdso]')
f(11,239,16,3,'[unknown]')
f(12,239,16,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,242,13,5,'entry_SYSCALL_64_after_hwframe')
f(14,242,13,5,'do_syscall_64')
f(15,242,12,5,'__x64_sys_futex')
f(16,242,12,5,'do_futex')
f(17,242,12,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(15,254,1,5,'syscall_exit_to_user_mode')
f(16,254,1,5,'exit_to_user_mode_prepare')
f(17,254,1,5,'exit_to_user_mode_loop')
f(18,254,1,5,'__rseq_handle_notify_resume')
f(19,254,1,5,'rseq_ip_fixup')
f(20,254,1,5,'__get_user_8')
f(7,255,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,255,1,2,'kyo/concurrent/scheduler/Scheduler$.randomWorker',1,0,0)
f(9,255,1,2,'java/util/Random.nextInt',1,0,0)
f(10,255,1,2,'kyo/concurrent/scheduler/XSRandom$.next',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: 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,14389,3,'all')
f(1,0,14384,1,'java/lang/Thread.run')
f(2,0,14384,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,14384,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,14384,1,'java/util/concurrent/FutureTask.run')
f(5,0,14384,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,14384,1,'java/util/concurrent/FutureTask.run')
f(7,0,14384,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,14384,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,14384,1,'java/lang/reflect/Method.invoke')
f(10,0,14384,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,14384,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,14384,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,14384,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,14384,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,14384,1,'kyo/bench/Bench.syncKyo')
f(16,0,10586,1,'kyo/bench/Bench.runLoop$1')
f(17,0,10586,1,'kyo/bench/CollectAllBench$$anon$2.apply')
f(18,0,3416,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(19,0,2205,2,'kyo.bench.CollectAllBench$$anon$2')
f(19,2205,1211,1,'kyo/bench/CollectAllBench$$Lambda$41.0x0000000800d24940.apply')
f(20,2205,1211,1,'kyo/bench/CollectAllBench.$anonfun$2')
f(21,2205,1211,1,'scala/collection/AbstractIterable.sum')
f(22,2205,1211,1,'scala/collection/IterableOnceOps.sum$')
f(23,2205,1211,1,'scala/collection/IterableOnceOps.sum')
f(24,2205,1211,1,'scala/collection/AbstractIterable.reduce')
f(25,2205,1211,1,'scala/collection/IterableOnceOps.reduce$')
f(26,2205,1211,1,'scala/collection/IterableOnceOps.reduce')
f(27,2205,1211,1,'scala/collection/AbstractIterable.reduceLeft')
f(28,2205,1211,1,'scala/collection/IterableOnceOps.reduceLeft$')
f(29,2205,1211,1,'scala/collection/IterableOnceOps.reduceLeft')
f(30,2205,1211,1,'scala/collection/IterableOnceOps$$Lambda$42.0x0000000800d2a090.apply')
f(31,2205,1211,1,'scala/collection/IterableOnceOps.$anonfun$sum$1')
f(32,2205,1211,1,'scala/math/Numeric$IntIsIntegral$.plus')
f(33,2205,1211,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(34,2205,1211,1,'java/lang/Integer.valueOf')
f(35,2205,1211,2,'java.lang.Integer')
f(18,3416,7170,1,'kyo/lists$Lists$$anon$11.apply')
f(19,3416,7170,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(20,3416,7170,1,'kyo/lists$Lists$$Lambda$40.0x0000000800d0fb38.apply')
f(21,3416,7170,1,'kyo/lists$Lists.$anonfun$5')
f(22,3416,4533,1,'kyo/lists$Lists.loop$2')
f(23,3416,1763,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(24,3416,1763,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(25,3416,1763,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(26,3416,1763,2,'kyo.lists$Lists$$Lambda$40+0x0000000800d0fb38')
f(23,5179,2770,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(24,5179,2770,2,'kyo.lists$Lists$$anon$11')
f(22,7949,2637,1,'scala/collection/mutable/ListBuffer.addOne')
f(23,7949,2637,2,'scala.collection.immutable.$colon$colon')
f(16,10586,3798,1,'kyo/bench/CollectAllBench.kyoBench')
f(17,10586,7,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(18,10586,7,2,'kyo.bench.CollectAllBench$$anon$2')
f(17,10593,9,1,'kyo/lists$Lists.collect')
f(18,10593,9,1,'scala/collection/mutable/ListBuffer$.apply')
f(19,10593,9,1,'scala/collection/IterableFactory.apply$')
f(20,10593,9,1,'scala/collection/IterableFactory.apply')
f(21,10593,9,1,'scala/collection/mutable/ListBuffer$.from')
f(22,10593,9,1,'scala/collection/mutable/ListBuffer$.from')
f(23,10593,9,2,'scala.collection.mutable.ListBuffer')
f(17,10602,2052,1,'scala/collection/AbstractIterable.toList')
f(18,10602,2052,1,'scala/collection/IterableOnceOps.toList$')
f(19,10602,2052,1,'scala/collection/IterableOnceOps.toList')
f(20,10602,2052,1,'scala/collection/immutable/List.prependedAll')
f(21,10602,2045,2,'scala.collection.immutable.$colon$colon')
f(21,12647,7,1,'scala/collection/immutable/Vector.iterator')
f(22,12647,7,2,'scala.collection.immutable.NewVectorIterator')
f(17,12654,1730,1,'scala/collection/immutable/Range.map')
f(18,12654,1169,1,'kyo/bench/CollectAllBench$$Lambda$39.0x0000000800cbeb88.apply')
f(19,12654,1169,1,'kyo/bench/CollectAllBench.$anonfun$adapted$1')
f(20,12654,1169,1,'kyo/bench/CollectAllBench.$anonfun$1')
f(21,12654,1169,2,'kyo.bench.CollectAllBench$$anon$1')
f(18,13823,9,1,'scala/collection/SeqFactory$Delegate.newBuilder')
f(19,13823,9,1,'scala/collection/immutable/Vector$.newBuilder')
f(20,13823,9,1,'scala/collection/immutable/Vector$.newBuilder')
f(21,13823,9,1,'scala/collection/immutable/VectorBuilder.<init>')
f(22,13823,9,2,'java.lang.Object[]')
f(18,13832,532,1,'scala/collection/immutable/VectorBuilder.addOne')
f(19,13832,532,1,'scala/collection/immutable/VectorBuilder.addOne')
f(20,13832,532,1,'scala/collection/immutable/VectorBuilder.advance')
f(21,13832,532,1,'scala/collection/immutable/VectorBuilder.advance1')
f(22,13832,11,2,'java.lang.Object[][]')
f(22,13843,521,2,'java.lang.Object[]')
f(18,14364,20,1,'scala/collection/immutable/VectorBuilder.result')
f(19,14364,20,1,'scala/collection/immutable/VectorBuilder.result')
f(20,14364,20,1,'java/util/Arrays.copyOfRange')
f(21,14364,20,2,'java.lang.Object[][]')
f(1,14384,5,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,14384,5,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,14384,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,14384,5,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,14384,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,14384,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,14384,1,1,'jdk/proxy1/$Proxy0.iterationResult')
f(8,14384,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient$$Lambda$8.0x0000000800c01c70.invoke')
f(9,14384,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.lambda$new$0')
f(10,14384,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushFrame')
f(11,14384,1,1,'java/io/ObjectOutputStream.writeObject')
f(12,14384,1,1,'java/io/ObjectOutputStream.writeObject0')
f(13,14384,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(14,14384,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(15,14384,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(16,14384,1,1,'java/io/ObjectOutputStream.writeObject0')
f(17,14384,1,1,'java/io/ObjectOutputStream.writeArray')
f(18,14384,1,1,'java/io/ObjectOutputStream.writeObject0')
f(19,14384,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(20,14384,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(21,14384,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(22,14384,1,1,'java/io/ObjectOutputStream.writeObject0')
f(23,14384,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(24,14384,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(25,14384,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(26,14384,1,1,'java/io/ObjectOutputStream.writeObject0')
f(27,14384,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(28,14384,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(29,14384,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(30,14384,1,1,'java/io/ObjectOutputStream.writeObject0')
f(31,14384,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(32,14384,1,1,'java/io/ObjectOutputStream$HandleTable.assign')
f(33,14384,1,1,'java/io/ObjectOutputStream$HandleTable.growEntries')
f(34,14384,1,2,'int[]')
f(7,14385,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,14385,1,2,'org.openjdk.jmh.infra.Control')
f(8,14386,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,14386,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,14386,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,14386,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,14386,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,14386,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,297,3,'all')
f(1,0,2,3,'[unknown_Java]')
f(2,0,1,1,'java/lang/Number.<init>')
f(2,1,1,1,'kyo/bench/CollectAllBench$$Lambda$41.0x0000000800d24940.apply')
f(1,2,294,1,'java/lang/Thread.run')
f(2,2,294,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,2,294,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,2,294,1,'java/util/concurrent/FutureTask.run')
f(5,2,294,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,2,294,1,'java/util/concurrent/FutureTask.run')
f(7,2,294,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,2,294,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,2,294,1,'java/lang/reflect/Method.invoke')
f(10,2,294,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,2,294,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,2,294,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,2,294,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,2,294,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,2,294,1,'kyo/bench/Bench.syncKyo',38,0,0)
f(16,2,190,1,'kyo/bench/Bench.runLoop$1',38,0,0)
f(17,17,175,1,'kyo/bench/CollectAllBench$$anon$2.apply',23,0,0)
f(18,18,86,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1',6,0,0)
f(19,19,80,1,'kyo/bench/CollectAllBench$$Lambda$41.0x0000000800d24940.apply')
f(20,19,80,2,'kyo/bench/CollectAllBench.$anonfun$2',59,0,0)
f(21,19,80,2,'scala/collection/AbstractIterable.sum',59,0,0)
f(22,19,80,2,'scala/collection/IterableOnceOps.sum$',59,0,0)
f(23,19,80,2,'scala/collection/IterableOnceOps.sum',59,0,0)
f(24,19,80,2,'scala/collection/AbstractIterable.reduce',59,0,0)
f(25,19,80,2,'scala/collection/IterableOnceOps.reduce$',59,0,0)
f(26,19,80,2,'scala/collection/IterableOnceOps.reduce',59,0,0)
f(27,19,80,2,'scala/collection/AbstractIterable.reduceLeft',59,0,0)
f(28,19,80,2,'scala/collection/IterableOnceOps.reduceLeft$',59,0,0)
f(29,19,80,2,'scala/collection/IterableOnceOps.reduceLeft',59,0,0)
f(30,20,73,2,'scala/collection/IterableOnceOps$$Lambda$42.0x0000000800d2a090.apply',52,0,0)
f(31,20,73,2,'scala/collection/IterableOnceOps.$anonfun$sum$1',52,0,0)
f(32,20,73,2,'scala/math/Numeric$IntIsIntegral$.plus',52,0,0)
f(33,20,68,2,'scala/runtime/BoxesRunTime.boxToInteger',47,0,0)
f(34,55,33,2,'java/lang/Integer.valueOf',12,0,0)
f(35,66,22,1,'java/lang/Integer.<init>',1,0,0)
f(36,67,21,1,'java/lang/Number.<init>')
f(33,88,5,2,'scala/runtime/BoxesRunTime.unboxToInt',5,0,0)
f(30,93,6,2,'scala/collection/StrictOptimizedLinearSeqOps$$anon$1.next',6,0,0)
f(31,98,1,2,'scala/collection/immutable/$colon$colon.head',1,0,0)
f(19,99,5,2,'kyo/bench/CollectAllBench$$anon$2.<init>',5,0,0)
f(20,103,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(18,104,88,1,'kyo/lists$Lists$$anon$11.apply',16,0,0)
f(19,108,12,2,'kyo/bench/CollectAllBench$$anon$1.apply',12,0,0)
f(20,108,12,2,'kyo/bench/CollectAllBench$$anon$1.apply',12,0,0)
f(21,108,12,2,'scala/runtime/BoxesRunTime.boxToInteger',12,0,0)
f(22,118,2,2,'java/lang/Integer.valueOf',2,0,0)
f(19,120,72,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(20,123,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(21,123,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(22,123,1,4,'MemAllocator::allocate() const')
f(23,123,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(24,123,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(25,123,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(26,123,1,4,'MutatorAllocRegion::retire(bool)')
f(27,123,1,4,'G1CollectedHeap::capacity() const')
f(20,124,60,2,'kyo/lists$Lists$$Lambda$40.0x0000000800d0fb38.apply',60,0,0)
f(21,124,60,2,'kyo/lists$Lists.$anonfun$5',60,0,0)
f(22,124,20,2,'kyo/lists$Lists.loop$2',20,0,0)
f(23,138,6,2,'scala/collection/immutable/List.equals',6,0,0)
f(24,138,6,2,'scala/collection/immutable/List.listEq$1',6,0,0)
f(25,142,2,2,'scala/collection/immutable/List.isEmpty',2,0,0)
f(22,144,40,2,'scala/collection/mutable/ListBuffer.addOne',40,0,0)
f(23,145,6,2,'scala/collection/immutable/$colon$colon.<init>',6,0,0)
f(24,145,1,2,'scala/collection/immutable/List.<init>',1,0,0)
f(25,145,1,2,'scala/collection/immutable/AbstractSeq.<init>',1,0,0)
f(26,145,1,2,'scala/collection/AbstractSeq.<init>',1,0,0)
f(27,145,1,2,'scala/collection/AbstractIterable.<init>',1,0,0)
f(24,146,5,2,'scala/runtime/Statics.releaseFence',5,0,0)
f(25,146,5,2,'java/lang/invoke/LambdaForm$MH.0x0000000800ca0400.invoke_MT',5,0,0)
f(23,151,4,2,'scala/collection/immutable/$colon$colon.next_$eq',4,0,0)
f(23,155,10,2,'scala/collection/mutable/ListBuffer.first_$eq',10,0,0)
f(23,165,19,2,'scala/collection/mutable/ListBuffer.last0_$eq',19,0,0)
f(20,184,8,2,'kyo/lists$Lists$$anon$11.<init>',8,0,0)
f(21,184,8,2,'kyo/core$internal$KyoCont.<init>',8,0,0)
f(22,185,4,2,'kyo/core$internal$Kyo.<init>',4,0,0)
f(22,189,2,2,'kyo/ios$KyoIO.effect',2,0,0)
f(22,191,1,2,'kyo/ios$KyoIO.value',1,0,0)
f(16,192,104,1,'kyo/bench/CollectAllBench.kyoBench')
f(17,192,60,2,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1',60,0,0)
f(18,192,60,2,'kyo/bench/CollectAllBench$$Lambda$41.0x0000000800d24940.apply',60,0,0)
f(19,192,60,2,'kyo/bench/CollectAllBench.$anonfun$2',60,0,0)
f(20,192,60,2,'scala/runtime/BoxesRunTime.boxToLong',60,0,0)
f(17,252,31,2,'scala/collection/immutable/Range.map',22,0,0)
f(18,266,2,2,'scala/collection/SeqFactory$Delegate.newBuilder',2,0,0)
f(19,267,1,2,'scala/collection/immutable/Vector$.newBuilder',1,0,0)
f(20,267,1,2,'scala/collection/immutable/Vector$.newBuilder',1,0,0)
f(21,267,1,2,'scala/collection/immutable/VectorBuilder.<init>',1,0,0)
f(18,268,15,2,'scala/collection/immutable/VectorBuilder.addOne',6,0,0)
f(19,268,15,2,'scala/collection/immutable/VectorBuilder.addOne',6,0,0)
f(20,274,9,1,'scala/collection/immutable/VectorBuilder.advance')
f(21,274,9,1,'scala/collection/immutable/VectorBuilder.advance1')
f(17,283,13,2,'scala/runtime/RichInt$.until$extension',13,0,0)
f(18,283,13,2,'scala/collection/immutable/Range$Exclusive.<init>',13,0,0)
f(19,284,12,2,'scala/collection/immutable/Range.<init>',12,0,0)
f(20,284,12,2,'scala/collection/immutable/Range.longLength',12,0,0)
f(1,296,1,3,'pthread_cond_broadcast')
f(2,296,1,5,'entry_SYSCALL_64_after_hwframe')
f(3,296,1,5,'do_syscall_64')
f(4,296,1,5,'__x64_sys_futex')
f(5,296,1,5,'do_futex')
f(6,296,1,5,'futex_wake')
f(7,296,1,5,'wake_up_q')
f(8,296,1,5,'_raw_spin_unlock_irqrestore')
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,19168,3,'all')
f(1,0,19165,1,'java/lang/Thread.run')
f(2,0,19165,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,19165,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,3090,1,'java/util/concurrent/FutureTask.run')
f(5,0,3090,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,3090,1,'java/util/concurrent/FutureTask.run')
f(7,0,3090,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,3090,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,3090,1,'java/lang/reflect/Method.invoke')
f(10,0,3090,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,3090,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,3090,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,3090,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,3090,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,3090,1,'kyo/bench/Bench.forkKyo')
f(16,0,199,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,199,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,199,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,128,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,0,128,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c81350')
f(19,128,71,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c81350')
f(16,199,441,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,199,441,2,'kyo.bench.Bench$$anon$1')
f(16,640,1844,1,'kyo/bench/Bench.runLoop$2')
f(17,640,769,1,'kyo/bench/Bench$$anon$1.apply')
f(18,640,3,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,640,3,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c88000.apply')
f(20,640,3,1,'kyo/bench/Bench.$anonfun$2')
f(21,640,3,1,'kyo/concurrent/fibers$Fiber.block')
f(22,640,3,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,643,766,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,643,766,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,643,766,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply')
f(21,643,766,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,643,246,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,889,350,2,'kyo.concurrent.scheduler.IOTask')
f(22,1239,170,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,1239,170,2,'kyo.concurrent.fibers$Fiber')
f(17,1409,1075,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,1409,1075,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,1409,1075,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,1409,1075,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,1409,493,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,1409,493,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,1409,243,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,1652,250,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,1652,250,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,1902,316,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,2218,266,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,2218,266,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,2218,266,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,2484,606,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,2484,207,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,2484,207,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,2484,207,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,2484,207,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c82aa8')
f(17,2691,268,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,2691,268,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,2959,131,1,'kyo/locals$Locals$.save')
f(18,2959,131,2,'kyo.locals$Locals$$anon$3')
f(4,3090,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ee58.run')
f(5,3090,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,3090,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,3090,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,3090,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,3090,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,3090,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,3090,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,3100,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,3100,1,2,'java.lang.String')
f(4,3101,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f080.run')
f(5,3101,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,3101,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,3101,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,3101,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,3101,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,3101,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,3101,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$68+0x0000000800d4ed20')
f(4,3112,16053,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23480.run')
f(5,3112,16053,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,3112,16053,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,3112,15989,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,3112,15989,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,3112,15891,1,'kyo/bench/CountdownLatchBench$$anon$1.apply')
f(10,3112,15890,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(11,3112,15890,1,'kyo/bench/CountdownLatchBench$$Lambda$62.0x0000000800d4d100.apply')
f(12,3112,15890,1,'kyo/bench/CountdownLatchBench.$anonfun$1')
f(13,3112,15890,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(14,3112,6583,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod')
f(15,3112,6583,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial')
f(16,3112,6583,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,3112,6583,2,'kyo.bench.CountdownLatchBench$$Lambda$62+0x0000000800d4d100')
f(14,9695,9307,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(15,9695,9307,2,'kyo.bench.CountdownLatchBench$$anon$1')
f(10,19002,1,1,'kyo/concurrent/latches$$anon$4.apply')
f(11,19002,1,1,'kyo/concurrent/latches$$anon$4.apply')
f(12,19002,1,1,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete')
f(13,19002,1,1,'kyo/concurrent/fibers$Fiber$Promise.loop$23')
f(14,19002,1,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(15,19002,1,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(16,19002,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(17,19002,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(18,19002,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(19,19002,1,1,'scala/runtime/function/JProcedure1.apply')
f(20,19002,1,1,'scala/runtime/function/JProcedure1.apply')
f(21,19002,1,1,'kyo/concurrent/scheduler/IOTask$$Lambda$64.0x0000000800d4dad8.applyVoid')
f(22,19002,1,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(23,19002,1,2,'kyo.concurrent.scheduler.IOTask')
f(9,19003,3,1,'kyo/bench/CountdownLatchBench$$anon$3.apply')
f(10,19003,3,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,19003,3,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,19003,3,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply')
f(13,19003,3,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,19003,2,2,'kyo.concurrent.scheduler.IOTask')
f(14,19005,1,1,'kyo/concurrent/fibers$Fiber$.promise')
f(15,19005,1,2,'kyo.concurrent.fibers$Fiber')
f(9,19006,9,1,'kyo/bench/CountdownLatchBench$$anon$4.apply')
f(10,19006,6,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$4')
f(11,19006,6,1,'kyo/bench/CountdownLatchBench$$Lambda$57.0x0000000800d4a700.apply')
f(12,19006,6,1,'kyo/bench/CountdownLatchBench.$anonfun$2')
f(13,19006,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(14,19006,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(15,19006,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,19006,1,2,'kyo.bench.CountdownLatchBench$$Lambda$59+0x0000000800d4c6a8')
f(13,19007,1,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$3')
f(14,19007,1,2,'kyo.bench.CountdownLatchBench$$anon$3')
f(13,19008,4,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(14,19008,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(15,19008,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(16,19008,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,19008,2,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c82aa8')
f(14,19010,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(15,19010,2,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(10,19012,3,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(11,19012,3,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(12,19012,3,1,'kyo/concurrent/latches$$anon$3.<init>')
f(13,19012,1,2,'kyo.concurrent.latches$$anon$4')
f(13,19013,1,1,'kyo/concurrent/fibers$Fiber.join')
f(14,19013,1,1,'kyo/concurrent/fibers$Fibers.get')
f(15,19013,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(16,19013,1,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(13,19014,1,1,'kyo/concurrent/fibers$Fibers.unsafePromise')
f(14,19014,1,2,'kyo.concurrent.scheduler.IOPromise')
f(9,19015,84,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,19015,84,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,19015,84,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c81350.apply')
f(12,19015,84,1,'kyo/bench/Bench.$anonfun$1')
f(13,19015,84,1,'kyo/bench/CountdownLatchBench.kyoBenchFiber')
f(14,19015,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(15,19015,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(16,19015,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,19015,1,2,'kyo.bench.CountdownLatchBench$$Lambda$57+0x0000000800d4a700')
f(14,19016,83,1,'kyo/concurrent/latches$Latches$.init')
f(15,19016,83,1,'kyo/concurrent/latches$Latches$.kyo$concurrent$latches$Latches$$$_$transformLoop$1')
f(16,19016,83,1,'kyo/concurrent/latches$Latches$$$Lambda$56.0x0000000800d49640.apply')
f(17,19016,83,1,'kyo/concurrent/latches$Latches$.$anonfun$adapted$1')
f(18,19016,83,1,'kyo/concurrent/latches$Latches$.$anonfun$1')
f(19,19016,83,2,'kyo.concurrent.latches$Latches$$anon$2')
f(9,19099,2,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,19099,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,19099,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,19099,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,19099,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$63+0x0000000800d4d6d0')
f(10,19100,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,19100,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,19101,64,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,19101,64,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,19101,64,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,19101,64,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,19101,64,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(12,19101,64,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d48230')
f(1,19165,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,19165,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,19165,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,19165,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,19165,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,19165,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,19165,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,19165,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,19165,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,19165,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,19165,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,19165,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,19165,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: 656px}
</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(41);
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,282,3,'all')
f(1,0,8,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,1,7,3,'thread_native_entry(Thread*)')
f(3,1,7,4,'Thread::call_run()')
f(4,1,6,4,'JavaThread::thread_main_inner()')
f(5,1,6,4,'CompileBroker::compiler_thread_loop()')
f(6,1,6,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,1,6,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,1,6,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,1,3,4,'Compile::Code_Gen()')
f(10,1,1,4,'PhaseCFG::do_global_code_motion()')
f(11,1,1,4,'PhaseCFG::global_code_motion()')
f(12,1,1,4,'PhaseLive::compute(unsigned int)')
f(13,1,1,4,'IndexSet::initialize(unsigned int)')
f(10,2,2,4,'PhaseChaitin::Register_Allocate()')
f(11,2,1,4,'PhaseChaitin::build_ifg_virtual()')
f(11,3,1,4,'PhaseChaitin::gather_lrg_masks(bool) [clone .constprop.0]')
f(9,4,1,4,'Compile::Optimize()')
f(10,4,1,4,'PhaseCCP::analyze()')
f(9,5,2,4,'ParseGenerator::generate(JVMState*)')
f(10,5,2,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(11,5,2,4,'Parse::do_all_blocks()')
f(12,5,2,4,'Parse::do_one_block()')
f(13,5,2,4,'Parse::do_call()')
f(14,5,2,4,'PredictedCallGenerator::generate(JVMState*)')
f(15,5,1,4,'ParseGenerator::generate(JVMState*)')
f(16,5,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(17,5,1,4,'Parse::do_all_blocks()')
f(18,5,1,4,'Parse::do_one_block()')
f(19,5,1,4,'Parse::do_call()')
f(20,5,1,4,'ParseGenerator::generate(JVMState*)')
f(21,5,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(22,5,1,4,'Parse::do_all_blocks()')
f(23,5,1,4,'Parse::do_one_block()')
f(24,5,1,4,'Parse::do_call()')
f(25,5,1,4,'ParseGenerator::generate(JVMState*)')
f(26,5,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(27,5,1,4,'Parse::do_all_blocks()')
f(28,5,1,4,'Parse::do_one_block()')
f(29,5,1,4,'Parse::do_call()')
f(30,5,1,4,'ParseGenerator::generate(JVMState*)')
f(31,5,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(32,5,1,4,'Parse::do_all_blocks()')
f(33,5,1,4,'Parse::do_one_block()')
f(34,5,1,4,'Parse::do_field_access(bool, bool)')
f(35,5,1,4,'Parse::do_put_xxx(Node*, ciField*, bool)')
f(36,5,1,4,'GraphKit::access_store_at(Node*, Node*, TypePtr const*, Node*, Type const*, BasicType, unsigned long)')
f(37,5,1,4,'BarrierSetC2::store_at(C2Access&, C2AccessValue&) const')
f(38,5,1,4,'ModRefBarrierSetC2::store_at_resolved(C2Access&, C2AccessValue&) const')
f(39,5,1,4,'G1BarrierSetC2::pre_barrier(GraphKit*, bool, Node*, Node*, Node*, unsigned int, Node*, TypeOopPtr const*, Node*, BasicType) const')
f(40,5,1,4,'PhaseGVN::transform_no_reclaim(Node*)')
f(15,6,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(16,6,1,4,'ParseGenerator::generate(JVMState*)')
f(17,6,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(18,6,1,4,'Parse::do_all_blocks()')
f(19,6,1,4,'Parse::do_one_block()')
f(20,6,1,4,'Parse::do_call()')
f(21,6,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(22,6,1,4,'ParseGenerator::generate(JVMState*)')
f(23,6,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(24,6,1,4,'Parse::do_all_blocks()')
f(25,6,1,4,'Parse::do_one_block()')
f(26,6,1,4,'Parse::do_call()')
f(27,6,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(28,6,1,4,'UncommonTrapCallGenerator::generate(JVMState*)')
f(29,6,1,4,'GraphKit::transfer_exceptions_into_jvms()')
f(30,6,1,4,'Node::add_req(Node*)')
f(31,6,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(4,7,1,4,'VMThread::run()')
f(5,7,1,4,'VMThread::inner_execute(VM_Operation*)')
f(6,7,1,4,'VMThread::evaluate_operation(VM_Operation*)')
f(7,7,1,4,'VM_Operation::evaluate()')
f(8,7,1,4,'VM_G1CollectForAllocation::doit()')
f(9,7,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint(double)')
f(10,7,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint_helper(double)')
f(11,7,1,4,'G1CollectedHeap::post_evacuate_collection_set(G1EvacuationInfo&, G1RedirtyCardsQueueSet*, G1ParScanThreadStateSet*)')
f(12,7,1,4,'void WeakProcessor::weak_oops_do<G1STWIsAliveClosure, G1KeepAliveClosure>(WorkGang*, G1STWIsAliveClosure*, G1KeepAliveClosure*, WeakProcessorTimes*)')
f(13,7,1,4,'WorkGang::run_task(AbstractGangTask*, unsigned int, bool)')
f(14,7,1,3,'sem_post')
f(15,7,1,5,'entry_SYSCALL_64_after_hwframe')
f(16,7,1,5,'do_syscall_64')
f(17,7,1,5,'__x64_sys_futex')
f(18,7,1,5,'do_futex')
f(19,7,1,5,'futex_wake')
f(20,7,1,5,'wake_up_q')
f(21,7,1,5,'_raw_spin_unlock_irqrestore')
f(1,8,1,3,'[unknown]')
f(2,8,1,3,'/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2')
f(1,9,273,1,'java/lang/Thread.run')
f(2,9,273,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,9,273,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,9,17,1,'java/util/concurrent/FutureTask.run')
f(5,9,17,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,9,17,1,'java/util/concurrent/FutureTask.run')
f(7,9,17,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,9,17,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,9,17,1,'java/lang/reflect/Method.invoke')
f(10,9,17,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,9,17,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,9,17,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,9,17,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,9,17,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,9,17,1,'kyo/bench/Bench.forkKyo')
f(16,9,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,9,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,9,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,9,2,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,10,1,4,'JNIHandleBlock::allocate_handle(oopDesc*, AllocFailStrategy::AllocFailEnum)')
f(16,11,15,1,'kyo/bench/Bench.runLoop$2')
f(17,11,8,1,'kyo/bench/Bench$$anon$1.apply')
f(18,11,8,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,12,7,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,12,7,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply')
f(21,12,7,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,12,7,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,12,7,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,12,6,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,12,6,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,12,6,1,'jdk/internal/misc/Unsafe.unpark')
f(27,12,6,3,'pthread_cond_signal')
f(28,12,6,5,'entry_SYSCALL_64_after_hwframe')
f(29,12,6,5,'do_syscall_64')
f(30,12,6,5,'__x64_sys_futex')
f(31,12,6,5,'do_futex')
f(32,12,6,5,'futex_wake')
f(33,12,6,5,'wake_up_q')
f(34,12,6,5,'_raw_spin_unlock_irqrestore')
f(24,18,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.poll')
f(25,18,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.switchToNextConsumerChunkAndPoll')
f(26,18,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.moveToNextConsumerChunk')
f(27,18,1,1,'org/jctools/queues/MpUnboundedXaddChunk.soPrev')
f(17,19,7,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,19,7,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,19,7,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,19,7,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,19,7,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,19,7,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,19,7,1,'java/util/concurrent/locks/LockSupport.park')
f(24,19,7,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(30,19,1,5,'do_futex')
f(31,19,1,5,'futex_wake')
f(32,19,1,5,'get_futex_key')
f(26,20,1,4,'Parker::park(bool, long)')
f(25,21,5,3,'[unknown]')
f(26,21,5,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,21,5,5,'entry_SYSCALL_64_after_hwframe')
f(28,21,5,5,'do_syscall_64')
f(29,21,5,5,'__x64_sys_futex')
f(30,21,5,5,'do_futex')
f(31,21,5,5,'futex_wait')
f(32,21,5,5,'futex_wait_queue_me')
f(33,21,5,5,'schedule')
f(34,21,5,5,'__schedule')
f(35,21,5,5,'finish_task_switch.isra.0')
f(4,26,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ee58.run')
f(5,26,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,26,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,26,1,1,'java/lang/Thread.sleep')
f(8,26,1,3,'JVM_Sleep')
f(9,26,1,4,'JavaThread::sleep(long)')
f(4,27,255,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23480.run')
f(5,27,255,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,27,255,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,27,242,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,27,242,2,'kyo/concurrent/scheduler/IOTask.eval',226,0,0)
f(9,29,226,2,'kyo/bench/CountdownLatchBench$$anon$1.apply',223,0,0)
f(10,75,180,2,'kyo/concurrent/latches$$anon$4.apply',177,0,0)
f(11,81,174,2,'kyo/concurrent/latches$$anon$4.apply',171,0,0)
f(12,98,157,2,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete',154,0,0)
f(13,102,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(14,102,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(15,102,1,4,'MemAllocator::allocate() const')
f(16,102,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(17,102,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(18,102,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(19,102,1,4,'MutatorAllocRegion::retire(bool)')
f(20,102,1,4,'G1CollectedHeap::retire_mutator_alloc_region(HeapRegion*, unsigned long)')
f(21,102,1,4,'G1CollectionSet::add_eden_region(HeapRegion*)')
f(22,102,1,4,'G1Policy::predict_region_non_copy_time_ms(HeapRegion*, bool) const')
f(23,102,1,4,'AbsSeq::dsd() const')
f(13,103,1,4,'SharedRuntime::on_slowpath_allocation_exit(JavaThread*)')
f(13,104,151,2,'kyo/concurrent/fibers$Fiber$Promise.loop$23',150,0,0)
f(14,153,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(15,153,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(16,153,1,4,'MemAllocator::allocate() const')
f(17,153,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(18,153,1,4,'G1Allocator::unsafe_max_tlab_alloc()')
f(14,154,101,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',101,0,0)
f(15,154,101,2,'kyo/concurrent/scheduler/IOPromise.complete',101,0,0)
f(16,190,21,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',21,0,0)
f(17,190,21,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',21,0,0)
f(18,199,12,2,'java/lang/invoke/VarHandle.checkExactAccessMode',12,0,0)
f(16,211,44,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',44,0,0)
f(17,211,44,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',44,0,0)
f(18,242,13,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$5.run',13,0,0)
f(9,255,1,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',1,0,0)
f(9,256,13,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,256,13,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,256,13,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,256,13,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,256,13,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,256,13,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,256,13,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,256,13,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,256,13,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,256,13,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,256,13,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,256,13,1,'jdk/internal/misc/Unsafe.unpark')
f(21,256,13,3,'pthread_cond_signal')
f(22,257,12,5,'entry_SYSCALL_64_after_hwframe')
f(23,257,11,5,'do_syscall_64')
f(24,257,8,5,'__x64_sys_futex')
f(25,257,8,5,'do_futex')
f(26,257,8,5,'futex_wake')
f(27,258,1,5,'get_futex_key')
f(27,259,6,5,'wake_up_q')
f(28,259,6,5,'_raw_spin_unlock_irqrestore')
f(24,265,3,5,'syscall_enter_from_user_mode')
f(23,268,1,5,'syscall_exit_to_user_mode')
f(7,269,1,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,269,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,269,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,269,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,269,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(12,269,1,3,'Unsafe_AllocateInstance')
f(13,269,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(14,269,1,4,'MemAllocator::allocate() const')
f(15,269,1,4,'ObjAllocator::initialize(HeapWordImpl**) const')
f(7,270,12,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,270,12,1,'kyo/concurrent/scheduler/Worker.park')
f(9,270,12,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,270,12,1,'jdk/internal/misc/Unsafe.park')
f(11,270,2,3,'Unsafe_Park')
f(12,271,1,4,'Parker::park(bool, long)')
f(11,272,10,3,'[unknown]')
f(12,272,10,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,272,10,5,'entry_SYSCALL_64_after_hwframe')
f(14,272,10,5,'do_syscall_64')
f(15,272,10,5,'__x64_sys_futex')
f(16,272,10,5,'do_futex')
f(17,272,10,5,'futex_wait')
f(18,273,9,5,'futex_wait_queue_me')
f(19,273,1,5,'hrtimer_sleeper_start_expires')
f(20,273,1,5,'_raw_spin_unlock_irqrestore')
f(19,274,8,5,'schedule')
f(20,274,8,5,'__schedule')
f(21,274,8,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: 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,19568,3,'all')
f(1,0,19565,1,'java/lang/Thread.run')
f(2,0,19565,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,19565,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,3859,1,'java/util/concurrent/FutureTask.run')
f(5,0,3859,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,3859,1,'java/util/concurrent/FutureTask.run')
f(7,0,3859,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,3859,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,3859,1,'java/lang/reflect/Method.invoke')
f(10,0,3859,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,3859,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,3859,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,3859,1,'kyo/bench/jmh_generated/CountdownLatchBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,3859,1,'kyo/bench/jmh_generated/CountdownLatchBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,3859,1,'kyo/bench/Bench.syncKyo')
f(16,0,1964,1,'kyo/bench/Bench.runLoop$1')
f(17,0,1073,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,1073,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,1073,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,1073,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,470,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,470,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,131,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,131,339,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,131,339,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,470,364,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,834,239,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,834,239,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,834,239,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,1073,891,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,1073,774,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,1073,774,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,1073,774,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,1073,680,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,1073,680,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,1073,680,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply')
f(24,1073,680,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,1073,134,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(25,1207,521,2,'kyo.concurrent.scheduler.IOTask')
f(25,1728,25,1,'kyo/concurrent/fibers$Fiber$.promise')
f(26,1728,25,2,'kyo.concurrent.fibers$Fiber')
f(21,1753,94,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,1753,94,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c88000.apply')
f(23,1753,94,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,1753,94,1,'kyo/concurrent/fibers$Fiber.join')
f(25,1753,94,1,'kyo/concurrent/fibers$Fibers.get')
f(26,1753,94,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,1753,94,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,1847,117,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,1847,117,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c88800.apply')
f(20,1847,117,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,1847,117,1,'kyo/concurrent/fibers$Fiber.block')
f(22,1847,117,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,1964,1895,1,'kyo/bench/CountdownLatchBench.kyoBench')
f(17,1964,203,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1964,203,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1964,203,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1964,86,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(21,1964,86,2,'kyo.bench.CountdownLatchBench$$Lambda$37+0x0000000800c81350')
f(20,2050,117,2,'kyo.bench.CountdownLatchBench$$Lambda$37+0x0000000800c81350')
f(17,2167,841,1,'kyo/concurrent/fibers$Fibers.block')
f(18,2167,93,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,2167,93,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,2167,93,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,2167,93,2,'kyo.concurrent.fibers$Fibers$$Lambda$40+0x0000000800c88800')
f(18,2260,96,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,2260,96,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,2356,524,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,2356,524,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,2880,128,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,2880,128,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,3008,851,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,3008,189,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,3008,189,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,3008,189,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,3008,189,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c88000')
f(18,3197,530,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,3197,134,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,3197,134,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,3197,134,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,3197,134,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c82aa8')
f(19,3331,371,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,3331,371,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(19,3702,25,1,'kyo/locals$Locals$.save')
f(20,3702,25,2,'kyo.locals$Locals$$anon$3')
f(18,3727,132,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,3727,132,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(4,3859,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f088.run')
f(5,3859,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,3859,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,3859,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,3859,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,3859,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,3859,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,3859,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,3869,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,3869,1,2,'java.lang.String')
f(4,3870,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1f2b0.run')
f(5,3870,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,3870,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,3870,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,3870,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,3870,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,3870,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,3870,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$67+0x0000000800d4e7a0')
f(4,3881,15684,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23688.run')
f(5,3881,15684,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,3881,15684,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,3881,15683,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,3881,15683,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,3881,15494,1,'kyo/bench/CountdownLatchBench$$anon$1.apply')
f(10,3881,15492,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(11,3881,15492,1,'kyo/bench/CountdownLatchBench$$Lambda$63.0x0000000800d4d100.apply')
f(12,3881,15492,1,'kyo/bench/CountdownLatchBench.$anonfun$1')
f(13,3881,15492,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(14,3881,6570,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod')
f(15,3881,6570,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial')
f(16,3881,6570,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,3881,6570,2,'kyo.bench.CountdownLatchBench$$Lambda$63+0x0000000800d4d100')
f(14,10451,8922,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(15,10451,8922,2,'kyo.bench.CountdownLatchBench$$anon$1')
f(10,19373,2,1,'kyo/concurrent/latches$$anon$4.apply')
f(11,19373,2,1,'kyo/concurrent/latches$$anon$4.apply')
f(12,19373,2,1,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete')
f(13,19373,2,1,'kyo/concurrent/fibers$Fiber$Promise.loop$23')
f(14,19373,2,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(15,19373,2,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(16,19373,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(17,19373,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(18,19373,2,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(19,19373,2,1,'scala/runtime/function/JProcedure1.apply')
f(20,19373,2,1,'scala/runtime/function/JProcedure1.apply')
f(21,19373,2,1,'kyo/concurrent/scheduler/IOTask$$Lambda$65.0x0000000800d4dad8.applyVoid')
f(22,19373,2,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(23,19373,1,2,'kyo.concurrent.scheduler.IOTask')
f(23,19374,1,1,'kyo/concurrent/scheduler/IOPromise.become')
f(24,19374,1,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(25,19374,1,1,'kyo/concurrent/scheduler/IOPromise$Linked$.apply')
f(26,19374,1,2,'kyo.concurrent.scheduler.IOPromise$Linked')
f(9,19375,1,1,'kyo/bench/CountdownLatchBench$$anon$3.apply')
f(10,19375,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,19375,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,19375,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply')
f(13,19375,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,19375,1,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(9,19376,6,1,'kyo/bench/CountdownLatchBench$$anon$4.apply')
f(10,19376,4,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$4')
f(11,19376,4,1,'kyo/bench/CountdownLatchBench$$Lambda$58.0x0000000800d4a930.apply')
f(12,19376,4,1,'kyo/bench/CountdownLatchBench.$anonfun$2')
f(13,19376,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(14,19376,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(15,19376,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,19376,1,2,'kyo.bench.CountdownLatchBench$$Lambda$59+0x0000000800d4c3e8')
f(13,19377,3,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(14,19377,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(15,19377,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(16,19377,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,19377,1,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c82aa8')
f(14,19378,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(15,19378,1,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(14,19379,1,1,'kyo/locals$Locals$.save')
f(15,19379,1,2,'kyo.locals$Locals$$anon$3')
f(10,19380,2,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(11,19380,2,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(12,19380,2,1,'kyo/concurrent/latches$$anon$3.<init>')
f(13,19380,2,1,'kyo/concurrent/fibers$Fibers.unsafePromise')
f(14,19380,2,2,'kyo.concurrent.fibers$Fiber$Promise')
f(9,19382,181,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,19382,181,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,19382,180,1,'kyo/bench/CountdownLatchBench$$Lambda$37.0x0000000800c81350.apply')
f(12,19382,180,1,'kyo/bench/CountdownLatchBench.kyoBench$$anonfun$1')
f(13,19382,180,1,'kyo/bench/CountdownLatchBench.kyoBenchFiber')
f(14,19382,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(15,19382,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(16,19382,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,19382,1,2,'kyo.bench.CountdownLatchBench$$Lambda$58+0x0000000800d4a930')
f(14,19383,179,1,'kyo/concurrent/latches$Latches$.init')
f(15,19383,179,1,'kyo/concurrent/latches$Latches$.kyo$concurrent$latches$Latches$$$_$transformLoop$1')
f(16,19383,179,1,'kyo/concurrent/latches$Latches$$$Lambda$57.0x0000000800d49870.apply')
f(17,19383,179,1,'kyo/concurrent/latches$Latches$.$anonfun$adapted$1')
f(18,19383,179,1,'kyo/concurrent/latches$Latches$.$anonfun$1')
f(19,19383,179,2,'kyo.concurrent.latches$Latches$$anon$2')
f(11,19562,1,1,'kyo/bench/CountdownLatchBench$$Lambda$59.0x0000000800d4c3e8.apply')
f(12,19562,1,1,'kyo/bench/CountdownLatchBench.$anonfun$3')
f(13,19562,1,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(14,19562,1,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod')
f(15,19562,1,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial')
f(16,19562,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,19562,1,2,'kyo.bench.CountdownLatchBench$$Lambda$63+0x0000000800d4d100')
f(9,19563,1,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,19563,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,19563,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,19564,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,19564,1,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,19564,1,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,19564,1,1,'scala/runtime/ObjectRef.create')
f(11,19564,1,2,'scala.runtime.ObjectRef')
f(1,19565,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,19565,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,19565,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,19565,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,19565,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,19565,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,19565,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,19565,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,19565,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,19565,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,19565,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,19565,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,19565,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 608px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(38);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,277,3,'all')
f(1,0,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,1,4,'Compile::Code_Gen()')
f(10,0,1,4,'PhaseChaitin::Register_Allocate()')
f(11,0,1,4,'RegMask::is_bound(unsigned int) const')
f(9,1,2,4,'Compile::Optimize()')
f(10,1,1,4,'PhaseIdealLoop::optimize(PhaseIterGVN&, LoopOptsMode)')
f(11,1,1,4,'PhaseIdealLoop::build_and_optimize(LoopOptsMode)')
f(12,1,1,4,'PhaseIdealLoop::split_if_with_blocks(VectorSet&, Node_Stack&)')
f(13,1,1,4,'PhaseIdealLoop::split_if_with_blocks_post(Node*)')
f(14,1,1,4,'PhaseIdealLoop::try_sink_out_of_loop(Node*)')
f(15,1,1,4,'PhaseIdealLoop::get_ctrl(Node*) [clone .isra.0]')
f(10,2,1,4,'PhaseRenumberLive::PhaseRenumberLive(PhaseGVN*, Unique_Node_List*, Unique_Node_List*, Phase::PhaseNumber)')
f(11,2,1,4,'PhaseRemoveUseless::PhaseRemoveUseless(PhaseGVN*, Unique_Node_List*, Phase::PhaseNumber)')
f(12,2,1,4,'Compile::update_dead_node_list(Unique_Node_List&)')
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,'GCHeapLog::log_heap(CollectedHeap*, bool) [clone .part.0]')
f(12,3,1,4,'outputStream::do_vsnprintf_and_write_with_automatic_buffer(char const*, __va_list_tag*, bool)')
f(1,4,273,1,'java/lang/Thread.run')
f(2,4,273,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,4,273,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,4,17,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',0,1,0)
f(15,4,16,1,'kyo/bench/Bench.syncKyo',1,0,0)
f(16,4,15,1,'kyo/bench/Bench.runLoop$1')
f(17,4,6,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,4,6,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,4,6,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,4,6,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,4,6,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,4,6,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,4,6,1,'java/util/concurrent/locks/LockSupport.park')
f(24,4,6,1,'jdk/internal/misc/Unsafe.park')
f(25,4,6,3,'[unknown]')
f(26,4,6,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,4,6,5,'entry_SYSCALL_64_after_hwframe')
f(28,4,6,5,'do_syscall_64')
f(29,4,5,5,'__x64_sys_futex')
f(30,4,5,5,'do_futex')
f(31,4,5,5,'futex_wait')
f(32,5,3,5,'futex_wait_queue_me')
f(33,5,3,5,'schedule')
f(34,5,3,5,'__schedule')
f(35,5,3,5,'finish_task_switch.isra.0')
f(32,8,1,5,'futex_wait_setup')
f(29,9,1,5,'syscall_enter_from_user_mode')
f(17,10,9,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,10,9,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,10,9,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,10,9,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,10,9,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,10,9,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,10,9,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply')
f(24,10,9,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,10,9,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,10,9,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,10,9,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(28,10,9,1,'java/util/concurrent/locks/LockSupport.unpark')
f(29,10,9,1,'jdk/internal/misc/Unsafe.unpark')
f(30,10,1,3,'Unsafe_Unpark')
f(31,10,1,3,'pthread_mutex_lock')
f(30,11,8,3,'pthread_cond_signal')
f(31,11,8,5,'entry_SYSCALL_64_after_hwframe')
f(32,11,8,5,'do_syscall_64')
f(33,11,8,5,'__x64_sys_futex')
f(34,11,8,5,'do_futex')
f(35,11,8,5,'futex_wake')
f(36,11,8,5,'wake_up_q')
f(37,11,8,5,'_raw_spin_unlock_irqrestore')
f(16,19,1,2,'kyo/bench/CountdownLatchBench.kyoBench',1,0,0)
f(17,19,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(18,19,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(19,19,1,2,'kyo/bench/CountdownLatchBench$$Lambda$37.0x0000000800c81350.<init>',1,0,0)
f(5,20,1,1,'java/util/concurrent/FutureTask.set')
f(6,20,1,1,'java/util/concurrent/FutureTask.finishCompletion')
f(7,20,1,1,'java/util/concurrent/ExecutorCompletionService$QueueingFuture.done')
f(8,20,1,1,'java/util/AbstractQueue.add')
f(9,20,1,1,'java/util/concurrent/LinkedBlockingQueue.offer')
f(10,20,1,1,'java/util/concurrent/LinkedBlockingQueue.signalNotEmpty')
f(11,20,1,1,'java/util/concurrent/locks/ReentrantLock.lock')
f(12,20,1,1,'java/util/concurrent/locks/ReentrantLock$Sync.lock')
f(13,20,1,0,'java/util/concurrent/locks/ReentrantLock$NonfairSync.initialTryLock',0,0,1)
f(14,20,1,4,'InterpreterRuntime::resolve_from_cache(JavaThread*, Bytecodes::Code)')
f(15,20,1,4,'InterpreterRuntime::resolve_invoke(JavaThread*, Bytecodes::Code)')
f(16,20,1,4,'LinkResolver::resolve_invoke(CallInfo&, Handle, constantPoolHandle const&, int, Bytecodes::Code, JavaThread*)')
f(17,20,1,4,'LinkResolver::linktime_resolve_virtual_method(LinkInfo const&, JavaThread*)')
f(18,20,1,4,'LinkResolver::resolve_method(LinkInfo const&, Bytecodes::Code, JavaThread*)')
f(19,20,1,4,'LinkResolver::lookup_method_in_klasses(LinkInfo const&, bool, bool)')
f(20,20,1,4,'InstanceKlass::uncached_lookup_method(Symbol const*, Symbol const*, Klass::OverpassLookupMode, Klass::PrivateLookupMode) const')
f(21,20,1,4,'InstanceKlass::find_method_index(Array<Method*> const*, Symbol const*, Symbol const*, Klass::OverpassLookupMode, Klass::StaticLookupMode, Klass::PrivateLookupMode) [clone .constprop.0]')
f(4,21,256,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23688.run')
f(5,21,256,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,21,256,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,21,253,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,21,253,2,'kyo/concurrent/scheduler/IOTask.eval',240,0,0)
f(9,33,229,2,'kyo/bench/CountdownLatchBench$$anon$1.apply',226,0,0)
f(10,83,179,2,'kyo/concurrent/latches$$anon$4.apply',176,0,0)
f(11,95,167,2,'kyo/concurrent/latches$$anon$4.apply',164,0,0)
f(12,99,163,2,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete',160,0,0)
f(13,113,2,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(14,113,2,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(15,113,2,4,'MemAllocator::Allocation::notify_allocation_jfr_sampler()')
f(13,115,147,2,'kyo/concurrent/fibers$Fiber$Promise.loop$23',146,0,0)
f(14,133,129,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',128,0,0)
f(15,133,129,2,'kyo/concurrent/scheduler/IOPromise.complete',128,0,0)
f(16,170,60,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',60,0,0)
f(17,171,59,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',59,0,0)
f(18,181,31,2,'java/lang/invoke/VarForm.getMemberName',31,0,0)
f(18,212,18,2,'java/lang/invoke/VarHandle.checkExactAccessMode',18,0,0)
f(16,230,32,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',31,0,0)
f(17,230,32,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',31,0,0)
f(18,243,2,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run',1,0,0)
f(19,244,1,1,'scala/runtime/function/JProcedure1.apply')
f(20,244,1,2,'scala/runtime/function/JProcedure1.apply',1,0,0)
f(21,244,1,2,'kyo/concurrent/scheduler/IOTask$$Lambda$65.0x0000000800d4dad8.applyVoid',1,0,0)
f(22,244,1,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',1,0,0)
f(23,244,1,2,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1',1,0,0)
f(24,244,1,2,'kyo/concurrent/scheduler/IOTask$$Lambda$66.0x0000000800d4dee0.apply',1,0,0)
f(25,244,1,2,'kyo/concurrent/scheduler/IOTask.$anonfun$1',1,0,0)
f(26,244,1,2,'kyo/bench/CountdownLatchBench$$anon$2.apply',1,0,0)
f(27,244,1,2,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$2',1,0,0)
f(18,245,17,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$5.run',17,0,0)
f(9,262,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,262,1,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',1,0,0)
f(11,262,1,2,'kyo/bench/CountdownLatchBench$$Lambda$59.0x0000000800d4c3e8.apply',1,0,0)
f(12,262,1,2,'kyo/bench/CountdownLatchBench.$anonfun$3',1,0,0)
f(13,262,1,2,'kyo/bench/CountdownLatchBench.iterate$2',1,0,0)
f(14,262,1,2,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1',1,0,0)
f(15,262,1,2,'kyo/bench/CountdownLatchBench$$anon$1.<init>',1,0,0)
f(16,262,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(9,263,2,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',2,0,0)
f(9,265,9,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,265,9,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,265,9,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,265,9,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,265,9,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,265,9,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,265,9,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,265,9,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,265,9,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,265,9,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,265,9,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,265,9,1,'jdk/internal/misc/Unsafe.unpark')
f(21,265,1,3,'Unsafe_Unpark')
f(21,266,8,3,'pthread_cond_signal')
f(22,267,7,5,'entry_SYSCALL_64_after_hwframe')
f(23,267,7,5,'do_syscall_64')
f(24,267,7,5,'__x64_sys_futex')
f(25,267,7,5,'do_futex')
f(26,267,7,5,'futex_wake')
f(27,267,7,5,'wake_up_q')
f(28,267,7,5,'_raw_spin_unlock_irqrestore')
f(7,274,1,2,'kyo/concurrent/scheduler/Queue.poll',1,0,0)
f(8,274,1,2,'kyo/concurrent/scheduler/Queue.modify',1,0,0)
f(9,274,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(10,274,1,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',1,0,0)
f(7,275,2,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,275,2,1,'kyo/concurrent/scheduler/Worker.park')
f(9,275,2,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,275,2,1,'jdk/internal/misc/Unsafe.park')
f(11,275,2,3,'[unknown]')
f(12,275,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,275,2,5,'entry_SYSCALL_64_after_hwframe')
f(14,275,2,5,'do_syscall_64')
f(15,275,2,5,'__x64_sys_futex')
f(16,275,2,5,'do_futex')
f(17,275,2,5,'futex_wait')
f(18,275,1,5,'futex_wait_queue_me')
f(19,275,1,5,'schedule')
f(20,275,1,5,'__schedule')
f(21,275,1,5,'finish_task_switch.isra.0')
f(18,276,1,5,'futex_wait_setup')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 560px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(35);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,12053,3,'all')
f(1,0,12048,1,'java/lang/Thread.run')
f(2,0,12048,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,12048,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,2678,1,'java/util/concurrent/FutureTask.run')
f(5,0,2678,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,2678,1,'java/util/concurrent/FutureTask.run')
f(7,0,2678,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,2678,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,2678,1,'java/lang/reflect/Method.invoke')
f(10,0,2678,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,2678,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,2678,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,2678,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,2677,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,2677,1,'kyo/bench/Bench.forkKyo')
f(16,0,161,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,161,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,161,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,20,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,0,20,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3e760')
f(19,20,141,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3e760')
f(16,161,247,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,161,247,2,'kyo.bench.Bench$$anon$1')
f(16,408,1713,1,'kyo/bench/Bench.runLoop$2')
f(17,408,720,1,'kyo/bench/Bench$$anon$1.apply')
f(18,408,47,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,408,47,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c82ba8.apply')
f(20,408,47,1,'kyo/bench/Bench.$anonfun$2')
f(21,408,47,1,'kyo/concurrent/fibers$Fiber.block')
f(22,408,47,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,455,673,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,455,673,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,455,673,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply')
f(21,455,673,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,455,57,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,512,472,2,'kyo.concurrent.scheduler.IOTask')
f(22,984,144,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,984,144,2,'kyo.concurrent.fibers$Fiber')
f(17,1128,993,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,1128,993,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,1128,993,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,1128,993,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,1128,394,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,1128,394,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,1128,148,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,1276,246,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,1276,246,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,1522,241,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,1763,358,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,1763,358,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,1763,358,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,2121,556,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,2121,278,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,2121,278,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,2121,278,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,2121,278,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84000')
f(17,2399,170,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,2399,170,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,2569,108,1,'kyo/locals$Locals$.save')
f(18,2569,108,2,'kyo.locals$Locals$$anon$3')
f(14,2677,1,1,'org/openjdk/jmh/results/BenchmarkTaskResult.add')
f(15,2677,1,1,'java/util/ArrayList.add')
f(16,2677,1,1,'java/util/ArrayList.add')
f(17,2677,1,1,'java/util/ArrayList.grow')
f(18,2677,1,1,'java/util/ArrayList.grow')
f(19,2677,1,2,'java.lang.Object[]')
f(4,2678,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,2678,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,2678,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,2678,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,2678,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,2678,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,2678,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,2678,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,2688,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,2688,1,2,'java.lang.String')
f(4,2689,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e5f8.run')
f(5,2689,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,2689,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,2689,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,2689,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,2689,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,2689,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,2689,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$56+0x0000000800d4c000')
f(4,2700,9348,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,2700,9348,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,2700,9348,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,2700,9347,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,2700,9347,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,2700,9255,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(10,2700,9255,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(11,2700,9255,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(12,2700,9255,2,'kyo.bench.DeepBindBench$$anon$1')
f(9,11955,92,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,11955,92,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,11955,92,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e760.apply')
f(12,11955,92,1,'kyo/bench/Bench.$anonfun$1')
f(13,11955,92,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,11955,92,1,'kyo/bench/DeepBindBench.kyoBench')
f(15,11955,92,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(16,11955,92,2,'kyo.bench.DeepBindBench$$anon$1')
f(7,12047,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,12047,1,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,12047,1,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,12047,1,1,'scala/runtime/ObjectRef.create')
f(11,12047,1,2,'scala.runtime.ObjectRef')
f(1,12048,5,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,12048,5,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,12048,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,12048,5,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,12048,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,12048,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,12048,1,1,'jdk/proxy1/$Proxy0.iterationResult')
f(8,12048,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient$$Lambda$8.0x0000000800c01c70.invoke')
f(9,12048,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.lambda$new$0')
f(10,12048,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushFrame')
f(11,12048,1,1,'java/io/ObjectOutputStream.writeObject')
f(12,12048,1,1,'java/io/ObjectOutputStream.writeObject0')
f(13,12048,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(14,12048,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(15,12048,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(16,12048,1,1,'java/io/ObjectOutputStream.writeObject0')
f(17,12048,1,1,'java/io/ObjectOutputStream.writeArray')
f(18,12048,1,1,'java/io/ObjectOutputStream.writeObject0')
f(19,12048,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(20,12048,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(21,12048,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(22,12048,1,1,'java/io/ObjectOutputStream.writeObject0')
f(23,12048,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(24,12048,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(25,12048,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(26,12048,1,1,'java/io/ObjectOutputStream.writeObject0')
f(27,12048,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(28,12048,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(29,12048,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(30,12048,1,1,'java/io/ObjectOutputStream.writeObject0')
f(31,12048,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(32,12048,1,1,'java/io/ObjectOutputStream$HandleTable.assign')
f(33,12048,1,1,'java/io/ObjectOutputStream$HandleTable.growEntries')
f(34,12048,1,2,'int[]')
f(7,12049,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,12049,1,2,'org.openjdk.jmh.runner.InfraControl')
f(8,12050,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,12050,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,12050,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,12050,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,12050,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,12050,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,262,3,'all')
f(1,0,8,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,8,3,'thread_native_entry(Thread*)')
f(3,0,8,4,'Thread::call_run()')
f(4,0,7,4,'JavaThread::thread_main_inner()')
f(5,0,7,4,'CompileBroker::compiler_thread_loop()')
f(6,0,7,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,7,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,7,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,4,4,'Compile::Code_Gen()')
f(10,0,2,4,'Matcher::match()')
f(11,0,1,4,'Matcher::find_shared(Node*)')
f(12,0,1,4,'Matcher::is_vshift_con_pattern(Node*, Node*)')
f(11,1,1,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(14,1,1,4,'Matcher::Label_Root(Node const*, State*, Node*, Node*&)')
f(15,1,1,4,'Matcher::Label_Root(Node const*, State*, Node*, Node*&)')
f(16,1,1,4,'Matcher::Label_Root(Node const*, State*, Node*, Node*&)')
f(17,1,1,4,'State::_sub_Op_LoadP(Node const*)')
f(10,2,2,4,'PhaseChaitin::Register_Allocate()')
f(11,2,1,4,'PhaseChaitin::build_ifg_physical(ResourceArea*)')
f(12,2,1,4,'PhaseChaitin::add_input_to_liveout(Block*, Node*, IndexSet*, double, PhaseChaitin::Pressure&, PhaseChaitin::Pressure&)')
f(13,2,1,4,'castP2XNode::rule() const')
f(11,3,1,4,'PhaseChaitin::post_allocate_copy_removal()')
f(12,3,1,4,'PhaseChaitin::elide_copy(Node*, int, Block*, Node_List&, Node_List&, bool)')
f(9,4,2,4,'Compile::Optimize()')
f(10,4,1,4,'PhaseIdealLoop::build_and_optimize(LoopOptsMode)')
f(11,4,1,4,'PhaseIdealLoop::build_loop_late(VectorSet&, Node_List&, Node_Stack&)')
f(12,4,1,4,'PhaseIdealLoop::build_loop_late_post_work(Node*, bool)')
f(13,4,1,4,'PhaseIdealLoop::get_late_ctrl_with_anti_dep(LoadNode*, Node*, Node*)')
f(14,4,1,4,'PhaseIdealLoop::is_dominator(Node*, Node*)')
f(10,5,1,4,'PhaseMacroExpand::expand_macro_nodes()')
f(11,5,1,4,'PhaseIterGVN::optimize()')
f(12,5,1,4,'TypeInt::singleton() const')
f(9,6,1,4,'ParseGenerator::generate(JVMState*)')
f(10,6,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(11,6,1,4,'Parse::do_all_blocks()')
f(12,6,1,4,'Parse::do_one_block()')
f(13,6,1,4,'Parse::do_call()')
f(14,6,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(15,6,1,4,'ParseGenerator::generate(JVMState*)')
f(16,6,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(17,6,1,4,'Parse::do_all_blocks()')
f(18,6,1,4,'Parse::do_one_block()')
f(19,6,1,4,'Parse::do_call()')
f(20,6,1,4,'ParseGenerator::generate(JVMState*)')
f(21,6,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(22,6,1,4,'Parse::do_all_blocks()')
f(23,6,1,4,'Parse::do_one_block()')
f(24,6,1,4,'Parse::do_call()')
f(25,6,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(26,6,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(27,6,1,4,'ParseGenerator::generate(JVMState*)')
f(28,6,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(29,6,1,4,'Parse::do_all_blocks()')
f(30,6,1,4,'Parse::do_one_block()')
f(31,6,1,4,'Parse::do_call()')
f(32,6,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(33,6,1,4,'ParseGenerator::generate(JVMState*)')
f(34,6,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(35,6,1,4,'Parse::do_all_blocks()')
f(36,6,1,4,'Parse::do_one_block()')
f(37,6,1,4,'Parse::do_call()')
f(38,6,1,4,'ParseGenerator::generate(JVMState*)')
f(39,6,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(40,6,1,4,'Parse::do_all_blocks()')
f(41,6,1,4,'Parse::do_one_block()')
f(42,6,1,4,'Parse::do_call()')
f(43,6,1,4,'ParseGenerator::generate(JVMState*)')
f(44,6,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(45,6,1,4,'Parse::do_all_blocks()')
f(46,6,1,4,'Parse::do_one_block()')
f(47,6,1,4,'Parse::do_call()')
f(48,6,1,4,'ParseGenerator::generate(JVMState*)')
f(49,6,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(50,6,1,4,'Parse::do_all_blocks()')
f(51,6,1,4,'Parse::do_one_block()')
f(52,6,1,4,'Parse::do_call()')
f(53,6,1,4,'ParseGenerator::generate(JVMState*)')
f(54,6,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(55,6,1,4,'Parse::do_all_blocks()')
f(56,6,1,4,'Parse::do_one_block()')
f(57,6,1,4,'Parse::return_current(Node*)')
f(58,6,1,4,'Parse::call_register_finalizer()')
f(59,6,1,4,'GraphKit::make_load(Node*, Node*, Type const*, BasicType, int, MemNode::MemOrd, LoadNode::ControlDependency, bool, bool, bool, bool, unsigned char)')
f(60,6,1,4,'PhaseGVN::transform_no_reclaim(Node*)')
f(61,6,1,4,'LoadNode::Ideal(PhaseGVN*, bool)')
f(62,6,1,4,'TypeKlassPtr::make(TypePtr::PTR, ciKlass*, int)')
f(4,7,1,4,'VMThread::run()')
f(5,7,1,4,'VMThread::inner_execute(VM_Operation*)')
f(6,7,1,4,'VMThread::evaluate_operation(VM_Operation*)')
f(7,7,1,4,'VM_Operation::evaluate()')
f(8,7,1,4,'VM_G1CollectForAllocation::doit()')
f(9,7,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint(double)')
f(10,7,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint_helper(double)')
f(11,7,1,4,'G1CollectedHeap::evacuate_initial_collection_set(G1ParScanThreadStateSet*, bool)')
f(12,7,1,4,'WorkGang::run_task(AbstractGangTask*, unsigned int, bool)')
f(13,7,1,3,'sem_post')
f(14,7,1,5,'entry_SYSCALL_64_after_hwframe')
f(15,7,1,5,'do_syscall_64')
f(16,7,1,5,'__x64_sys_futex')
f(17,7,1,5,'do_futex')
f(18,7,1,5,'futex_wake')
f(19,7,1,5,'wake_up_q')
f(20,7,1,5,'_raw_spin_unlock_irqrestore')
f(1,8,254,1,'java/lang/Thread.run')
f(2,8,254,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,8,254,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,8,30,1,'java/util/concurrent/FutureTask.run')
f(5,8,30,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,8,30,1,'java/util/concurrent/FutureTask.run')
f(7,8,30,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,8,30,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,8,30,1,'java/lang/reflect/Method.invoke')
f(10,8,30,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,8,30,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,8,30,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,8,30,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,8,30,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub',0,1,0)
f(15,8,30,1,'kyo/bench/Bench.forkKyo',1,0,0)
f(16,9,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,9,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,9,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,9,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,9,1,3,'Unsafe_AllocateInstance')
f(21,9,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(22,9,1,4,'ObjAllocator::initialize(HeapWordImpl**) const')
f(16,10,28,1,'kyo/bench/Bench.runLoop$2')
f(17,10,16,1,'kyo/bench/Bench$$anon$1.apply')
f(18,10,16,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,10,16,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,10,16,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply',1,0,0)
f(21,10,16,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',1,0,0)
f(22,10,1,2,'kyo/concurrent/scheduler/IOTask.<init>',1,0,0)
f(22,11,15,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,11,15,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,11,14,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,11,14,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,11,14,1,'jdk/internal/misc/Unsafe.unpark')
f(27,11,14,3,'pthread_cond_signal')
f(28,12,13,5,'entry_SYSCALL_64_after_hwframe')
f(29,12,13,5,'do_syscall_64')
f(30,12,12,5,'__x64_sys_futex')
f(31,13,11,5,'do_futex')
f(32,13,11,5,'futex_wake')
f(33,13,1,5,'__raw_callee_save___pv_queued_spin_unlock')
f(33,14,10,5,'wake_up_q')
f(34,14,10,5,'_raw_spin_unlock_irqrestore')
f(30,24,1,5,'syscall_enter_from_user_mode')
f(24,25,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.poll')
f(25,25,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.switchToNextConsumerChunkAndPoll')
f(26,25,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.moveToNextConsumerChunk')
f(17,26,12,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,26,12,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,26,12,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,26,12,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,26,12,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,26,12,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,27,11,1,'java/util/concurrent/locks/LockSupport.park')
f(24,27,11,1,'jdk/internal/misc/Unsafe.park')
f(25,28,10,3,'[unknown]')
f(26,28,9,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,29,8,5,'entry_SYSCALL_64_after_hwframe')
f(28,29,8,5,'do_syscall_64')
f(29,30,6,5,'__x64_sys_futex')
f(30,30,6,5,'do_futex')
f(31,30,6,5,'futex_wait')
f(32,30,6,5,'futex_wait_queue_me')
f(33,30,6,5,'schedule')
f(34,30,6,5,'__schedule')
f(35,30,6,5,'finish_task_switch.isra.0')
f(29,36,1,5,'syscall_enter_from_user_mode')
f(26,37,1,3,'pthread_cond_wait')
f(4,38,224,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,38,224,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,38,224,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,42,46,2,'kyo/concurrent/scheduler/IOTask.run',27,0,0)
f(8,42,4,2,'kyo/concurrent/scheduler/IOTask.curr_$eq',4,0,0)
f(8,46,21,1,'kyo/concurrent/scheduler/IOTask.eval',2,0,0)
f(9,48,19,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,48,19,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',1,0,0)
f(11,48,19,1,'kyo/concurrent/scheduler/IOPromise.complete',1,0,0)
f(12,48,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(13,48,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(14,48,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(12,49,18,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,49,18,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,49,18,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,49,18,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,49,18,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,49,18,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,49,18,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,49,18,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,49,18,1,'jdk/internal/misc/Unsafe.unpark')
f(21,49,18,3,'pthread_cond_signal')
f(22,50,17,5,'entry_SYSCALL_64_after_hwframe')
f(23,50,17,5,'do_syscall_64')
f(24,50,16,5,'__x64_sys_futex')
f(25,50,16,5,'do_futex')
f(26,50,16,5,'futex_wake')
f(27,52,1,5,'mark_wake_futex')
f(27,53,13,5,'wake_up_q')
f(28,53,13,5,'_raw_spin_unlock_irqrestore')
f(24,66,1,5,'syscall_enter_from_user_mode')
f(8,67,21,2,'scala/runtime/BoxesRunTime.equals',21,0,0)
f(9,67,21,2,'scala/runtime/BoxesRunTime.equals2',21,0,0)
f(7,88,160,2,'kyo/concurrent/scheduler/Queue.poll',159,0,0)
f(8,88,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(9,88,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',2,0,0)
f(8,90,158,2,'kyo/concurrent/scheduler/Queue.modify',157,0,0)
f(9,112,136,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47378.apply',135,0,0)
f(10,120,128,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',127,0,0)
f(11,202,46,2,'scala/collection/mutable/PriorityQueue.dequeue',45,0,0)
f(12,220,27,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',27,0,0)
f(12,247,1,1,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_size0_$eq')
f(13,247,1,4,'ClassLoaderData::holder_phantom() const')
f(7,248,14,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,248,14,1,'kyo/concurrent/scheduler/Worker.park')
f(9,248,14,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,248,14,1,'jdk/internal/misc/Unsafe.park')
f(11,248,14,3,'[unknown]')
f(12,248,14,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,249,13,5,'entry_SYSCALL_64_after_hwframe')
f(14,249,13,5,'do_syscall_64')
f(15,249,11,5,'__x64_sys_futex')
f(16,249,11,5,'do_futex')
f(17,249,11,5,'futex_wait')
f(18,249,10,5,'futex_wait_queue_me')
f(19,249,10,5,'schedule')
f(20,250,9,5,'__schedule')
f(21,250,9,5,'finish_task_switch.isra.0')
f(18,259,1,5,'hrtimer_cancel')
f(19,259,1,5,'_raw_spin_unlock_irqrestore')
f(15,260,1,5,'syscall_enter_from_user_mode')
f(15,261,1,5,'syscall_exit_to_user_mode_prepare')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 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,20007,3,'all')
f(1,0,20002,1,'java/lang/Thread.run')
f(2,0,20002,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,20002,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,20002,1,'java/util/concurrent/FutureTask.run')
f(5,0,20002,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,20002,1,'java/util/concurrent/FutureTask.run')
f(7,0,20002,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,20002,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,20002,1,'java/lang/reflect/Method.invoke')
f(10,0,20002,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,20002,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,20002,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,20002,1,'kyo/bench/jmh_generated/DeepBindBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,20002,1,'kyo/bench/jmh_generated/DeepBindBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,20002,1,'kyo/bench/Bench.syncKyo')
f(16,0,19999,1,'kyo/bench/Bench.runLoop$1')
f(17,0,19999,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(18,0,19999,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(19,0,19999,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(20,0,19999,2,'kyo.bench.DeepBindBench$$anon$1')
f(16,19999,3,1,'kyo/bench/DeepBindBench.kyoBench')
f(17,19999,3,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(18,19999,3,2,'kyo.bench.DeepBindBench$$anon$1')
f(1,20002,5,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,20002,5,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,20002,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,20002,5,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,20002,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,20002,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,20002,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,20002,1,2,'org.openjdk.jmh.infra.Control')
f(8,20003,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,20003,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,20003,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,20003,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,20003,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,20003,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,20006,1,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,20006,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,20006,1,1,'java/lang/ClassLoader.loadClass')
f(10,20006,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,20006,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,20006,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,20006,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,20006,1,1,'jdk/internal/loader/URLClassPath.getResource')
f(15,20006,1,1,'jdk/internal/loader/URLClassPath$JarLoader.getResource')
f(16,20006,1,1,'java/util/jar/JarFile.getJarEntry')
f(17,20006,1,1,'java/util/jar/JarFile.getEntry')
f(18,20006,1,1,'java/util/zip/ZipFile.getEntry')
f(19,20006,1,1,'java/util/zip/ZipFile.getZipEntry')
f(20,20006,1,1,'java/util/jar/JavaUtilJarAccessImpl.entryFor')
f(21,20006,1,1,'java/util/jar/JarFile.entryFor')
f(22,20006,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,2,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(15,2,178,2,'kyo/bench/Bench.syncKyo',178,0,0)
f(16,2,178,2,'kyo/bench/Bench.runLoop$1',178,0,0)
f(17,110,70,2,'kyo/bench/DeepBindBench$$anon$1.apply',70,0,0)
f(18,110,70,2,'kyo/bench/DeepBindBench$$anon$1.apply',70,0,0)
f(19,161,19,2,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1',19,0,0)
f(20,178,2,2,'kyo/bench/DeepBindBench$$anon$1.<init>',2,0,0)
f(15,180,118,2,'org/openjdk/jmh/infra/Blackhole.consume',118,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,12387,3,'all')
f(1,0,12383,1,'java/lang/Thread.run')
f(2,0,12383,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,12383,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,851,1,'java/util/concurrent/FutureTask.run')
f(5,0,851,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,851,1,'java/util/concurrent/FutureTask.run')
f(7,0,851,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,851,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,851,1,'java/lang/reflect/Method.invoke')
f(10,0,851,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,851,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,851,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,851,1,'kyo/bench/jmh_generated/DeepBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,850,1,'kyo/bench/jmh_generated/DeepBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,850,1,'kyo/bench/Bench.forkKyo')
f(16,0,48,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,48,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,48,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,48,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3e730')
f(16,48,63,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,48,63,2,'kyo.bench.Bench$$anon$1')
f(16,111,546,1,'kyo/bench/Bench.runLoop$2')
f(17,111,263,1,'kyo/bench/Bench$$anon$1.apply')
f(18,111,40,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,111,40,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c82ba8.apply')
f(20,111,40,1,'kyo/bench/Bench.$anonfun$2')
f(21,111,40,1,'kyo/concurrent/fibers$Fiber.block')
f(22,111,40,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,151,223,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,151,223,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,151,223,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply')
f(21,151,223,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,151,223,2,'kyo.concurrent.scheduler.IOTask')
f(17,374,283,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,374,283,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,374,283,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,374,283,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,374,50,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,374,50,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,374,50,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,374,50,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,424,23,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,447,210,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,447,210,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,447,210,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,657,193,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,657,192,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,657,192,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,657,192,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,657,192,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84000')
f(17,849,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,849,1,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(14,850,1,1,'org/openjdk/jmh/results/BenchmarkTaskResult.<init>')
f(15,850,1,2,'java.util.ArrayList')
f(4,851,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,851,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,851,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,851,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,851,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,851,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,851,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,851,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,861,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,861,1,2,'java.lang.String')
f(4,862,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e5f8.run')
f(5,862,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,862,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,862,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,862,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,862,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,862,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,862,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$67+0x0000000800d4e3d0')
f(4,873,11510,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,873,11510,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,873,11510,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,873,11437,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,873,11437,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,873,10671,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(10,873,10671,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(11,873,227,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(12,873,227,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(13,873,227,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(14,873,227,2,'kyo.bench.DeepBindMapBench$$anon$1$$Lambda$66+0x0000000800d4e000')
f(11,1100,347,2,'kyo.bench.DeepBindMapBench$$anon$1$$anon$2')
f(11,1447,722,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(12,1447,722,2,'kyo.bench.DeepBindMapBench$$anon$3')
f(11,2169,1179,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$transformLoop$2')
f(12,2169,1179,2,'kyo.bench.DeepBindMapBench$$anon$4')
f(11,3348,915,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$transformLoop$3')
f(12,3348,915,2,'kyo.bench.DeepBindMapBench$$anon$5')
f(11,4263,1062,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$transformLoop$4')
f(12,4263,1062,2,'kyo.bench.DeepBindMapBench$$anon$6')
f(11,5325,736,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$transformLoop$5')
f(12,5325,736,2,'kyo.bench.DeepBindMapBench$$anon$7')
f(11,6061,585,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$transformLoop$6')
f(12,6061,585,2,'kyo.bench.DeepBindMapBench$$anon$8')
f(11,6646,1044,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$transformLoop$7')
f(12,6646,1044,2,'kyo.bench.DeepBindMapBench$$anon$9')
f(11,7690,1082,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$transformLoop$8')
f(12,7690,1082,2,'kyo.bench.DeepBindMapBench$$anon$10')
f(11,8772,1099,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$transformLoop$9')
f(12,8772,1099,2,'kyo.bench.DeepBindMapBench$$anon$11')
f(11,9871,815,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$transformLoop$10')
f(12,9871,815,2,'kyo.bench.DeepBindMapBench$$anon$12')
f(11,10686,858,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(12,10686,858,2,'kyo.bench.DeepBindMapBench$$anon$13')
f(9,11544,717,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(10,11544,717,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(11,11544,717,1,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$66.0x0000000800d4e000.apply')
f(12,11544,717,1,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$$anonfun$adapted$11')
f(13,11544,717,1,'kyo/bench/DeepBindMapBench.$anonfun$11')
f(14,11544,717,1,'kyo/bench/DeepBindMapBench.loop$1')
f(15,11544,717,2,'kyo.bench.DeepBindMapBench$$anon$1')
f(9,12261,49,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,12261,49,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,12261,49,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e730.apply')
f(12,12261,49,1,'kyo/bench/Bench.$anonfun$1')
f(13,12261,49,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,12261,49,1,'kyo/bench/DeepBindMapBench.kyoBench')
f(15,12261,49,1,'kyo/bench/DeepBindMapBench.loop$1')
f(16,12261,49,2,'kyo.bench.DeepBindMapBench$$anon$1')
f(7,12310,73,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,12310,73,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,12310,73,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,12310,73,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,12310,73,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(12,12310,73,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d47148')
f(1,12383,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,12383,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,12383,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,12383,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,12383,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,12383,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,12383,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,12383,1,2,'org.openjdk.jmh.runner.InfraControl')
f(8,12384,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,12384,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,12384,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,12384,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,12384,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,12384,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,297,3,'all')
f(1,0,3,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,3,3,'thread_native_entry(Thread*)')
f(3,0,3,4,'Thread::call_run()')
f(4,0,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,3,4,'Compile::Code_Gen()')
f(10,0,2,4,'PhaseChaitin::Register_Allocate()')
f(11,0,1,4,'CProjNode::is_block_proj() const')
f(11,1,1,4,'PhaseChaitin::Select()')
f(10,2,1,4,'PhaseOutput::Output()')
f(11,2,1,4,'PhaseOutput::init_buffer()')
f(12,2,1,4,'CodeBuffer::initialize(int, int)')
f(13,2,1,4,'BufferBlob::create(char const*, int)')
f(14,2,1,4,'CodeCache::allocate(int, int, bool, int)')
f(15,2,1,4,'NMethodSweeper::report_allocation(int)')
f(16,2,1,4,'VirtualSpace::reserved_size() const')
f(1,3,2,3,'[unknown_Java]')
f(2,3,1,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(2,4,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(1,5,292,1,'java/lang/Thread.run')
f(2,5,292,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,5,292,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,5,2,1,'java/util/concurrent/FutureTask.run')
f(5,5,2,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,5,2,1,'java/util/concurrent/FutureTask.run')
f(7,5,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,5,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,5,2,1,'java/lang/reflect/Method.invoke')
f(10,5,2,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,5,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,5,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,5,2,1,'kyo/bench/jmh_generated/DeepBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,5,2,1,'kyo/bench/jmh_generated/DeepBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,5,2,1,'kyo/bench/Bench.forkKyo')
f(16,5,2,1,'kyo/bench/Bench.runLoop$2')
f(17,5,1,1,'kyo/bench/Bench$$anon$1.apply')
f(18,5,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,5,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,5,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply')
f(21,5,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,5,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,5,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,5,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,5,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,5,1,1,'jdk/internal/misc/Unsafe.unpark')
f(27,5,1,3,'pthread_cond_signal')
f(28,5,1,5,'entry_SYSCALL_64_after_hwframe')
f(29,5,1,5,'do_syscall_64')
f(30,5,1,5,'__x64_sys_futex')
f(31,5,1,5,'do_futex')
f(32,5,1,5,'futex_wake')
f(33,5,1,5,'wake_up_q')
f(34,5,1,5,'_raw_spin_unlock_irqrestore')
f(17,6,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,6,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,6,1,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,6,1,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,6,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,6,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,6,1,1,'java/util/concurrent/locks/LockSupport.park')
f(24,6,1,1,'jdk/internal/misc/Unsafe.park')
f(25,6,1,3,'[unknown]')
f(26,6,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,6,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,6,1,5,'do_syscall_64')
f(29,6,1,5,'__x64_sys_futex')
f(30,6,1,5,'do_futex')
f(31,6,1,5,'futex_wait')
f(32,6,1,5,'futex_wait_queue_me')
f(33,6,1,5,'schedule')
f(34,6,1,5,'__schedule')
f(35,6,1,5,'finish_task_switch.isra.0')
f(4,7,290,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,7,290,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,7,290,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',29,0,0)
f(9,30,158,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(10,35,153,2,'kyo/bench/DeepBindMapBench$$anon$1.apply',152,0,0)
f(11,43,5,2,'kyo/bench/DeepBindMapBench$$anon$1$$anon$2.<init>',5,0,0)
f(12,43,5,2,'kyo/ios$KyoIO.<init>',5,0,0)
f(11,48,68,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1',68,0,0)
f(12,48,68,2,'kyo/bench/DeepBindMapBench$$anon$3.<init>',68,0,0)
f(13,75,41,2,'kyo/core$internal$KyoCont.<init>',41,0,0)
f(14,80,29,2,'kyo/core$internal$Kyo.<init>',29,0,0)
f(15,100,9,2,'java/lang/Object.<init>',9,0,0)
f(14,109,7,2,'kyo/ios$KyoIO.effect',7,0,0)
f(15,113,3,2,'kyo/ios$KyoIO.effect',3,0,0)
f(11,116,72,2,'scala/runtime/BoxesRunTime.boxToInteger',71,0,0)
f(12,187,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(13,187,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(14,187,1,4,'MemAllocator::allocate() const')
f(15,187,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(16,187,1,4,'ThreadLocalAllocBuffer::retire_before_allocation()')
f(17,187,1,4,'CollectedHeap::fill_with_dummy_object(HeapWordImpl**, HeapWordImpl**, bool)')
f(18,187,1,4,'HandleMark::~HandleMark()')
f(9,188,95,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(10,194,2,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11',2,0,0)
f(11,195,1,2,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$66.0x0000000800d4e000.apply',1,0,0)
f(12,195,1,2,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$$anonfun$adapted$11',1,0,0)
f(13,195,1,2,'kyo/bench/DeepBindMapBench.$anonfun$11',1,0,0)
f(14,195,1,2,'kyo/bench/DeepBindMapBench.loop$1',1,0,0)
f(10,196,87,1,'kyo/bench/DeepBindMapBench$$anon$12.apply')
f(11,196,70,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$transformLoop$10',70,0,0)
f(12,196,70,2,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$65.0x0000000800d4bc38.apply',70,0,0)
f(13,196,70,2,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$$anonfun$adapted$10',70,0,0)
f(14,196,70,2,'kyo/bench/DeepBindMapBench.$anonfun$10',70,0,0)
f(15,196,70,2,'scala/runtime/BoxesRunTime.boxToInteger',70,0,0)
f(11,266,17,2,'kyo/bench/DeepBindMapBench$$anon$11.apply',17,0,0)
f(12,266,17,2,'kyo/bench/DeepBindMapBench$$anon$10.apply',17,0,0)
f(13,266,17,2,'kyo/bench/DeepBindMapBench$$anon$9.apply',17,0,0)
f(14,267,16,2,'kyo/bench/DeepBindMapBench$$anon$8.apply',16,0,0)
f(15,278,5,2,'kyo/bench/DeepBindMapBench$$anon$7.apply',5,0,0)
f(16,278,5,2,'kyo/bench/DeepBindMapBench$$anon$6.apply',5,0,0)
f(17,278,5,2,'kyo/bench/DeepBindMapBench$$anon$5.apply',5,0,0)
f(18,278,5,2,'kyo/bench/DeepBindMapBench$$anon$4.apply',5,0,0)
f(19,278,5,2,'kyo/bench/DeepBindMapBench$$anon$3.apply',5,0,0)
f(20,282,1,2,'kyo/bench/DeepBindMapBench$$anon$1$$anon$2.apply',1,0,0)
f(9,283,3,2,'kyo/concurrent/scheduler/IOTask.st',3,0,0)
f(9,286,4,6,'kyo/core$internal$KyoCont.effect',0,4,0)
f(9,290,1,1,'kyo/ios$KyoIO.effect')
f(9,291,3,3,'vtable stub')
f(7,294,3,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,294,3,1,'kyo/concurrent/scheduler/Worker.park')
f(9,294,3,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,294,3,1,'jdk/internal/misc/Unsafe.park')
f(11,294,1,3,'Unsafe_Park')
f(12,294,1,3,'clock_gettime')
f(13,294,1,3,'[vdso]')
f(11,295,2,3,'[unknown]')
f(12,295,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,295,2,5,'entry_SYSCALL_64_after_hwframe')
f(14,295,2,5,'do_syscall_64')
f(15,295,2,5,'__x64_sys_futex')
f(16,295,2,5,'do_futex')
f(17,295,2,5,'futex_wait')
f(18,296,1,5,'futex_wait_queue_me')
f(19,296,1,5,'hrtimer_sleeper_start_expires')
f(20,296,1,5,'hrtimer_start_range_ns')
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,14122,3,'all')
f(1,0,14118,1,'java/lang/Thread.run')
f(2,0,14118,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,14118,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,14118,1,'java/util/concurrent/FutureTask.run')
f(5,0,14118,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,14118,1,'java/util/concurrent/FutureTask.run')
f(7,0,14118,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,14118,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,14118,1,'java/lang/reflect/Method.invoke')
f(10,0,14118,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,14118,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,14118,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,14118,1,'kyo/bench/jmh_generated/DeepBindMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,14118,1,'kyo/bench/jmh_generated/DeepBindMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,14118,1,'kyo/bench/Bench.syncKyo')
f(16,0,14118,1,'kyo/bench/Bench.runLoop$1')
f(17,0,13514,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(18,0,13514,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(19,0,523,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,0,523,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,0,523,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,0,523,2,'kyo.bench.DeepBindMapBench$$anon$1$$Lambda$49+0x0000000800d07778')
f(19,523,591,2,'kyo.bench.DeepBindMapBench$$anon$1$$anon$2')
f(19,1114,893,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(20,1114,893,2,'kyo.bench.DeepBindMapBench$$anon$3')
f(19,2007,1445,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$transformLoop$2')
f(20,2007,1445,2,'kyo.bench.DeepBindMapBench$$anon$4')
f(19,3452,1189,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$transformLoop$3')
f(20,3452,1189,2,'kyo.bench.DeepBindMapBench$$anon$5')
f(19,4641,862,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$transformLoop$4')
f(20,4641,862,2,'kyo.bench.DeepBindMapBench$$anon$6')
f(19,5503,1190,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$transformLoop$5')
f(20,5503,1190,2,'kyo.bench.DeepBindMapBench$$anon$7')
f(19,6693,905,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$transformLoop$6')
f(20,6693,905,2,'kyo.bench.DeepBindMapBench$$anon$8')
f(19,7598,1199,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$transformLoop$7')
f(20,7598,1199,2,'kyo.bench.DeepBindMapBench$$anon$9')
f(19,8797,1394,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$transformLoop$8')
f(20,8797,1394,2,'kyo.bench.DeepBindMapBench$$anon$10')
f(19,10191,904,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$transformLoop$9')
f(20,10191,904,2,'kyo.bench.DeepBindMapBench$$anon$11')
f(19,11095,1227,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$transformLoop$10')
f(20,11095,1227,2,'kyo.bench.DeepBindMapBench$$anon$12')
f(19,12322,1191,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(20,12322,1191,2,'kyo.bench.DeepBindMapBench$$anon$13')
f(19,13513,1,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(20,13513,1,1,'java/lang/Integer.valueOf')
f(21,13513,1,2,'java.lang.Integer')
f(17,13514,604,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(18,13514,604,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(19,13514,604,1,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$49.0x0000000800d07778.apply')
f(20,13514,604,1,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$$anonfun$adapted$11')
f(21,13514,604,1,'kyo/bench/DeepBindMapBench.$anonfun$11')
f(22,13514,604,1,'kyo/bench/DeepBindMapBench.loop$1')
f(23,13514,604,2,'kyo.bench.DeepBindMapBench$$anon$1')
f(1,14118,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,14118,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,14118,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,14118,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,14118,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,14118,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,14118,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,14118,1,2,'org.openjdk.jmh.runner.InfraControl')
f(8,14119,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,14119,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,14119,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,14119,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,14119,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,14119,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: 480px}
</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(30);
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,'[unknown_Java]')
f(2,0,1,1,'kyo/bench/DeepBindMapBench$$anon$12.apply')
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/DeepBindMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,1,297,1,'kyo/bench/jmh_generated/DeepBindMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub',0,0,1)
f(15,1,1,1,'I2C/C2I adapters')
f(15,2,296,1,'kyo/bench/Bench.syncKyo')
f(16,2,296,1,'kyo/bench/Bench.runLoop$1')
f(17,2,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(18,2,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(19,2,1,4,'MemAllocator::allocate() const')
f(20,2,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(21,2,1,4,'CollectedHeap::tlab_alloc_reserve() const')
f(17,3,52,2,'kyo/bench/DeepBindMapBench$$anon$1.apply',51,0,0)
f(18,3,52,2,'kyo/bench/DeepBindMapBench$$anon$1.apply',51,0,0)
f(19,3,52,2,'scala/runtime/BoxesRunTime.boxToInteger',51,0,0)
f(20,54,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(21,54,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(22,54,1,4,'MemAllocator::allocate() const')
f(23,54,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(24,54,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(25,54,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(26,54,1,4,'G1AllocRegion::new_alloc_region_and_allocate(unsigned long, bool)')
f(27,54,1,4,'G1CollectedHeap::new_mutator_alloc_region(unsigned long, bool, unsigned int)')
f(28,54,1,4,'G1CollectedHeap::new_region(unsigned long, HeapRegionType, bool, unsigned int)')
f(29,54,1,4,'HeapRegionManager::allocate_free_region(HeapRegionType, unsigned int)')
f(17,55,243,2,'kyo/bench/DeepBindMapBench$$anon$13.apply',141,0,0)
f(18,71,125,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11',125,0,0)
f(19,93,15,2,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$49.0x0000000800d07778.apply',15,0,0)
f(20,93,15,2,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$$anonfun$adapted$11',15,0,0)
f(21,104,1,2,'kyo/bench/DeepBindMapBench.$anonfun$11',1,0,0)
f(21,105,3,2,'scala/runtime/BoxesRunTime.unboxToInt',3,0,0)
f(22,106,2,2,'java/lang/Integer.intValue',2,0,0)
f(19,108,2,2,'kyo/bench/DeepBindMapBench$$anon$13.<init>',2,0,0)
f(19,110,28,2,'scala/runtime/BoxesRunTime.boxToInteger',28,0,0)
f(19,138,58,2,'scala/runtime/BoxesRunTime.unboxToInt',58,0,0)
f(20,193,3,2,'java/lang/Integer.intValue',3,0,0)
f(18,196,102,1,'kyo/bench/DeepBindMapBench$$anon$12.apply')
f(19,198,84,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$transformLoop$10',84,0,0)
f(20,198,84,2,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$48.0x0000000800d073b0.apply',84,0,0)
f(21,198,84,2,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$$anonfun$adapted$10',84,0,0)
f(22,198,84,2,'kyo/bench/DeepBindMapBench.$anonfun$10',84,0,0)
f(23,198,84,2,'scala/runtime/BoxesRunTime.boxToInteger',84,0,0)
f(19,282,16,2,'kyo/bench/DeepBindMapBench$$anon$11.apply',16,0,0)
f(20,282,16,2,'kyo/bench/DeepBindMapBench$$anon$10.apply',16,0,0)
f(21,282,16,2,'kyo/bench/DeepBindMapBench$$anon$9.apply',16,0,0)
f(22,292,6,2,'kyo/bench/DeepBindMapBench$$anon$8.apply',6,0,0)
f(23,296,2,2,'kyo/bench/DeepBindMapBench$$anon$7.apply',2,0,0)
f(24,296,2,2,'kyo/bench/DeepBindMapBench$$anon$6.apply',2,0,0)
f(25,296,2,2,'kyo/bench/DeepBindMapBench$$anon$5.apply',2,0,0)
f(26,297,1,2,'kyo/bench/DeepBindMapBench$$anon$4.apply',1,0,0)
f(27,297,1,2,'kyo/bench/DeepBindMapBench$$anon$3.apply',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: 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,12859,3,'all')
f(1,0,12856,1,'java/lang/Thread.run')
f(2,0,12856,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,12856,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,971,1,'java/util/concurrent/FutureTask.run')
f(5,0,971,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,971,1,'java/util/concurrent/FutureTask.run')
f(7,0,971,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,971,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,971,1,'java/lang/reflect/Method.invoke')
f(10,0,971,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,971,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,971,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,971,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,969,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,969,1,'kyo/bench/Bench.forkKyo')
f(16,0,74,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,74,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,74,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,74,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c81148')
f(16,74,156,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,74,156,2,'kyo.bench.Bench$$anon$1')
f(16,230,554,1,'kyo/bench/Bench.runLoop$2')
f(17,230,254,1,'kyo/bench/Bench$$anon$1.apply')
f(18,230,101,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,230,101,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c88000.apply')
f(20,230,101,1,'kyo/bench/Bench.$anonfun$2')
f(21,230,101,1,'kyo/concurrent/fibers$Fiber.block')
f(22,230,101,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,331,153,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,331,153,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,331,153,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(21,331,153,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,331,153,2,'kyo.concurrent.scheduler.IOTask')
f(17,484,300,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,484,300,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,484,300,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,484,300,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,484,131,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,484,131,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,484,23,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,507,108,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,507,108,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,615,45,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,660,124,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,660,124,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,660,124,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,784,185,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,784,182,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,784,182,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,784,182,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,784,182,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c828a0')
f(17,966,3,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,966,3,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(14,969,1,1,'org/openjdk/jmh/results/BenchmarkTaskResult.add')
f(15,969,1,1,'java/util/ArrayList.add')
f(16,969,1,1,'java/util/ArrayList.add')
f(17,969,1,1,'java/util/ArrayList.grow')
f(18,969,1,1,'java/util/ArrayList.grow')
f(19,969,1,2,'java.lang.Object[]')
f(14,970,1,1,'org/openjdk/jmh/results/ThroughputResult.<init>')
f(15,970,1,1,'java/lang/StringBuilder.<init>')
f(16,970,1,1,'java/lang/AbstractStringBuilder.<init>')
f(17,970,1,2,'byte[]')
f(4,971,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ea20.run')
f(5,971,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,971,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,971,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,971,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,971,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,971,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,971,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,981,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,981,1,2,'java.lang.String')
f(4,982,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec48.run')
f(5,982,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,982,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,982,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,982,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,982,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,982,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$65+0x0000000800d553c0')
f(4,993,11863,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d230f8.run')
f(5,993,11863,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,993,11863,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,993,11863,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,993,11863,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,993,6473,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,993,6473,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(11,993,6473,1,'kyo/bench/EnqueueDequeueBench$$Lambda$62.0x0000000800d54a70.apply')
f(12,993,6473,1,'kyo/bench/EnqueueDequeueBench.$anonfun$2')
f(13,993,6473,1,'kyo/bench/EnqueueDequeueBench.loop$2')
f(14,993,1220,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(15,993,1220,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(16,993,1220,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,993,1220,2,'kyo.bench.EnqueueDequeueBench$$Lambda$60+0x0000000800d54000')
f(14,2213,1787,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(15,2213,1787,2,'kyo.bench.EnqueueDequeueBench$$anon$2')
f(14,4000,3466,1,'kyo/concurrent/channels$Channels$$anon$14.put')
f(15,4000,3466,1,'kyo/concurrent/channels$Channels$Blocking.put$')
f(16,4000,3466,1,'kyo/concurrent/channels$Channels$Blocking.put')
f(17,4000,848,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,4000,848,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,4000,848,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,4000,848,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$59+0x0000000800d4f8c0')
f(17,4848,976,1,'kyo/concurrent/channels$Channels$$anon$14.putFiber')
f(18,4848,976,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$_$transformLoop$10')
f(19,4848,976,1,'kyo/concurrent/channels$Channels$$anon$14$$Lambda$58.0x0000000800d4f4f0.apply')
f(20,4848,976,1,'kyo/concurrent/channels$Channels$$anon$14.$anonfun$11')
f(21,4848,976,2,'kyo.concurrent.channels$$anon$19')
f(17,5824,1642,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1')
f(18,5824,1642,2,'kyo.concurrent.channels$Channels$Blocking$$anon$1')
f(9,7466,5214,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,7466,5214,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(11,7466,5214,1,'kyo/bench/EnqueueDequeueBench$$Lambda$60.0x0000000800d54000.apply')
f(12,7466,5214,1,'kyo/bench/EnqueueDequeueBench.$anonfun$1')
f(13,7466,1297,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(14,7466,1297,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(15,7466,1297,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,7466,1297,2,'kyo.bench.EnqueueDequeueBench$$Lambda$62+0x0000000800d54a70')
f(13,8763,1802,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(14,8763,1802,2,'kyo.bench.EnqueueDequeueBench$$anon$1')
f(13,10565,2115,1,'kyo/concurrent/channels$Channels$$anon$14.take')
f(14,10565,2115,1,'kyo/concurrent/channels$Channels$Blocking.take$')
f(15,10565,2115,1,'kyo/concurrent/channels$Channels$Blocking.take')
f(16,10565,634,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,10565,634,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,10565,634,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,10565,634,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$61+0x0000000800d546a0')
f(16,11199,1481,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2')
f(17,11199,1481,2,'kyo.concurrent.channels$Channels$Blocking$$anon$2')
f(9,12680,50,1,'kyo/bench/EnqueueDequeueBench$$anon$3.apply')
f(10,12680,1,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$3')
f(11,12680,1,1,'kyo/bench/EnqueueDequeueBench$$Lambda$57.0x0000000800d4c7f8.apply')
f(12,12680,1,1,'kyo/bench/EnqueueDequeueBench.$anonfun$3')
f(13,12680,1,1,'kyo/bench/EnqueueDequeueBench.loop$2')
f(14,12680,1,1,'kyo/concurrent/channels$Channels$$anon$14.put')
f(15,12680,1,1,'kyo/concurrent/channels$Channels$Blocking.put$')
f(16,12680,1,1,'kyo/concurrent/channels$Channels$Blocking.put')
f(17,12680,1,1,'kyo/concurrent/channels$Channels$$anon$14.putFiber')
f(18,12680,1,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$_$transformLoop$10')
f(19,12680,1,1,'kyo/concurrent/channels$Channels$$anon$14$$Lambda$58.0x0000000800d4f4f0.apply')
f(20,12680,1,1,'kyo/concurrent/channels$Channels$$anon$14.$anonfun$11')
f(21,12680,1,2,'kyo.concurrent.channels$$anon$19')
f(10,12681,49,1,'kyo/concurrent/channels$Channels$$anon$21.apply')
f(11,12681,49,1,'kyo/concurrent/channels$Channels$.kyo$concurrent$channels$Channels$$$_$transformLoop$11')
f(12,12681,49,1,'kyo/concurrent/channels$Channels$$$Lambda$56.0x0000000800d4c028.apply')
f(13,12681,49,1,'kyo/concurrent/channels$Channels$.$anonfun$9')
f(14,12681,49,1,'kyo/concurrent/channels$Channels$$anon$14.<init>')
f(15,12681,49,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(16,12681,49,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(17,12681,49,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.<init>')
f(18,12681,2,2,'org.jctools.queues.SpscArrayQueue')
f(18,12683,46,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(19,12683,46,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(20,12683,3,2,'org.jctools.queues.MpmcUnboundedXaddChunk')
f(20,12686,43,1,'org/jctools/queues/MpmcUnboundedXaddChunk.<init>')
f(21,12686,1,1,'org/jctools/queues/MpUnboundedXaddChunk.<init>')
f(22,12686,1,1,'org/jctools/util/UnsafeRefArrayAccess.allocateRefArray')
f(23,12686,1,2,'java.lang.Object[]')
f(21,12687,42,1,'org/jctools/util/UnsafeLongArrayAccess.allocateLongArray')
f(22,12687,42,2,'long[]')
f(18,12729,1,1,'org/jctools/queues/SpscArrayQueue.<init>')
f(19,12729,1,1,'org/jctools/queues/SpscArrayQueueL3Pad.<init>')
f(20,12729,1,1,'org/jctools/queues/SpscArrayQueueConsumerIndexField.<init>')
f(21,12729,1,1,'org/jctools/queues/SpscArrayQueueL2Pad.<init>')
f(22,12729,1,1,'org/jctools/queues/SpscArrayQueueProducerIndexFields.<init>')
f(23,12729,1,1,'org/jctools/queues/SpscArrayQueueL1Pad.<init>')
f(24,12729,1,1,'org/jctools/queues/SpscArrayQueueColdField.<init>')
f(25,12729,1,1,'org/jctools/queues/ConcurrentCircularArrayQueue.<init>')
f(26,12729,1,1,'org/jctools/util/UnsafeRefArrayAccess.allocateRefArray')
f(27,12729,1,2,'java.lang.Object[]')
f(9,12730,126,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,12730,126,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,12730,126,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c81148.apply')
f(12,12730,126,1,'kyo/bench/Bench.$anonfun$1')
f(13,12730,126,1,'kyo/bench/EnqueueDequeueBench.kyoBenchFiber')
f(14,12730,126,1,'kyo/concurrent/channels$Channels$.blocking')
f(15,12730,1,1,'kyo/concurrent/channels$Channels$.kyo$concurrent$channels$Channels$$$_$transformLoop$11')
f(16,12730,1,2,'kyo.concurrent.channels$Channels$$anon$21')
f(15,12731,125,1,'kyo/concurrent/queues$Queues$.bounded')
f(16,12731,125,2,'kyo.concurrent.queues$Queues$$anon$11')
f(1,12856,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,12856,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,12856,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,12856,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,12856,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,12856,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,12856,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,12856,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,12856,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,12856,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,12856,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,12856,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,12856,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: 992px}
</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(62);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,296,3,'all')
f(1,0,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,1,4,'Compile::Code_Gen()')
f(10,0,1,4,'Matcher::match()')
f(11,0,1,4,'ConNode::Opcode() const')
f(9,1,1,4,'Compile::Optimize()')
f(10,1,1,4,'Compile::remove_speculative_types(PhaseIterGVN&) [clone .part.0]')
f(9,2,1,4,'ParseGenerator::generate(JVMState*)')
f(10,2,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(11,2,1,4,'Parse::do_all_blocks()')
f(12,2,1,4,'Parse::do_one_block()')
f(13,2,1,4,'Parse::do_call()')
f(14,2,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(15,2,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(16,2,1,4,'ParseGenerator::generate(JVMState*)')
f(17,2,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(18,2,1,4,'Parse::do_all_blocks()')
f(19,2,1,4,'Parse::do_one_block()')
f(20,2,1,4,'Parse::do_call()')
f(21,2,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(22,2,1,4,'ParseGenerator::generate(JVMState*)')
f(23,2,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(24,2,1,4,'Parse::do_all_blocks()')
f(25,2,1,4,'Parse::do_one_block()')
f(26,2,1,4,'Parse::do_call()')
f(27,2,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(28,2,1,4,'ParseGenerator::generate(JVMState*)')
f(29,2,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(30,2,1,4,'Parse::do_all_blocks()')
f(31,2,1,4,'Parse::do_one_block()')
f(32,2,1,4,'Parse::do_call()')
f(33,2,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(34,2,1,4,'ParseGenerator::generate(JVMState*)')
f(35,2,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(36,2,1,4,'Parse::do_all_blocks()')
f(37,2,1,4,'Parse::do_one_block()')
f(38,2,1,4,'Parse::do_call()')
f(39,2,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(40,2,1,4,'ParseGenerator::generate(JVMState*)')
f(41,2,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(42,2,1,4,'Parse::do_all_blocks()')
f(43,2,1,4,'Parse::do_one_block()')
f(44,2,1,4,'Parse::do_call()')
f(45,2,1,4,'ParseGenerator::generate(JVMState*)')
f(46,2,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(47,2,1,4,'Parse::do_all_blocks()')
f(48,2,1,4,'Parse::do_one_block()')
f(49,2,1,4,'Parse::do_call()')
f(50,2,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(51,2,1,4,'ParseGenerator::generate(JVMState*)')
f(52,2,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(53,2,1,4,'Parse::do_all_blocks()')
f(54,2,1,4,'Parse::do_one_block()')
f(55,2,1,4,'Parse::do_field_access(bool, bool)')
f(56,2,1,4,'Parse::do_put_xxx(Node*, ciField*, bool)')
f(57,2,1,4,'GraphKit::access_store_at(Node*, Node*, TypePtr const*, Node*, Type const*, BasicType, unsigned long)')
f(58,2,1,4,'BarrierSetC2::store_at(C2Access&, C2AccessValue&) const')
f(59,2,1,4,'ModRefBarrierSetC2::store_at_resolved(C2Access&, C2AccessValue&) const')
f(60,2,1,4,'G1BarrierSetC2::post_barrier(GraphKit*, Node*, Node*, Node*, Node*, unsigned int, Node*, BasicType, bool) const')
f(61,2,1,4,'IdealKit::make_leaf_call(TypeFunc const*, unsigned char*, char const*, Node*, Node*, Node*, Node*)')
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::evacuate_initial_collection_set(G1ParScanThreadStateSet*, bool)')
f(12,3,1,4,'nmethod::oops_do_marking_epilogue()')
f(1,4,1,3,'[unknown_Java]')
f(2,4,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(1,5,291,1,'java/lang/Thread.run')
f(2,5,291,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,5,291,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,1,1,'kyo/bench/Bench$$anon$1.apply')
f(18,5,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,5,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,5,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(21,5,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,5,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,5,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,5,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,5,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,5,1,1,'jdk/internal/misc/Unsafe.unpark')
f(27,5,1,3,'pthread_cond_signal')
f(28,5,1,5,'entry_SYSCALL_64_after_hwframe')
f(29,5,1,5,'do_syscall_64')
f(30,5,1,5,'__x64_sys_futex')
f(31,5,1,5,'do_futex')
f(32,5,1,5,'futex_wake')
f(33,5,1,5,'wake_up_q')
f(34,5,1,5,'_raw_spin_unlock_irqrestore')
f(17,6,2,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,6,2,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,6,2,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,6,2,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,6,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,6,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,6,2,1,'java/util/concurrent/locks/LockSupport.park')
f(24,6,2,1,'jdk/internal/misc/Unsafe.park')
f(25,7,1,4,'java_lang_Thread::set_thread_status(oopDesc*, JavaThreadStatus)')
f(4,8,288,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d230f8.run')
f(5,8,288,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,8,288,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,8,287,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,8,287,1,'kyo/concurrent/scheduler/IOTask.eval',33,0,0)
f(9,29,118,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,32,115,2,'kyo/concurrent/channels$Channels$Blocking$$anon$2.apply',104,0,0)
f(11,36,110,2,'kyo/concurrent/channels$$anon$16.apply',99,0,0)
f(12,56,90,2,'kyo/concurrent/channels$$anon$16.apply',79,0,0)
f(13,82,11,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(14,90,1,2,'kyo/concurrent/channels$Channels$$anon$14.q',1,0,0)
f(14,91,2,2,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.isEmpty',2,0,0)
f(15,91,2,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.isEmpty',2,0,0)
f(16,91,2,2,'org/jctools/queues/IndexedQueueSizeUtil.isEmpty',2,0,0)
f(13,93,8,2,'kyo/concurrent/fibers$Fibers.value',8,0,0)
f(14,93,8,2,'kyo/concurrent/fibers$Fiber$.done',8,0,0)
f(15,93,8,2,'kyo/concurrent/fibers$Fiber.<init>',8,0,0)
f(13,101,42,2,'kyo/concurrent/queues$$anon$12.poll',42,0,0)
f(14,109,28,2,'java/util/concurrent/atomic/AtomicReference.getAndSet',28,0,0)
f(15,109,28,2,'java/lang/invoke/VarHandleGuards.guard_LL_L',28,0,0)
f(16,121,1,2,'java/lang/invoke/VarForm.getMemberName',1,0,0)
f(16,122,2,2,'java/lang/invoke/VarHandle.checkExactAccessMode',2,0,0)
f(16,124,1,2,'java/lang/invoke/VarHandle.isDirect',1,0,0)
f(16,125,12,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.getAndSet',12,0,0)
f(14,137,6,2,'scala/Option$.apply',6,0,0)
f(15,137,6,2,'scala/Some.<init>',6,0,0)
f(16,137,6,2,'scala/Option.<init>',6,0,0)
f(17,137,6,2,'java/lang/Object.<init>',6,0,0)
f(13,143,3,2,'scala/Some.value',3,0,0)
f(11,146,1,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2',1,0,0)
f(9,147,108,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,153,19,2,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2',19,0,0)
f(11,160,5,2,'kyo/bench/EnqueueDequeueBench$$Lambda$60.0x0000000800d4fc00.apply',5,0,0)
f(12,161,4,2,'kyo/bench/EnqueueDequeueBench.$anonfun$1',4,0,0)
f(11,165,7,2,'kyo/bench/EnqueueDequeueBench$$anon$2.<init>',7,0,0)
f(12,170,2,2,'kyo/core$internal$KyoCont.<init>',2,0,0)
f(10,172,83,2,'kyo/concurrent/channels$Channels$Blocking$$anon$1.apply',77,0,0)
f(11,176,52,2,'kyo/concurrent/channels$$anon$19.apply',46,0,0)
f(12,176,52,2,'kyo/concurrent/channels$$anon$19.apply',46,0,0)
f(13,181,6,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(14,184,1,2,'kyo/concurrent/channels$Channels$$anon$14.q',1,0,0)
f(14,185,1,2,'kyo/concurrent/queues$$anon$12.isFull',1,0,0)
f(15,185,1,2,'java/util/concurrent/atomic/AtomicReference.get',1,0,0)
f(14,186,1,2,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.isEmpty',1,0,0)
f(15,186,1,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.isEmpty',1,0,0)
f(16,186,1,2,'org/jctools/queues/IndexedQueueSizeUtil.isEmpty',1,0,0)
f(17,186,1,2,'org/jctools/queues/MpUnboundedXaddArrayQueueProducerFields.lvProducerIndex',1,0,0)
f(13,187,2,2,'kyo/concurrent/channels$Channels$$anon$14.q',2,0,0)
f(13,189,1,2,'kyo/concurrent/fibers$Fibers.value',1,0,0)
f(14,189,1,2,'kyo/concurrent/fibers$Fiber$.done',1,0,0)
f(15,189,1,2,'kyo/concurrent/fibers$Fiber.<init>',1,0,0)
f(16,189,1,2,'java/lang/Object.<init>',1,0,0)
f(13,190,38,2,'kyo/concurrent/queues$$anon$12.offer',38,0,0)
f(14,190,38,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',38,0,0)
f(15,195,33,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',33,0,0)
f(16,213,8,2,'java/lang/invoke/VarForm.getMemberName',8,0,0)
f(17,218,3,2,'java/lang/invoke/VarForm.getMemberNameOrNull',3,0,0)
f(16,221,3,2,'java/lang/invoke/VarHandle.checkExactAccessMode',3,0,0)
f(16,224,4,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',4,0,0)
f(11,228,27,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1',27,0,0)
f(12,229,26,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$59.0x0000000800d4f830.apply',26,0,0)
f(13,246,9,2,'kyo/concurrent/channels$Channels$Blocking.$anonfun$1',9,0,0)
f(9,255,1,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',1,0,0)
f(9,256,1,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,256,1,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',1,0,0)
f(11,256,1,2,'kyo/concurrent/scheduler/IOPromise.complete',1,0,0)
f(12,256,1,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',1,0,0)
f(13,256,1,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',1,0,0)
f(9,257,3,2,'kyo/concurrent/scheduler/IOTask.st',3,0,0)
f(9,260,27,6,'kyo/core$internal$KyoCont.effect',0,27,0)
f(9,287,8,3,'vtable stub')
f(7,295,1,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,295,1,1,'kyo/concurrent/scheduler/Worker.park')
f(9,295,1,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,295,1,1,'jdk/internal/misc/Unsafe.park')
f(11,295,1,3,'[unknown]')
f(12,295,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,295,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,295,1,5,'do_syscall_64')
f(15,295,1,5,'__x64_sys_futex')
f(16,295,1,5,'do_futex')
f(17,295,1,5,'futex_wait')
f(18,295,1,5,'futex_wait_queue_me')
f(19,295,1,5,'schedule')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 560px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(35);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,14198,3,'all')
f(1,0,14194,1,'java/lang/Thread.run')
f(2,0,14194,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,14194,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,1460,1,'java/util/concurrent/FutureTask.run')
f(5,0,1460,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,1460,1,'java/util/concurrent/FutureTask.run')
f(7,0,1460,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,1460,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1460,1,'java/lang/reflect/Method.invoke')
f(10,0,1460,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,1460,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,1460,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,1460,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,1460,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,1460,1,'kyo/bench/Bench.syncKyo')
f(16,0,776,1,'kyo/bench/Bench.runLoop$1')
f(17,0,415,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,415,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,415,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,415,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,303,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,303,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,174,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,174,129,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,174,129,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,303,65,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,368,47,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,368,47,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,368,47,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,415,361,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,415,334,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,415,334,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,415,334,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,415,295,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,415,295,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,415,295,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(24,415,295,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,415,294,2,'kyo.concurrent.scheduler.IOTask')
f(25,709,1,1,'kyo/concurrent/fibers$Fiber$.promise')
f(26,709,1,2,'kyo.concurrent.fibers$Fiber')
f(21,710,39,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,710,39,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c88000.apply')
f(23,710,39,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,710,39,1,'kyo/concurrent/fibers$Fiber.join')
f(25,710,39,1,'kyo/concurrent/fibers$Fibers.get')
f(26,710,39,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,710,39,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,749,27,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,749,27,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c885f8.apply')
f(20,749,27,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,749,27,1,'kyo/concurrent/fibers$Fiber.block')
f(22,749,27,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,776,684,1,'kyo/bench/EnqueueDequeueBench.kyoBench')
f(17,776,131,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,776,131,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,776,131,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,776,131,2,'kyo.bench.EnqueueDequeueBench$$Lambda$37+0x0000000800c81148')
f(17,907,376,1,'kyo/concurrent/fibers$Fibers.block')
f(18,907,132,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,907,132,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,1039,176,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,1039,176,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,1215,68,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,1215,68,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,1283,177,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,1283,71,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,1283,71,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,1283,71,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,1283,71,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c88000')
f(18,1354,54,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,1354,22,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,1354,22,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,1354,22,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,1354,22,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c828a0')
f(19,1376,32,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,1376,32,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(18,1408,52,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,1408,52,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(4,1460,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec30.run')
f(5,1460,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,1460,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,1460,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,1460,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,1460,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,1460,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,1460,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,1470,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,1470,1,2,'java.lang.String')
f(4,1471,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1ee58.run')
f(5,1471,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,1471,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,1471,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,1471,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,1471,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,1471,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$65+0x0000000800d554d0')
f(4,1482,12712,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23480.run')
f(5,1482,12712,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,1482,12712,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,1482,12712,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,1482,12712,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,1482,6842,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,1482,5979,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(11,1482,5979,1,'kyo/bench/EnqueueDequeueBench$$Lambda$63.0x0000000800d54e40.apply')
f(12,1482,5979,1,'kyo/bench/EnqueueDequeueBench.$anonfun$2')
f(13,1482,5979,1,'kyo/bench/EnqueueDequeueBench.loop$2')
f(14,1482,1132,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(15,1482,1132,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(16,1482,1132,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,1482,1132,2,'kyo.bench.EnqueueDequeueBench$$Lambda$61+0x0000000800d543d0')
f(14,2614,1482,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(15,2614,1482,2,'kyo.bench.EnqueueDequeueBench$$anon$2')
f(14,4096,3365,1,'kyo/concurrent/channels$Channels$$anon$14.put')
f(15,4096,3365,1,'kyo/concurrent/channels$Channels$Blocking.put$')
f(16,4096,3365,1,'kyo/concurrent/channels$Channels$Blocking.put')
f(17,4096,745,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,4096,745,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,4096,745,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,4096,745,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$60+0x0000000800d54000')
f(17,4841,1088,1,'kyo/concurrent/channels$Channels$$anon$14.putFiber')
f(18,4841,1088,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$_$transformLoop$10')
f(19,4841,1088,1,'kyo/concurrent/channels$Channels$$anon$14$$Lambda$59.0x0000000800d4f950.apply')
f(20,4841,1088,1,'kyo/concurrent/channels$Channels$$anon$14.$anonfun$11')
f(21,4841,1088,2,'kyo.concurrent.channels$$anon$19')
f(17,5929,1532,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1')
f(18,5929,1532,2,'kyo.concurrent.channels$Channels$Blocking$$anon$1')
f(10,7461,863,1,'kyo/concurrent/channels$Channels$Blocking$$anon$2.apply')
f(11,7461,863,1,'kyo/concurrent/channels$$anon$16.apply')
f(12,7461,863,1,'kyo/concurrent/channels$$anon$16.apply')
f(13,7461,863,1,'kyo/concurrent/fibers$Fibers.value')
f(14,7461,863,1,'kyo/concurrent/fibers$Fiber$.done')
f(15,7461,863,2,'kyo.concurrent.fibers$Fiber')
f(9,8324,5685,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,8324,4915,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(11,8324,4915,1,'kyo/bench/EnqueueDequeueBench$$Lambda$61.0x0000000800d543d0.apply')
f(12,8324,4915,1,'kyo/bench/EnqueueDequeueBench.$anonfun$1')
f(13,8324,1263,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(14,8324,1263,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(15,8324,1263,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,8324,1263,2,'kyo.bench.EnqueueDequeueBench$$Lambda$63+0x0000000800d54e40')
f(13,9587,1407,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(14,9587,1407,2,'kyo.bench.EnqueueDequeueBench$$anon$1')
f(13,10994,2245,1,'kyo/concurrent/channels$Channels$$anon$14.take')
f(14,10994,2245,1,'kyo/concurrent/channels$Channels$Blocking.take$')
f(15,10994,2245,1,'kyo/concurrent/channels$Channels$Blocking.take')
f(16,10994,868,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,10994,868,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,10994,868,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,10994,868,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$62+0x0000000800d54a70')
f(16,11862,1377,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2')
f(17,11862,1377,2,'kyo.concurrent.channels$Channels$Blocking$$anon$2')
f(10,13239,770,1,'kyo/concurrent/channels$Channels$Blocking$$anon$1.apply')
f(11,13239,770,1,'kyo/concurrent/channels$$anon$19.apply')
f(12,13239,770,1,'kyo/concurrent/channels$$anon$19.apply')
f(13,13239,770,1,'kyo/concurrent/fibers$Fibers.value')
f(14,13239,770,1,'kyo/concurrent/fibers$Fiber$.done')
f(15,13239,770,2,'kyo.concurrent.fibers$Fiber')
f(9,14009,47,1,'kyo/bench/EnqueueDequeueBench$$anon$3.apply')
f(10,14009,47,1,'kyo/concurrent/channels$Channels$$anon$21.apply')
f(11,14009,47,1,'kyo/concurrent/channels$Channels$.kyo$concurrent$channels$Channels$$$_$transformLoop$11')
f(12,14009,47,1,'kyo/concurrent/channels$Channels$$$Lambda$57.0x0000000800d4c488.apply')
f(13,14009,47,1,'kyo/concurrent/channels$Channels$.$anonfun$9')
f(14,14009,1,2,'kyo.concurrent.channels$Channels$$anon$14')
f(14,14010,46,1,'kyo/concurrent/channels$Channels$$anon$14.<init>')
f(15,14010,1,2,'kyo.concurrent.channels$$anon$15')
f(15,14011,1,1,'kyo/concurrent/queues$Queue.size')
f(16,14011,1,2,'kyo.concurrent.queues$Queue$$anon$1')
f(15,14012,9,2,'org.jctools.queues.MpmcUnboundedXaddArrayQueue')
f(15,14021,35,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(16,14021,35,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(17,14021,35,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.<init>')
f(18,14021,8,2,'org.jctools.queues.SpscArrayQueue')
f(18,14029,27,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(19,14029,27,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(20,14029,1,2,'org.jctools.queues.MpmcUnboundedXaddChunk')
f(20,14030,26,1,'org/jctools/queues/MpmcUnboundedXaddChunk.<init>')
f(21,14030,26,1,'org/jctools/util/UnsafeLongArrayAccess.allocateLongArray')
f(22,14030,26,2,'long[]')
f(9,14056,138,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,14056,138,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,14056,138,1,'kyo/bench/EnqueueDequeueBench$$Lambda$37.0x0000000800c81148.apply')
f(12,14056,138,1,'kyo/bench/EnqueueDequeueBench.kyoBench$$anonfun$1')
f(13,14056,138,1,'kyo/bench/EnqueueDequeueBench.kyoBenchFiber')
f(14,14056,138,1,'kyo/concurrent/channels$Channels$.blocking')
f(15,14056,138,1,'kyo/concurrent/queues$Queues$.bounded')
f(16,14056,138,2,'kyo.concurrent.queues$Queues$$anon$11')
f(1,14194,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,14194,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,14194,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,14194,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,14194,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,14194,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,14194,1,1,'jdk/proxy1/$Proxy0.iterationResult')
f(8,14194,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient$$Lambda$8.0x0000000800c01c70.invoke')
f(9,14194,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.lambda$new$0')
f(10,14194,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushFrame')
f(11,14194,1,1,'java/io/ObjectOutputStream.writeObject')
f(12,14194,1,1,'java/io/ObjectOutputStream.writeObject0')
f(13,14194,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(14,14194,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(15,14194,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(16,14194,1,1,'java/io/ObjectOutputStream.writeObject0')
f(17,14194,1,1,'java/io/ObjectOutputStream.writeArray')
f(18,14194,1,1,'java/io/ObjectOutputStream.writeObject0')
f(19,14194,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(20,14194,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(21,14194,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(22,14194,1,1,'java/io/ObjectOutputStream.writeObject0')
f(23,14194,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(24,14194,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(25,14194,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(26,14194,1,1,'java/io/ObjectOutputStream.writeObject0')
f(27,14194,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(28,14194,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(29,14194,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(30,14194,1,1,'java/io/ObjectOutputStream.writeObject0')
f(31,14194,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(32,14194,1,1,'java/io/ObjectOutputStream$HandleTable.assign')
f(33,14194,1,1,'java/io/ObjectOutputStream$HandleTable.growEntries')
f(34,14194,1,2,'int[]')
f(7,14195,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,14195,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,14195,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,14195,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,14195,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,14195,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,14195,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 608px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(38);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,294,3,'all')
f(1,0,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,2,3,'thread_native_entry(Thread*)')
f(3,0,2,4,'Thread::call_run()')
f(4,0,1,4,'JavaThread::thread_main_inner()')
f(5,0,1,4,'CompileBroker::compiler_thread_loop()')
f(6,0,1,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,1,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,1,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,1,4,'Compile::Code_Gen()')
f(10,0,1,4,'PhaseChaitin::Register_Allocate()')
f(11,0,1,4,'PhaseCoalesce::coalesce_driver()')
f(12,0,1,4,'PhaseConservativeCoalesce::coalesce(Block*)')
f(13,0,1,4,'PhaseCFG::is_uncommon(Block const*)')
f(4,1,1,4,'VMThread::run()')
f(5,1,1,4,'VMThread::inner_execute(VM_Operation*)')
f(6,1,1,4,'VMThread::evaluate_operation(VM_Operation*)')
f(7,1,1,4,'VM_Operation::evaluate()')
f(8,1,1,4,'VM_G1CollectForAllocation::doit()')
f(9,1,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint(double)')
f(10,1,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint_helper(double)')
f(11,1,1,4,'G1CollectedHeap::evacuate_initial_collection_set(G1ParScanThreadStateSet*, bool)')
f(12,1,1,4,'G1RemSet::merge_heap_roots(bool)')
f(13,1,1,4,'WorkGang::run_task(AbstractGangTask*, unsigned int, bool)')
f(14,1,1,3,'sem_post')
f(15,1,1,5,'entry_SYSCALL_64_after_hwframe')
f(16,1,1,5,'do_syscall_64')
f(17,1,1,5,'__x64_sys_futex')
f(18,1,1,5,'do_futex')
f(19,1,1,5,'futex_wake')
f(20,1,1,5,'wake_up_q')
f(21,1,1,5,'_raw_spin_unlock_irqrestore')
f(1,2,292,1,'java/lang/Thread.run')
f(2,2,292,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,2,292,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/EnqueueDequeueBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,2,2,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_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,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,2,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,2,1,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,2,1,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,2,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,2,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,2,1,1,'java/util/concurrent/locks/LockSupport.park')
f(24,2,1,1,'jdk/internal/misc/Unsafe.park')
f(25,2,1,3,'[unknown]')
f(26,2,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(17,3,1,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,3,1,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,3,1,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,3,1,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,3,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,3,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,3,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(24,3,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,3,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,3,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,3,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(28,3,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(29,3,1,1,'jdk/internal/misc/Unsafe.unpark')
f(30,3,1,3,'pthread_cond_signal')
f(31,3,1,5,'entry_SYSCALL_64_after_hwframe')
f(32,3,1,5,'do_syscall_64')
f(33,3,1,5,'__x64_sys_futex')
f(34,3,1,5,'do_futex')
f(35,3,1,5,'futex_wake')
f(36,3,1,5,'wake_up_q')
f(37,3,1,5,'_raw_spin_unlock_irqrestore')
f(4,4,290,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23480.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,290,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,4,290,1,'kyo/concurrent/scheduler/IOTask.eval',59,0,0)
f(9,49,115,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,53,2,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(11,53,2,1,'kyo/bench/EnqueueDequeueBench$$Lambda$63.0x0000000800d54e40.apply')
f(12,53,2,1,'kyo/bench/EnqueueDequeueBench.$anonfun$2')
f(13,53,2,1,'kyo/bench/EnqueueDequeueBench.loop$2')
f(14,53,1,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(15,53,1,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(16,53,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,53,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(18,53,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(19,53,1,4,'MemAllocator::allocate() const')
f(20,53,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(21,53,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(14,54,1,1,'kyo/concurrent/channels$Channels$$anon$14.put')
f(15,54,1,1,'kyo/concurrent/channels$Channels$Blocking.put$')
f(16,54,1,1,'kyo/concurrent/channels$Channels$Blocking.put')
f(17,54,1,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1')
f(18,54,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(19,54,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(20,54,1,4,'MemAllocator::allocate() const')
f(21,54,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(22,54,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(23,54,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(24,54,1,4,'G1AllocRegion::new_alloc_region_and_allocate(unsigned long, bool)')
f(25,54,1,4,'G1RemSetTrackingPolicy::update_at_allocate(HeapRegion*)')
f(10,55,109,2,'kyo/concurrent/channels$Channels$Blocking$$anon$2.apply',101,0,0)
f(11,62,95,2,'kyo/concurrent/channels$$anon$16.apply',87,0,0)
f(12,79,78,2,'kyo/concurrent/channels$$anon$16.apply',70,0,0)
f(13,122,8,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(14,128,2,2,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.isEmpty',2,0,0)
f(15,128,2,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.isEmpty',2,0,0)
f(16,128,2,2,'org/jctools/queues/IndexedQueueSizeUtil.isEmpty',2,0,0)
f(13,130,2,2,'kyo/concurrent/fibers$.Fibers',2,0,0)
f(13,132,13,2,'kyo/concurrent/fibers$Fibers.value',13,0,0)
f(14,132,13,2,'kyo/concurrent/fibers$Fiber$.done',13,0,0)
f(15,132,13,2,'kyo/concurrent/fibers$Fiber.<init>',13,0,0)
f(16,132,13,2,'java/lang/Object.<init>',13,0,0)
f(13,145,12,2,'kyo/concurrent/queues$$anon$12.poll',12,0,0)
f(14,152,5,2,'java/util/concurrent/atomic/AtomicReference.getAndSet',5,0,0)
f(15,152,5,2,'java/lang/invoke/VarHandleGuards.guard_LL_L',5,0,0)
f(16,154,3,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.getAndSet',3,0,0)
f(11,157,7,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2',7,0,0)
f(12,159,5,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$62.0x0000000800d54a70.apply',5,0,0)
f(9,164,102,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,182,16,2,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2',16,0,0)
f(11,186,11,2,'kyo/bench/EnqueueDequeueBench$$Lambda$61.0x0000000800d543d0.apply',11,0,0)
f(12,193,4,2,'kyo/bench/EnqueueDequeueBench.$anonfun$1',4,0,0)
f(13,193,4,2,'kyo/concurrent/channels$Channels$$anon$14.take',4,0,0)
f(14,193,4,2,'kyo/concurrent/channels$Channels$Blocking.take$',4,0,0)
f(15,193,4,2,'kyo/concurrent/channels$Channels$Blocking.take',4,0,0)
f(16,193,4,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',4,0,0)
f(17,196,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(18,196,1,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$62.0x0000000800d54a70.<init>',1,0,0)
f(11,197,1,2,'kyo/bench/EnqueueDequeueBench$$anon$2.<init>',1,0,0)
f(12,197,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(10,198,68,2,'kyo/concurrent/channels$Channels$Blocking$$anon$1.apply',62,0,0)
f(11,200,29,2,'kyo/concurrent/channels$$anon$19.apply',23,0,0)
f(12,200,29,2,'kyo/concurrent/channels$$anon$19.apply',23,0,0)
f(13,205,6,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(14,209,1,2,'kyo/concurrent/channels$Channels$$anon$14.q',1,0,0)
f(14,210,1,2,'kyo/concurrent/queues$$anon$12.isFull',1,0,0)
f(15,210,1,2,'java/util/concurrent/atomic/AtomicReference.get',1,0,0)
f(13,211,18,2,'kyo/concurrent/queues$$anon$12.offer',18,0,0)
f(14,211,18,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',18,0,0)
f(15,211,18,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',18,0,0)
f(16,226,2,2,'java/lang/invoke/VarHandle.isDirect',2,0,0)
f(16,228,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(11,229,37,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1',37,0,0)
f(12,232,34,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$60.0x0000000800d54000.apply',34,0,0)
f(13,242,24,2,'kyo/concurrent/channels$Channels$Blocking.$anonfun$1',24,0,0)
f(14,242,24,2,'kyo/concurrent/fibers$Fiber.join',24,0,0)
f(9,266,1,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,266,1,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,266,1,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,266,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,266,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,266,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,266,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,266,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,266,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,266,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,266,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,266,1,1,'jdk/internal/misc/Unsafe.unpark')
f(21,266,1,3,'pthread_cond_signal')
f(22,266,1,5,'entry_SYSCALL_64_after_hwframe')
f(23,266,1,5,'do_syscall_64')
f(24,266,1,5,'__x64_sys_futex')
f(25,266,1,5,'do_futex')
f(26,266,1,5,'futex_wake')
f(27,266,1,5,'wake_up_q')
f(28,266,1,5,'_raw_spin_unlock_irqrestore')
f(9,267,4,2,'kyo/concurrent/scheduler/IOTask.st',4,0,0)
f(9,271,13,6,'kyo/core$internal$KyoCont.effect',0,13,0)
f(9,284,10,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: 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,11994,3,'all')
f(1,0,11991,1,'java/lang/Thread.run')
f(2,0,11991,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,11991,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,261,1,'java/util/concurrent/FutureTask.run')
f(5,0,261,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,261,1,'java/util/concurrent/FutureTask.run')
f(7,0,261,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,261,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,261,1,'java/lang/reflect/Method.invoke')
f(10,0,261,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,261,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,261,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,261,1,'kyo/bench/jmh_generated/ForkManyBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,261,1,'kyo/bench/jmh_generated/ForkManyBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,261,1,'kyo/bench/Bench.forkKyo')
f(16,0,12,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,12,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,12,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,12,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,0,12,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3f718')
f(16,12,44,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,12,44,2,'kyo.bench.Bench$$anon$1')
f(16,56,157,1,'kyo/bench/Bench.runLoop$2')
f(17,56,79,1,'kyo/bench/Bench$$anon$1.apply')
f(18,56,38,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,56,38,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c83b00.apply')
f(20,56,38,1,'kyo/bench/Bench.$anonfun$2')
f(21,56,38,1,'kyo/concurrent/fibers$Fiber.block')
f(22,56,38,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,94,41,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,94,41,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,94,41,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(21,94,41,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,94,41,2,'kyo.concurrent.scheduler.IOTask')
f(17,135,78,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,135,78,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,135,78,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,135,78,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,135,39,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,135,39,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,135,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,138,36,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,138,36,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,174,3,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,177,36,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,177,36,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,177,36,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,213,48,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,213,48,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,213,48,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,213,48,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,213,32,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(21,213,32,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c85068')
f(20,245,16,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c85068')
f(4,261,9,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f2b8.run')
f(5,261,9,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,261,9,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,261,8,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,261,8,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,261,8,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,261,8,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,261,8,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,269,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,269,1,2,'java.lang.String')
f(4,270,12,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f4e0.run')
f(5,270,12,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,270,3,1,'kyo/concurrent/scheduler/Scheduler$.addWorker')
f(7,270,3,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers')
f(8,270,3,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(9,270,3,1,'java/util/concurrent/ThreadPoolExecutor.addWorker')
f(10,270,1,1,'java/util/HashSet.add')
f(11,270,1,1,'java/util/HashMap.put')
f(12,270,1,1,'java/util/HashMap.putVal')
f(13,270,1,1,'java/util/HashMap.resize')
f(14,270,1,5,'java.util.HashMap$Node[]')
f(10,271,2,1,'java/util/concurrent/ThreadPoolExecutor$Worker.<init>')
f(11,271,2,1,'kyo/concurrent/scheduler/Threads$$anon$1.newThread')
f(12,271,2,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$51.0x0000000800d23ff0.apply')
f(13,271,2,1,'kyo/concurrent/scheduler/Scheduler$.$init$$$anonfun$1')
f(14,271,2,1,'kyo/concurrent/scheduler/Worker.<init>')
f(15,271,2,1,'java/lang/Thread.<init>')
f(16,271,2,1,'java/lang/Thread.<init>')
f(17,271,2,1,'java/lang/Thread.<init>')
f(18,271,2,1,'java/security/AccessController.getContext')
f(19,271,2,1,'java/security/AccessControlContext.optimize')
f(20,271,2,1,'java/security/AccessControlContext.combine')
f(21,271,2,2,'java.security.ProtectionDomain[]')
f(6,273,9,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,273,9,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,273,9,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,273,9,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,273,9,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$71+0x0000000800d4fd88')
f(4,282,11709,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fda8.run')
f(5,282,11709,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,282,11709,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,282,11,1,'java/util/concurrent/CopyOnWriteArrayList.add')
f(8,282,11,1,'java/util/Arrays.copyOf')
f(9,282,11,1,'java/util/Arrays.copyOf')
f(10,282,11,2,'java.lang.Object[]')
f(7,293,10497,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,293,10497,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,293,10491,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,293,8757,1,'kyo/bench/ForkManyBench$$anon$1.apply')
f(11,293,3541,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(12,293,3541,1,'kyo/bench/ForkManyBench$$Lambda$61.0x0000000800d4b0c0.apply')
f(13,293,3541,1,'kyo/bench/ForkManyBench.$anonfun$2')
f(14,293,3541,1,'kyo/bench/ForkManyBench.repeat$2')
f(15,293,1346,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4cc00.linkToTargetMethod')
f(16,293,1346,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c400.newInvokeSpecial')
f(17,293,1346,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,293,1346,2,'kyo.bench.ForkManyBench$$Lambda$61+0x0000000800d4b0c0')
f(15,1639,2195,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(16,1639,2195,2,'kyo.bench.ForkManyBench$$anon$1')
f(11,3834,5216,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,3834,5216,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,3834,5216,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(14,3834,5216,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,3834,729,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,4563,3329,2,'kyo.concurrent.scheduler.IOTask')
f(15,7892,940,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,7892,940,2,'kyo.concurrent.fibers$Fiber')
f(15,8832,218,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(16,8832,218,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(17,8832,218,1,'kyo/concurrent/scheduler/Queue.offer')
f(18,8832,215,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,8832,215,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,8832,215,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,8832,215,2,'kyo.concurrent.scheduler.Queue$$Lambda$54+0x0000000800d474b0')
f(18,9047,3,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(19,9047,3,1,'scala/Function0.apply$mcZ$sp')
f(20,9047,3,1,'kyo/concurrent/scheduler/Queue$$Lambda$54.0x0000000800d474b0.apply')
f(21,9047,3,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1')
f(22,9047,3,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,9047,3,1,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize')
f(24,9047,3,1,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize')
f(25,9047,3,1,'scala/collection/mutable/ArrayBuffer$.scala$collection$mutable$ArrayBuffer$$ensureSize')
f(26,9047,3,5,'java.lang.Object[]')
f(10,9050,1734,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5')
f(11,9050,1734,2,'kyo.bench.ForkManyBench$$anon$6')
f(9,10784,3,1,'kyo/bench/ForkManyBench$$anon$7.apply')
f(10,10784,3,1,'kyo/bench/ForkManyBench$$anon$4.apply')
f(11,10784,2,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$3')
f(12,10784,2,1,'kyo/bench/ForkManyBench$$Lambda$57.0x0000000800d4a080.apply')
f(13,10784,2,1,'kyo/bench/ForkManyBench.$anonfun$adapted$3')
f(14,10784,2,1,'kyo/bench/ForkManyBench.$anonfun$4')
f(15,10784,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,10784,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,10784,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,10784,1,2,'kyo.bench.ForkManyBench$$Lambda$59+0x0000000800d4aa30')
f(15,10785,1,2,'kyo.concurrent.atomics$AtomicInt')
f(11,10786,1,1,'kyo/concurrent/atomics$Atomics$$anon$1.apply')
f(12,10786,1,1,'kyo/concurrent/atomics$Atomics$$anon$1.apply')
f(13,10786,1,2,'java.util.concurrent.atomic.AtomicInteger')
f(9,10787,1,1,'kyo/bench/ForkManyBench$$anon$8.apply')
f(10,10787,1,1,'kyo/concurrent/fibers$Fibers$$anon$31.apply')
f(11,10787,1,1,'kyo/concurrent/fibers$Fibers$$anon$31.apply')
f(12,10787,1,2,'kyo.concurrent.fibers$Fiber$Promise')
f(9,10788,1,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(10,10788,1,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(11,10788,1,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$Promise$$anon$26$$_$loop$22')
f(12,10788,1,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(13,10788,1,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(14,10788,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(15,10788,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(16,10788,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(17,10788,1,1,'scala/runtime/function/JProcedure1.apply')
f(18,10788,1,1,'scala/runtime/function/JProcedure1.apply')
f(19,10788,1,1,'kyo/concurrent/scheduler/IOTask$$Lambda$66.0x0000000800d4ebd8.applyVoid')
f(20,10788,1,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(21,10788,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(22,10788,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(23,10788,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(24,10788,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(25,10788,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$68+0x0000000800d4f4c8')
f(9,10789,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,10789,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,10789,1,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3f718.apply')
f(12,10789,1,1,'kyo/bench/Bench.$anonfun$1')
f(13,10789,1,1,'kyo/bench/ForkManyBench.kyoBenchFiber')
f(14,10789,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$7')
f(15,10789,1,2,'kyo.bench.ForkManyBench$$anon$8')
f(7,10790,1201,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,10790,1201,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,10790,1201,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,10790,1201,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,10790,1201,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d45230')
f(1,11991,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,11991,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,11991,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,11991,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,11991,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,11991,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,11991,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,11991,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,11991,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,11991,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,11991,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,11991,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,11991,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: 416px}
</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(26);
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,13,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,13,3,'thread_native_entry(Thread*)')
f(3,0,13,4,'Thread::call_run()')
f(4,0,13,4,'JavaThread::thread_main_inner()')
f(5,0,13,4,'CompileBroker::compiler_thread_loop()')
f(6,0,13,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,13,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,13,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,7,4,'Compile::Code_Gen()')
f(10,0,1,4,'PhaseCFG::do_global_code_motion()')
f(11,0,1,4,'PhaseCFG::global_code_motion()')
f(12,0,1,4,'PhaseCFG::schedule_local(Block*, GrowableArray<int>&, VectorSet&, long*)')
f(13,0,1,4,'MachNode::ideal_reg() const')
f(10,1,6,4,'PhaseChaitin::Register_Allocate()')
f(11,1,2,4,'PhaseChaitin::Select()')
f(11,3,1,4,'PhaseChaitin::build_ifg_physical(ResourceArea*)')
f(12,3,1,4,'PhaseChaitin::interfere_with_live(unsigned int, IndexSet*) [clone .part.0]')
f(11,4,1,4,'PhaseChaitin::gather_lrg_masks(bool)')
f(12,4,1,4,'RegMask::is_misaligned_pair() const')
f(11,5,1,4,'PhaseChaitin::gather_lrg_masks(bool) [clone .constprop.0]')
f(12,5,1,4,'MachNode::in_RegMask(unsigned int) const')
f(11,6,1,4,'PhaseChaitin::post_allocate_copy_removal()')
f(12,6,1,4,'PhaseChaitin::elide_copy(Node*, int, Block*, Node_List&, Node_List&, bool)')
f(9,7,5,4,'Compile::Optimize()')
f(10,7,2,4,'PhaseIdealLoop::optimize(PhaseIterGVN&, LoopOptsMode)')
f(11,7,2,4,'PhaseIdealLoop::build_and_optimize(LoopOptsMode)')
f(12,7,1,4,'PhaseIdealLoop::Dominators()')
f(12,8,1,4,'ProjNode::pinned() const')
f(10,9,3,4,'PhaseIterGVN::optimize()')
f(11,9,1,4,'NodeHash::hash_find_insert(Node*)')
f(11,10,2,4,'PhaseIterGVN::transform_old(Node*)')
f(12,10,1,4,'MergeMemNode::Ideal(PhaseGVN*, bool)')
f(12,11,1,4,'StoreNode::Ideal(PhaseGVN*, bool)')
f(13,11,1,4,'InitializeNode::can_capture_store(StoreNode*, PhaseGVN*, bool) [clone .part.0]')
f(14,11,1,4,'InitializeNode::detect_init_independence(Node*, PhaseGVN*)')
f(9,12,1,4,'ParseGenerator::generate(JVMState*)')
f(10,12,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(11,12,1,4,'Parse::do_all_blocks()')
f(12,12,1,4,'Parse::do_one_block()')
f(13,12,1,4,'Parse::do_call()')
f(14,12,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(15,12,1,4,'ParseGenerator::generate(JVMState*)')
f(16,12,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(17,12,1,4,'Parse::do_all_blocks()')
f(18,12,1,4,'Parse::do_one_block()')
f(19,12,1,4,'Parse::do_call()')
f(20,12,1,4,'LibraryIntrinsic::generate(JVMState*)')
f(21,12,1,4,'LibraryCallKit::inline_unsafe_access(bool, BasicType, LibraryCallKit::AccessKind, bool) [clone .part.0]')
f(22,12,1,4,'GraphKit::clone_map()')
f(23,12,1,4,'Node::clone() const')
f(24,12,1,4,'ReplacedNodes::clone()')
f(25,12,1,4,'resource_allocate_bytes(unsigned long, AllocFailStrategy::AllocFailEnum)')
f(1,13,4,3,'[not_walkable_Java]')
f(2,13,2,1,'I2C/C2I adapters')
f(3,13,2,4,'SharedRuntime::fixup_callers_callsite(Method*, unsigned char*)')
f(4,13,1,4,'CodeCache::find_blob(void*)')
f(4,14,1,4,'CodeHeap::find_blob_unsafe(void*) const')
f(2,15,2,3,'Interpreter')
f(1,17,29,3,'[unknown_Java]')
f(2,17,27,1,'I2C/C2I adapters')
f(2,44,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(2,45,1,1,'scala/collection/mutable/PriorityQueue.addOne')
f(1,46,253,1,'java/lang/Thread.run')
f(2,46,253,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,46,253,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,46,1,1,'java/util/concurrent/FutureTask.run')
f(5,46,1,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,46,1,1,'java/util/concurrent/FutureTask.run')
f(7,46,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,46,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,46,1,1,'java/lang/reflect/Method.invoke')
f(10,46,1,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,46,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,46,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,46,1,1,'kyo/bench/jmh_generated/ForkManyBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,46,1,1,'kyo/bench/jmh_generated/ForkManyBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,46,1,6,'kyo/bench/Bench.forkKyo',0,1,0)
f(16,46,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(17,46,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(18,46,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(4,47,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f2b8.run')
f(5,47,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,47,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,47,1,1,'java/lang/Thread.sleep')
f(8,47,1,3,'[unknown]')
f(9,47,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(4,48,251,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fda8.run')
f(5,48,251,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,48,251,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,50,172,1,'kyo/concurrent/scheduler/IOTask.run',21,0,0)
f(8,53,1,2,'kyo/concurrent/scheduler/Coordinator$.tick',1,0,0)
f(8,54,168,1,'kyo/concurrent/scheduler/IOTask.eval',17,0,0)
f(9,69,2,1,'kyo/bench/ForkManyBench$$anon$3.apply')
f(10,69,2,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$2',2,0,0)
f(11,69,2,2,'kyo/bench/ForkManyBench$$Lambda$59.0x0000000800d4ac60.apply',2,0,0)
f(12,69,2,2,'kyo/bench/ForkManyBench.$anonfun$adapted$2',2,0,0)
f(13,69,2,2,'kyo/bench/ForkManyBench.$anonfun$5',2,0,0)
f(14,69,2,2,'scala/runtime/BoxesRunTime.boxToBoolean',2,0,0)
f(9,71,136,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,71,129,1,'kyo/bench/ForkManyBench$$anon$1.apply',32,0,0)
f(11,71,129,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',32,0,0)
f(12,73,126,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',30,0,0)
f(13,79,115,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply',19,0,0)
f(14,79,115,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',19,0,0)
f(15,80,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(16,80,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(17,80,1,4,'MemAllocator::allocate() const')
f(18,80,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(19,80,1,4,'G1CardTable::g1_mark_as_young(MemRegion const&)')
f(15,81,2,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',2,0,0)
f(15,83,10,2,'kyo/concurrent/scheduler/IOTask.<init>',10,0,0)
f(16,91,2,2,'kyo/concurrent/scheduler/IOPromise.<init>',2,0,0)
f(17,91,2,2,'kyo/concurrent/scheduler/IOPromise.<init>',2,0,0)
f(18,92,1,2,'java/util/concurrent/atomic/AtomicReference.<init>',1,0,0)
f(19,92,1,2,'java/lang/Object.<init>',1,0,0)
f(15,93,101,1,'kyo/concurrent/scheduler/Scheduler$.schedule',6,0,0)
f(16,94,100,1,'kyo/concurrent/scheduler/Worker.enqueueLocal',5,0,0)
f(17,94,100,1,'kyo/concurrent/scheduler/Queue.offer',5,0,0)
f(18,94,100,1,'kyo/concurrent/scheduler/Queue.tryModify',5,0,0)
f(19,97,97,1,'scala/Function0.apply$mcZ$sp',2,0,0)
f(20,97,97,1,'kyo/concurrent/scheduler/Queue$$Lambda$54.0x0000000800d474b0.apply',2,0,0)
f(21,97,97,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1',2,0,0)
f(22,99,95,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,101,21,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize',21,0,0)
f(24,101,21,2,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize',21,0,0)
f(25,101,1,2,'scala/collection/mutable/ArrayBuffer.array',1,0,0)
f(25,102,20,2,'scala/collection/mutable/ArrayBuffer.array_$eq',20,0,0)
f(23,122,72,2,'scala/collection/mutable/PriorityQueue.fixUp',72,0,0)
f(24,132,13,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',13,0,0)
f(24,145,47,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_swap',47,0,0)
f(25,181,11,2,'scala/collection/mutable/ArrayBuffer.array',11,0,0)
f(24,192,2,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',2,0,0)
f(13,194,5,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',5,0,0)
f(14,194,5,2,'kyo/core$internal$KyoCont.<init>',5,0,0)
f(15,194,3,2,'kyo/ios$KyoIO.effect',3,0,0)
f(16,194,3,2,'kyo/ios$KyoIO.effect',3,0,0)
f(15,197,2,2,'kyo/ios$KyoIO.value',2,0,0)
f(12,199,1,6,'kyo/concurrent/scheduler/IOTask.apply',0,1,0)
f(10,200,7,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5',4,0,0)
f(11,200,7,2,'kyo/bench/ForkManyBench$$anon$6.<init>',4,0,0)
f(12,200,7,2,'kyo/core$internal$KyoCont.<init>',4,0,0)
f(13,201,3,6,'kyo/core$internal$KyoCont.value',0,3,0)
f(13,204,3,3,'vtable stub')
f(9,207,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,207,1,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',1,0,0)
f(9,208,3,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',3,0,0)
f(9,211,3,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,212,2,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,212,2,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(9,214,3,6,'kyo/core$internal$KyoCont.effect',0,3,0)
f(9,217,3,1,'kyo/ios$KyoIO.effect')
f(9,220,2,3,'vtable stub')
f(7,222,73,1,'kyo/concurrent/scheduler/Queue.poll',1,0,0)
f(8,223,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,224,1,1,'kyo/concurrent/scheduler/Queue.isEmpty')
f(8,225,70,0,'kyo/concurrent/scheduler/Queue.modify',0,0,43)
f(9,271,1,4,'InterpreterRuntime::frequency_counter_overflow(JavaThread*, unsigned char*)')
f(10,271,1,4,'InterpreterRuntime::frequency_counter_overflow_inner(JavaThread*, unsigned char*)')
f(11,271,1,4,'CompilationPolicy::event(methodHandle const&, methodHandle const&, int, int, CompLevel, CompiledMethod*, JavaThread*)')
f(12,271,1,4,'frame::is_interpreted_frame() const')
f(9,272,9,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',8,0,0)
f(10,275,6,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',6,0,0)
f(11,276,3,2,'java/lang/invoke/VarHandle.checkExactAccessMode',3,0,0)
f(11,279,2,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',2,0,0)
f(9,281,1,1,'java/util/concurrent/atomic/AtomicBoolean.set')
f(9,282,8,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47cc8.apply',5,0,0)
f(10,282,8,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',7,0,0)
f(11,287,3,2,'scala/collection/mutable/PriorityQueue.dequeue',2,0,0)
f(12,287,1,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',1,0,0)
f(13,287,1,2,'scala/collection/mutable/ArrayBuffer.array',1,0,0)
f(12,288,1,2,'scala/collection/mutable/PriorityQueue.fixDown',1,0,0)
f(13,288,1,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.gteq',1,0,0)
f(14,288,1,2,'scala/math/Ordering.gteq$',1,0,0)
f(15,288,1,2,'scala/math/Ordering.gteq',1,0,0)
f(16,288,1,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.compare',1,0,0)
f(12,289,1,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',1,0,0)
f(9,290,5,2,'kyo/concurrent/scheduler/Queue$$Lambda$63.0x0000000800d4ba90.apply',5,0,0)
f(10,291,4,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',4,0,0)
f(11,292,2,2,'kyo/concurrent/scheduler/Queue.isEmpty',2,0,0)
f(12,292,2,2,'kyo/concurrent/scheduler/Queue.items',2,0,0)
f(11,294,1,2,'scala/collection/mutable/PriorityQueue.dequeue',1,0,0)
f(7,295,4,2,'kyo/concurrent/scheduler/Worker.stop$1',2,0,0)
f(8,295,4,2,'kyo/concurrent/scheduler/Scheduler$.stopWorker',2,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 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,14198,3,'all')
f(1,0,14195,1,'java/lang/Thread.run')
f(2,0,14195,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,14195,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,426,1,'java/util/concurrent/FutureTask.run')
f(5,0,425,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,425,1,'java/util/concurrent/FutureTask.run')
f(7,0,425,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,425,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,425,1,'java/lang/reflect/Method.invoke')
f(10,0,425,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,425,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,425,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,425,1,'kyo/bench/jmh_generated/ForkManyBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,423,1,'kyo/bench/jmh_generated/ForkManyBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,423,1,'kyo/bench/Bench.syncKyo')
f(16,0,178,1,'kyo/bench/Bench.runLoop$1')
f(17,0,63,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,63,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,63,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,63,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,32,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,32,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,30,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,30,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,30,2,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,32,29,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,61,2,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,61,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,61,2,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,63,115,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,63,113,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,63,113,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,63,113,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,63,83,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,63,83,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,63,83,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(24,63,83,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,63,2,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(25,65,40,2,'kyo.concurrent.scheduler.IOTask')
f(25,105,3,1,'kyo/concurrent/fibers$Fiber$.promise')
f(26,105,3,2,'kyo.concurrent.fibers$Fiber')
f(25,108,38,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,108,38,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,108,38,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(28,108,38,1,'kyo/concurrent/scheduler/Queue.offer')
f(29,108,38,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(30,108,38,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(31,108,38,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(32,108,38,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(33,108,38,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d476b8')
f(21,146,30,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,146,30,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c83b00.apply')
f(23,146,30,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,146,30,1,'kyo/concurrent/fibers$Fiber.join')
f(25,146,30,1,'kyo/concurrent/fibers$Fibers.get')
f(26,146,30,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,146,30,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,176,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,176,2,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c81430.apply')
f(20,176,2,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,176,2,1,'kyo/concurrent/fibers$Fiber.block')
f(22,176,2,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,178,245,1,'kyo/bench/ForkManyBench.kyoBench')
f(17,178,40,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,178,40,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,178,40,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,178,40,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(21,178,40,2,'kyo.bench.ForkManyBench$$Lambda$37+0x0000000800c3f718')
f(17,218,119,1,'kyo/concurrent/fibers$Fibers.block')
f(18,218,41,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,218,41,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,259,40,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,259,40,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,299,38,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,299,38,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,337,86,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,337,43,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,337,43,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,337,43,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,337,43,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(22,337,43,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c83b00')
f(18,380,41,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,380,41,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,380,41,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,380,41,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,380,41,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c85068')
f(18,421,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,421,2,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(14,423,2,1,'org/openjdk/jmh/results/ThroughputResult.<init>')
f(15,423,1,1,'java/lang/StringBuilder.toString')
f(16,423,1,1,'java/lang/StringLatin1.newString')
f(17,423,1,2,'java.lang.String')
f(15,424,1,1,'org/openjdk/jmh/results/Result.of')
f(16,424,1,2,'org.openjdk.jmh.util.SingletonStatistics')
f(5,425,1,1,'java/util/concurrent/FutureTask.set')
f(6,425,1,1,'java/util/concurrent/FutureTask.finishCompletion')
f(7,425,1,1,'java/util/concurrent/ExecutorCompletionService$QueueingFuture.done')
f(8,425,1,1,'java/util/AbstractQueue.add')
f(9,425,1,1,'java/util/concurrent/LinkedBlockingQueue.offer')
f(10,425,1,2,'java.util.concurrent.LinkedBlockingQueue$Node')
f(4,426,10,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f4b8.run')
f(5,426,10,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,426,10,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,426,9,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,426,9,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,426,9,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,426,9,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,426,9,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,435,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,435,1,2,'java.lang.String')
f(4,436,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1f6e0.run')
f(5,436,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,436,1,1,'kyo/concurrent/scheduler/Scheduler$.addWorker')
f(7,436,1,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers')
f(8,436,1,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(9,436,1,1,'java/util/concurrent/ThreadPoolExecutor.addWorker')
f(10,436,1,1,'java/util/concurrent/ThreadPoolExecutor$Worker.<init>')
f(11,436,1,1,'kyo/concurrent/scheduler/Threads$$anon$1.newThread')
f(12,436,1,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23ff0.apply')
f(13,436,1,1,'kyo/concurrent/scheduler/Scheduler$.$init$$$anonfun$1')
f(14,436,1,1,'kyo/concurrent/scheduler/Worker.<init>')
f(15,436,1,1,'java/lang/Thread.<init>')
f(16,436,1,1,'java/lang/Thread.<init>')
f(17,436,1,1,'java/lang/Thread.<init>')
f(18,436,1,1,'java/security/AccessController.getContext')
f(19,436,1,1,'java/security/AccessControlContext.optimize')
f(20,436,1,1,'java/security/AccessControlContext.combine')
f(21,436,1,2,'java.security.ProtectionDomain[]')
f(6,437,10,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,437,10,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,437,10,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,437,10,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,437,10,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$70+0x0000000800d4da20')
f(4,447,13748,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d243c0.run')
f(5,447,13748,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,447,13748,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,447,11,1,'java/util/concurrent/CopyOnWriteArrayList.add')
f(8,447,11,1,'java/util/Arrays.copyOf')
f(9,447,11,1,'java/util/Arrays.copyOf')
f(10,447,11,2,'java.lang.Object[]')
f(7,458,12322,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,458,12322,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,458,12320,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,458,10099,1,'kyo/bench/ForkManyBench$$anon$1.apply')
f(11,458,4126,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(12,458,4126,1,'kyo/bench/ForkManyBench$$Lambda$62.0x0000000800d4b490.apply')
f(13,458,4126,1,'kyo/bench/ForkManyBench.$anonfun$2')
f(14,458,4126,1,'kyo/bench/ForkManyBench.repeat$2')
f(15,458,1884,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4cc00.linkToTargetMethod')
f(16,458,1884,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c400.newInvokeSpecial')
f(17,458,1884,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,458,1884,2,'kyo.bench.ForkManyBench$$Lambda$62+0x0000000800d4b490')
f(15,2342,2242,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(16,2342,2242,2,'kyo.bench.ForkManyBench$$anon$1')
f(11,4584,5973,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,4584,5973,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,4584,5973,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(14,4584,5973,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,4584,1001,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,5585,3920,2,'kyo.concurrent.scheduler.IOTask')
f(15,9505,1049,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,9505,1049,2,'kyo.concurrent.fibers$Fiber')
f(15,10554,3,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(16,10554,3,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(17,10554,3,1,'kyo/concurrent/scheduler/Queue.offer')
f(18,10554,3,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(19,10554,3,1,'scala/Function0.apply$mcZ$sp')
f(20,10554,3,1,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d476b8.apply')
f(21,10554,3,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1')
f(22,10554,3,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,10554,3,1,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize')
f(24,10554,3,1,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize')
f(25,10554,3,1,'scala/collection/mutable/ArrayBuffer$.scala$collection$mutable$ArrayBuffer$$ensureSize')
f(26,10554,1,2,'java.lang.Object[]')
f(26,10555,2,5,'java.lang.Object[]')
f(10,10557,2221,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5')
f(11,10557,2220,2,'kyo.bench.ForkManyBench$$anon$6')
f(11,12777,1,1,'kyo/bench/ForkManyBench$$Lambda$63.0x0000000800d4b860.apply')
f(12,12777,1,1,'kyo/bench/ForkManyBench.$anonfun$8')
f(13,12777,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$4')
f(14,12777,1,2,'kyo.bench.ForkManyBench$$anon$5')
f(9,12778,1,1,'kyo/bench/ForkManyBench$$anon$7.apply')
f(10,12778,1,1,'kyo/bench/ForkManyBench$$anon$4.apply')
f(11,12778,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$3')
f(12,12778,1,1,'kyo/bench/ForkManyBench$$Lambda$58.0x0000000800d4a450.apply')
f(13,12778,1,1,'kyo/bench/ForkManyBench.$anonfun$adapted$3')
f(14,12778,1,1,'kyo/bench/ForkManyBench.$anonfun$4')
f(15,12778,1,2,'kyo.bench.ForkManyBench$$anon$2')
f(9,12779,1,1,'kyo/bench/ForkManyBench$$anon$8.apply')
f(10,12779,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$7')
f(11,12779,1,1,'kyo/bench/ForkManyBench$$Lambda$57.0x0000000800d48000.apply')
f(12,12779,1,1,'kyo/bench/ForkManyBench.$anonfun$3')
f(13,12779,1,1,'kyo/concurrent/atomics$Atomics$.initInt')
f(14,12779,1,2,'kyo.concurrent.atomics$Atomics$$anon$1')
f(7,12780,1415,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,12780,1415,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,12780,1415,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,12780,1415,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,12780,1415,2,'kyo.concurrent.scheduler.Queue$$Lambda$56+0x0000000800d45230')
f(1,14195,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,14195,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,14195,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,14195,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,14195,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,14195,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,14195,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,14195,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,14195,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,14195,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,14195,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,14195,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,14195,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: 1024px}
</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(64);
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,9,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,9,3,'thread_native_entry(Thread*)')
f(3,0,9,4,'Thread::call_run()')
f(4,0,9,4,'JavaThread::thread_main_inner()')
f(5,0,9,4,'CompileBroker::compiler_thread_loop()')
f(6,0,9,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,9,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,9,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,3,4,'Compile::Code_Gen()')
f(10,0,1,4,'PhaseCFG::fixup_flow()')
f(10,1,2,4,'PhaseChaitin::Register_Allocate()')
f(11,1,1,4,'PhaseChaitin::gather_lrg_masks(bool) [clone .constprop.0]')
f(11,2,1,4,'jmpDirNode::is_block_proj() const')
f(9,3,3,4,'Compile::Optimize()')
f(10,3,1,4,'Compile::final_graph_reshaping() [clone .part.0]')
f(11,3,1,4,'Compile::final_graph_reshaping_walk(Node_Stack&, Node*, Final_Reshape_Counts&)')
f(10,4,1,4,'PhaseCCP::do_transform()')
f(11,4,1,4,'PhaseCCP::transform(Node*)')
f(12,4,1,4,'PhaseCCP::transform_once(Node*)')
f(10,5,1,4,'PhaseIdealLoop::build_and_optimize(LoopOptsMode)')
f(11,5,1,4,'PhaseIdealLoop::split_if_with_blocks(VectorSet&, Node_Stack&)')
f(12,5,1,4,'PhaseIdealLoop::split_if_with_blocks_post(Node*)')
f(13,5,1,4,'PhaseIdealLoop::try_sink_out_of_loop(Node*)')
f(14,5,1,4,'PhaseIdealLoop::ctrl_of_all_uses_out_of_loop(Node const*, Node*, IdealLoopTree*)')
f(9,6,3,4,'ParseGenerator::generate(JVMState*)')
f(10,6,3,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(11,6,3,4,'Parse::do_all_blocks()')
f(12,6,3,4,'Parse::do_one_block()')
f(13,6,3,4,'Parse::do_call()')
f(14,6,3,4,'PredictedCallGenerator::generate(JVMState*)')
f(15,6,1,4,'ParseGenerator::generate(JVMState*)')
f(16,6,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(17,6,1,4,'Parse::do_all_blocks()')
f(18,6,1,4,'Parse::do_one_block()')
f(19,6,1,4,'Parse::do_field_access(bool, bool)')
f(20,6,1,4,'Parse::do_get_xxx(Node*, ciField*, bool)')
f(21,6,1,4,'GraphKit::access_load_at(Node*, Node*, TypePtr const*, Type const*, BasicType, unsigned long)')
f(22,6,1,4,'BarrierSetC2::load_at(C2Access&, Type const*) const')
f(23,6,1,4,'G1BarrierSetC2::load_at_resolved(C2Access&, Type const*) const')
f(24,6,1,4,'BarrierSetC2::load_at_resolved(C2Access&, Type const*) const')
f(25,6,1,4,'GraphKit::make_load(Node*, Node*, Type const*, BasicType, int, MemNode::MemOrd, LoadNode::ControlDependency, bool, bool, bool, bool, unsigned char)')
f(26,6,1,4,'LoadNode::make(PhaseGVN&, Node*, Node*, Node*, TypePtr const*, Type const*, BasicType, MemNode::MemOrd, LoadNode::ControlDependency, bool, bool, bool, unsigned char)')
f(27,6,1,4,'PhaseGVN::transform_no_reclaim(Node*)')
f(28,6,1,4,'LoadNode::Identity(PhaseGVN*)')
f(29,6,1,4,'MemBarVolatileNode::Opcode() const')
f(15,7,2,4,'PredictedCallGenerator::generate(JVMState*)')
f(16,7,2,4,'ParseGenerator::generate(JVMState*)')
f(17,7,2,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(18,7,2,4,'Parse::do_all_blocks()')
f(19,7,2,4,'Parse::do_one_block()')
f(20,7,2,4,'Parse::do_call()')
f(21,7,2,4,'PredictedCallGenerator::generate(JVMState*)')
f(22,7,2,4,'ParseGenerator::generate(JVMState*)')
f(23,7,2,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(24,7,2,4,'Parse::do_all_blocks()')
f(25,7,2,4,'Parse::do_one_block()')
f(26,7,2,4,'Parse::do_call()')
f(27,7,2,4,'PredictedCallGenerator::generate(JVMState*)')
f(28,7,2,4,'ParseGenerator::generate(JVMState*)')
f(29,7,2,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(30,7,2,4,'Parse::do_all_blocks()')
f(31,7,2,4,'Parse::do_one_block()')
f(32,7,2,4,'Parse::do_call()')
f(33,7,2,4,'PredictedCallGenerator::generate(JVMState*)')
f(34,7,1,4,'ParseGenerator::generate(JVMState*)')
f(35,7,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(36,7,1,4,'Parse::do_all_blocks()')
f(37,7,1,4,'Parse::do_one_block()')
f(38,7,1,4,'Parse::do_call()')
f(39,7,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(40,7,1,4,'ParseGenerator::generate(JVMState*)')
f(41,7,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(42,7,1,4,'Parse::do_all_blocks()')
f(43,7,1,4,'Parse::do_one_block()')
f(44,7,1,4,'Parse::do_call()')
f(45,7,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(46,7,1,4,'GraphKit::subtype_check_receiver(Node*, ciKlass*, Node**)')
f(47,7,1,4,'GraphKit::gen_subtype_check(Node*, Node*)')
f(48,7,1,4,'PhaseGVN::transform_no_reclaim(Node*)')
f(49,7,1,4,'TypeInt::make(int)')
f(34,8,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(35,8,1,4,'ParseGenerator::generate(JVMState*)')
f(36,8,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(37,8,1,4,'Parse::do_all_blocks()')
f(38,8,1,4,'Parse::do_one_block()')
f(39,8,1,4,'Parse::do_call()')
f(40,8,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(41,8,1,4,'ParseGenerator::generate(JVMState*)')
f(42,8,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(43,8,1,4,'Parse::do_all_blocks()')
f(44,8,1,4,'Parse::do_one_block()')
f(45,8,1,4,'Parse::do_call()')
f(46,8,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(47,8,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(48,8,1,4,'ParseGenerator::generate(JVMState*)')
f(49,8,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(50,8,1,4,'Parse::do_all_blocks()')
f(51,8,1,4,'Parse::do_one_block()')
f(52,8,1,4,'Parse::do_call()')
f(53,8,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(54,8,1,4,'ParseGenerator::generate(JVMState*)')
f(55,8,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(56,8,1,4,'Parse::do_all_blocks()')
f(57,8,1,4,'Parse::do_one_block()')
f(58,8,1,4,'Parse::do_checkcast()')
f(59,8,1,4,'GraphKit::gen_checkcast(Node*, Node*, Node**)')
f(60,8,1,4,'GraphKit::maybe_cast_profiled_receiver(Node*, ciKlass*, ciKlass*, bool)')
f(61,8,1,4,'GraphKit::type_check_receiver(Node*, ciKlass*, float, Node**)')
f(62,8,1,4,'PhaseValues::uncached_makecon(Type const*)')
f(63,8,1,4,'ConPNode::Opcode() const')
f(1,9,2,3,'[unknown_Java]')
f(2,9,1,1,'kyo/bench/ForkManyBench$$anon$3.apply')
f(2,10,1,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(1,11,282,1,'java/lang/Thread.run')
f(2,11,282,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,11,282,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,11,1,1,'java/util/concurrent/FutureTask.run')
f(5,11,1,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,11,1,1,'java/util/concurrent/FutureTask.run')
f(7,11,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,11,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,11,1,1,'java/lang/reflect/Method.invoke')
f(10,11,1,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,11,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,11,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,11,1,1,'kyo/bench/jmh_generated/ForkManyBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,11,1,1,'kyo/bench/jmh_generated/ForkManyBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,11,1,1,'kyo/bench/Bench.syncKyo')
f(16,11,1,1,'kyo/bench/Bench.runLoop$1')
f(17,11,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,11,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,11,1,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,11,1,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,11,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,11,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,11,1,1,'java/util/concurrent/locks/LockSupport.park')
f(24,11,1,1,'jdk/internal/misc/Unsafe.park')
f(25,11,1,3,'[unknown]')
f(26,11,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(4,12,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f4b8.run')
f(5,12,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,12,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,12,1,1,'java/lang/Thread.sleep')
f(8,12,1,3,'[unknown]')
f(9,12,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,12,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,12,1,5,'do_syscall_64')
f(12,12,1,5,'__x64_sys_futex')
f(13,12,1,5,'do_futex')
f(14,12,1,5,'futex_wait')
f(15,12,1,5,'futex_wait_queue_me')
f(16,12,1,5,'schedule')
f(17,12,1,5,'__schedule')
f(18,12,1,5,'finish_task_switch.isra.0')
f(4,13,280,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d243c0.run')
f(5,13,280,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,13,280,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,18,222,1,'kyo/concurrent/scheduler/IOTask.run',35,0,0)
f(8,22,218,1,'kyo/concurrent/scheduler/IOTask.eval',31,0,0)
f(9,42,7,1,'kyo/bench/ForkManyBench$$anon$3.apply')
f(10,44,1,2,'kyo/bench/ForkManyBench$$anon$2.apply',1,0,0)
f(11,44,1,2,'kyo/bench/ForkManyBench$$anon$2.apply',1,0,0)
f(12,44,1,2,'java/util/concurrent/atomic/AtomicInteger.decrementAndGet',1,0,0)
f(10,45,4,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$2',4,0,0)
f(11,45,4,2,'kyo/bench/ForkManyBench$$Lambda$60.0x0000000800d4ae90.apply',4,0,0)
f(12,45,4,2,'kyo/bench/ForkManyBench.$anonfun$adapted$2',4,0,0)
f(13,45,4,2,'kyo/bench/ForkManyBench.$anonfun$5',4,0,0)
f(14,45,4,2,'scala/runtime/BoxesRunTime.boxToBoolean',4,0,0)
f(9,49,174,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,57,158,1,'kyo/bench/ForkManyBench$$anon$1.apply')
f(11,57,158,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',47,0,0)
f(12,74,1,5,'asm_sysvec_hyperv_stimer0')
f(13,74,1,5,'sysvec_hyperv_stimer0')
f(14,74,1,5,'irq_exit_rcu')
f(15,74,1,5,'__irq_exit_rcu')
f(16,74,1,5,'__softirqentry_text_start')
f(12,75,140,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',29,0,0)
f(13,76,136,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply',25,0,0)
f(14,76,136,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',25,0,0)
f(15,88,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(15,89,1,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,89,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(17,89,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(18,89,1,4,'MemAllocator::allocate() const')
f(19,89,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(20,89,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(21,89,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(22,89,1,4,'G1Policy::preventive_collection_required(unsigned int)')
f(15,90,9,2,'kyo/concurrent/scheduler/IOTask.<init>',9,0,0)
f(15,99,113,1,'kyo/concurrent/scheduler/Scheduler$.schedule',4,0,0)
f(16,99,1,2,'kyo/concurrent/scheduler/Scheduler$.submit',1,0,0)
f(17,99,1,2,'kyo/concurrent/scheduler/Worker.enqueue',1,0,0)
f(18,99,1,2,'kyo/concurrent/scheduler/Queue.offer',1,0,0)
f(19,99,1,2,'kyo/concurrent/scheduler/Queue.tryModify',1,0,0)
f(20,99,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(21,99,1,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',1,0,0)
f(22,99,1,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(16,100,112,1,'kyo/concurrent/scheduler/Worker.enqueueLocal',3,0,0)
f(17,102,110,1,'kyo/concurrent/scheduler/Queue.offer',1,0,0)
f(18,103,109,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(19,103,109,1,'scala/Function0.apply$mcZ$sp')
f(20,103,109,1,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d476b8.apply')
f(21,103,109,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1')
f(22,103,109,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,103,33,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize',33,0,0)
f(24,103,33,2,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize',33,0,0)
f(25,103,33,2,'scala/collection/mutable/ArrayBuffer.array_$eq',33,0,0)
f(23,136,76,2,'scala/collection/mutable/PriorityQueue.fixUp',76,0,0)
f(24,150,11,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',11,0,0)
f(25,160,1,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',1,0,0)
f(24,161,50,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_swap',50,0,0)
f(25,204,7,2,'scala/collection/mutable/ArrayBuffer.array',7,0,0)
f(24,211,1,2,'scala/collection/mutable/PriorityQueue.ord',1,0,0)
f(13,212,3,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',3,0,0)
f(14,212,3,2,'kyo/core$internal$KyoCont.<init>',3,0,0)
f(15,212,3,2,'kyo/core$internal$Kyo.<init>',3,0,0)
f(10,215,8,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5',4,0,0)
f(11,215,8,2,'kyo/bench/ForkManyBench$$anon$6.<init>',4,0,0)
f(12,215,8,2,'kyo/core$internal$KyoCont.<init>',4,0,0)
f(13,217,2,6,'kyo/core$internal$KyoCont.effect',0,2,0)
f(13,219,2,6,'kyo/core$internal$KyoCont.value',0,2,0)
f(13,221,2,3,'vtable stub')
f(9,223,5,2,'kyo/concurrent/scheduler/IOTask.loop$8',3,0,0)
f(10,223,5,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',3,0,0)
f(11,223,5,2,'kyo/concurrent/scheduler/IOPromise.complete',3,0,0)
f(12,225,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(13,225,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(14,225,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(12,226,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,226,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,226,2,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,226,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,226,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,226,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,226,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,226,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,226,2,1,'jdk/internal/misc/Unsafe.unpark')
f(21,226,2,3,'pthread_cond_signal')
f(22,226,2,5,'entry_SYSCALL_64_after_hwframe')
f(23,226,2,5,'do_syscall_64')
f(24,226,2,5,'__x64_sys_futex')
f(25,226,2,5,'do_futex')
f(26,226,2,5,'futex_wake')
f(27,226,2,5,'wake_up_q')
f(28,226,2,5,'_raw_spin_unlock_irqrestore')
f(9,228,4,6,'kyo/core$internal$KyoCont.effect',0,4,0)
f(9,232,8,3,'vtable stub')
f(7,240,45,1,'kyo/concurrent/scheduler/Queue.poll',6,0,0)
f(8,242,4,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',4,0,0)
f(9,245,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(8,246,39,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,247,9,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',9,0,0)
f(10,247,9,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',9,0,0)
f(11,251,5,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',5,0,0)
f(9,256,29,2,'kyo/concurrent/scheduler/Queue$$Lambda$64.0x0000000800d4bcc0.apply',29,0,0)
f(10,258,27,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',27,0,0)
f(11,265,7,2,'kyo/concurrent/scheduler/Queue.isEmpty',7,0,0)
f(11,272,13,2,'scala/collection/mutable/PriorityQueue.dequeue',13,0,0)
f(12,281,3,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',3,0,0)
f(12,284,1,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_size0',1,0,0)
f(7,285,1,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,285,1,1,'kyo/concurrent/scheduler/Worker.park')
f(9,285,1,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,285,1,1,'jdk/internal/misc/Unsafe.park')
f(11,285,1,3,'[unknown]')
f(12,285,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,285,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,285,1,5,'do_syscall_64')
f(15,285,1,5,'__x64_sys_futex')
f(16,285,1,5,'do_futex')
f(17,285,1,5,'futex_wait')
f(18,285,1,5,'futex_wait_queue_me')
f(19,285,1,5,'schedule')
f(20,285,1,5,'__schedule')
f(21,285,1,5,'finish_task_switch.isra.0')
f(7,286,7,2,'kyo/concurrent/scheduler/Worker.stop$1',7,0,0)
f(8,286,7,2,'kyo/concurrent/scheduler/Scheduler$.stopWorker',7,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 576px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(36);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,10487,3,'all')
f(1,0,10483,1,'java/lang/Thread.run')
f(2,0,10483,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,10483,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,2160,1,'java/util/concurrent/FutureTask.run')
f(5,0,2160,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,2160,1,'java/util/concurrent/FutureTask.run')
f(7,0,2160,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,2160,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,2160,1,'java/lang/reflect/Method.invoke')
f(10,0,2160,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,2160,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,2160,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,2160,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,2160,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,2160,1,'kyo/bench/Bench.forkKyo')
f(16,0,165,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,165,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,165,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,165,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3e9f8')
f(16,165,149,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,165,149,2,'kyo.bench.Bench$$anon$1')
f(16,314,1353,1,'kyo/bench/Bench.runLoop$2')
f(17,314,663,1,'kyo/bench/Bench$$anon$1.apply')
f(18,314,42,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,314,42,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c82da8.apply')
f(20,314,42,1,'kyo/bench/Bench.$anonfun$2')
f(21,314,42,1,'kyo/concurrent/fibers$Fiber.block')
f(22,314,42,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,356,621,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,356,621,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,356,621,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(21,356,621,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,356,77,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,433,356,2,'kyo.concurrent.scheduler.IOTask')
f(22,789,170,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,789,170,2,'kyo.concurrent.fibers$Fiber')
f(22,959,18,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,959,18,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,959,18,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,959,18,1,'kyo/concurrent/scheduler/Queue.offer')
f(26,959,18,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(27,959,18,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(28,959,18,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(29,959,18,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(30,959,18,2,'kyo.concurrent.scheduler.Queue$$Lambda$54+0x0000000800d43cd0')
f(17,977,690,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,977,690,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,977,690,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,977,690,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,977,291,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,977,291,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,977,101,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,1078,190,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,1078,190,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,1268,166,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,1434,233,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,1434,233,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,1434,233,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,1667,493,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,1667,150,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1667,150,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1667,150,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1667,150,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(17,1817,203,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,1817,203,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,2020,140,1,'kyo/locals$Locals$.save')
f(18,2020,140,2,'kyo.locals$Locals$$anon$3')
f(4,2160,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,2160,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,2160,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,2160,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,2160,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,2160,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,2160,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,2160,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,2170,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,2170,1,2,'java.lang.String')
f(4,2171,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e5f8.run')
f(5,2171,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,2171,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,2171,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,2171,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,2171,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,2171,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$68+0x0000000800d4ba20')
f(4,2182,8301,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,2182,8301,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,2182,8301,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,2182,7916,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,2182,7916,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,2182,3944,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,2182,1141,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,2182,222,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(12,2182,222,1,'kyo/bench/InterruptBench$$Lambda$57.0x0000000800d45460.apply')
f(13,2182,222,1,'kyo/bench/InterruptBench.$anonfun$2')
f(14,2182,222,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(15,2182,222,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(16,2182,222,2,'kyo.concurrent.fibers$Fiber$$anon$11')
f(11,2404,919,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,2404,919,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,2404,919,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(14,2404,919,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,2404,204,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,2608,507,2,'kyo.concurrent.scheduler.IOTask')
f(15,3115,208,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,3115,208,2,'kyo.concurrent.fibers$Fiber')
f(10,3323,1036,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(11,3323,1036,2,'kyo.bench.InterruptBench$$anon$3')
f(10,4359,583,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,4359,402,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(12,4359,402,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$61.0x0000000800d494e8.apply')
f(13,4359,402,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$_$$anonfun$adapted$1')
f(14,4359,402,1,'kyo/concurrent/fibers$.$anonfun$3')
f(15,4359,197,2,'kyo.concurrent.fibers$Fiber')
f(15,4556,205,1,'kyo/concurrent/fibers$Fiber.join')
f(16,4556,205,1,'kyo/concurrent/fibers$Fibers.get')
f(17,4556,205,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(18,4556,205,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(11,4761,181,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(12,4761,181,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(13,4761,181,1,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10')
f(14,4761,181,2,'kyo.concurrent.fibers$Fiber$$anon$13$$anon$14')
f(10,4942,1184,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,4942,1184,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(12,4942,301,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(13,4942,301,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(14,4942,301,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(15,4942,167,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$60+0x0000000800d48fd8')
f(15,5109,134,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$61+0x0000000800d494e8')
f(12,5243,281,2,'kyo.concurrent.scheduler.IOPromise')
f(12,5524,342,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(13,5524,342,2,'kyo.concurrent.fibers$$anon$12')
f(12,5866,260,1,'kyo/concurrent/fibers$Fiber.interrupt')
f(13,5866,260,2,'kyo.concurrent.fibers$Fiber$$anon$13')
f(9,6126,5,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,6126,5,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,6126,5,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e9f8.apply')
f(12,6126,5,1,'kyo/bench/Bench.$anonfun$1')
f(13,6126,5,1,'kyo/bench/InterruptBench.kyoBenchFiber')
f(14,6126,5,1,'kyo/bench/InterruptBench.iterate$2')
f(15,6126,1,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(16,6126,1,2,'kyo.bench.InterruptBench$$anon$2')
f(15,6127,1,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(16,6127,1,2,'kyo.bench.InterruptBench$$anon$3')
f(15,6128,3,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(16,6128,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,6128,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,6128,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,6128,1,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(16,6129,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(17,6129,2,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(9,6131,3049,1,'kyo/concurrent/scheduler/IOTask.finalize$1')
f(10,6131,3049,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$60.0x0000000800d48fd8.apply$mcV$sp')
f(11,6131,3049,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1')
f(12,6131,3049,1,'kyo/concurrent/fibers$.loop$9')
f(13,6131,3049,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(14,6131,3049,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(15,6131,3049,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,6131,3049,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,6131,3049,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,6131,3049,1,'scala/runtime/function/JProcedure1.apply')
f(19,6131,3049,1,'scala/runtime/function/JProcedure1.apply')
f(20,6131,3049,1,'kyo/concurrent/scheduler/IOTask$$Lambda$66.0x0000000800d4b248.applyVoid')
f(21,6131,3049,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(22,6131,528,2,'kyo.concurrent.scheduler.IOTask')
f(22,6659,478,1,'kyo/concurrent/scheduler/IOPromise.become')
f(23,6659,478,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(24,6659,154,1,'kyo/concurrent/scheduler/IOPromise$Linked$.apply')
f(25,6659,154,2,'kyo.concurrent.scheduler.IOPromise$Linked')
f(24,6813,324,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(25,6813,324,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(26,6813,324,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(27,6813,324,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(22,7137,2043,1,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1')
f(23,7137,2043,1,'kyo/concurrent/scheduler/IOTask$$Lambda$67.0x0000000800d4b650.apply')
f(24,7137,2043,1,'kyo/concurrent/scheduler/IOTask.$anonfun$1')
f(25,7137,2043,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(26,7137,2043,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(27,7137,2043,1,'kyo/bench/InterruptBench$$Lambda$58.0x0000000800d44800.apply')
f(28,7137,2043,1,'kyo/bench/InterruptBench.$anonfun$adapted$1')
f(29,7137,2043,1,'kyo/bench/InterruptBench.$anonfun$3')
f(30,7137,2043,1,'kyo/bench/InterruptBench.iterate$2')
f(31,7137,412,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(32,7137,205,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(33,7137,205,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,7137,205,2,'kyo.bench.InterruptBench$$Lambda$56+0x0000000800d47cc8')
f(32,7342,207,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(33,7342,207,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,7342,207,2,'kyo.bench.InterruptBench$$Lambda$58+0x0000000800d44800')
f(31,7549,411,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(32,7549,411,2,'kyo.bench.InterruptBench$$anon$2')
f(31,7960,390,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(32,7960,390,2,'kyo.bench.InterruptBench$$anon$3')
f(31,8350,830,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(32,8350,209,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(33,8350,209,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(34,8350,209,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(35,8350,209,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(32,8559,392,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(33,8559,392,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(32,8951,229,1,'kyo/locals$Locals$.save')
f(33,8951,229,2,'kyo.locals$Locals$$anon$3')
f(9,9180,438,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,9180,169,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,9180,169,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,9180,169,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,9180,169,2,'kyo.concurrent.scheduler.IOTask$$Lambda$62+0x0000000800d4a2d0')
f(10,9349,269,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,9349,269,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(9,9618,480,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,9618,229,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,9618,229,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,9618,229,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,9618,229,2,'kyo.concurrent.scheduler.IOTask$$Lambda$66+0x0000000800d4b248')
f(10,9847,251,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,9847,251,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,10098,385,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,10098,385,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,10098,385,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,10098,385,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,10098,385,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d47148')
f(1,10483,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,10483,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,10483,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,10483,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,10483,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,10483,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,10483,1,1,'jdk/proxy1/$Proxy0.iterationResult')
f(8,10483,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient$$Lambda$8.0x0000000800c01c70.invoke')
f(9,10483,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.lambda$new$0')
f(10,10483,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushFrame')
f(11,10483,1,1,'java/io/ObjectOutputStream.writeObject')
f(12,10483,1,1,'java/io/ObjectOutputStream.writeObject0')
f(13,10483,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(14,10483,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(15,10483,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(16,10483,1,1,'java/io/ObjectOutputStream.writeObject0')
f(17,10483,1,1,'java/io/ObjectOutputStream.writeArray')
f(18,10483,1,1,'java/io/ObjectOutputStream.writeObject0')
f(19,10483,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(20,10483,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(21,10483,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(22,10483,1,1,'java/io/ObjectOutputStream.writeObject0')
f(23,10483,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(24,10483,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(25,10483,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(26,10483,1,1,'java/io/ObjectOutputStream.writeObject0')
f(27,10483,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(28,10483,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(29,10483,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(30,10483,1,1,'java/io/ObjectOutputStream.writeObject0')
f(31,10483,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(32,10483,1,1,'java/io/ObjectOutputStream$HandleTable.assign')
f(33,10483,1,1,'java/io/ObjectOutputStream$HandleTable.growEntries')
f(34,10483,1,2,'int[]')
f(7,10484,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,10484,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,10484,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,10484,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,10484,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,10484,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,10484,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,287,3,'all')
f(1,0,2,3,'[unknown_Java]')
f(2,0,1,1,'kyo/concurrent/scheduler/IOTask.eval')
f(2,1,1,1,'kyo/ios$KyoIO.effect')
f(1,2,285,1,'java/lang/Thread.run')
f(2,2,285,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,2,285,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,2,6,1,'java/util/concurrent/FutureTask.run')
f(5,2,6,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,2,6,1,'java/util/concurrent/FutureTask.run')
f(7,2,6,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,2,6,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,2,6,1,'java/lang/reflect/Method.invoke')
f(10,2,6,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,2,6,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,2,6,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,2,6,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,2,6,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,2,6,1,'kyo/bench/Bench.forkKyo')
f(16,2,6,1,'kyo/bench/Bench.runLoop$2')
f(17,2,2,1,'kyo/bench/Bench$$anon$1.apply')
f(18,2,2,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,2,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,2,2,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(21,2,2,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,2,2,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,2,2,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,2,2,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,2,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,2,2,1,'jdk/internal/misc/Unsafe.unpark')
f(27,2,2,3,'pthread_cond_signal')
f(28,2,2,5,'entry_SYSCALL_64_after_hwframe')
f(29,2,2,5,'do_syscall_64')
f(30,2,2,5,'__x64_sys_futex')
f(31,2,2,5,'do_futex')
f(32,2,2,5,'futex_wake')
f(33,2,2,5,'wake_up_q')
f(34,2,2,5,'_raw_spin_unlock_irqrestore')
f(17,4,4,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,4,4,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,4,4,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,4,4,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,4,4,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,4,4,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,4,4,1,'java/util/concurrent/locks/LockSupport.park')
f(24,4,4,1,'jdk/internal/misc/Unsafe.park')
f(25,4,4,3,'[unknown]')
f(26,4,4,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,4,4,5,'entry_SYSCALL_64_after_hwframe')
f(28,4,4,5,'do_syscall_64')
f(29,4,4,5,'__x64_sys_futex')
f(30,4,4,5,'do_futex')
f(31,5,3,5,'futex_wait')
f(32,6,1,5,'futex_wait_queue_me')
f(33,6,1,5,'schedule')
f(34,6,1,5,'__schedule')
f(35,6,1,5,'finish_task_switch.isra.0')
f(32,7,1,5,'futex_wait_setup')
f(4,8,279,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,8,279,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,8,279,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,13,8,2,'kyo/concurrent/scheduler/IOTask.reenqueue',8,0,0)
f(8,13,8,2,'kyo/concurrent/scheduler/IOTask.curr',8,0,0)
f(7,21,230,1,'kyo/concurrent/scheduler/IOTask.run',15,0,0)
f(8,23,3,1,'jdk/internal/misc/Unsafe.park')
f(9,23,3,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,23,3,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',3,0,0)
f(11,23,3,2,'scala/runtime/BoxesRunTime.unboxToBoolean',3,0,0)
f(8,26,9,2,'kyo/concurrent/scheduler/Coordinator$.tick',9,0,0)
f(8,35,4,2,'kyo/concurrent/scheduler/IOTask.curr',4,0,0)
f(8,39,212,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,50,90,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,51,29,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,52,1,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1',1,0,0)
f(11,53,27,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',1,0,0)
f(12,54,26,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,60,11,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply',11,0,0)
f(14,60,11,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',11,0,0)
f(15,64,7,2,'kyo/concurrent/scheduler/IOTask.<init>',7,0,0)
f(16,69,2,2,'kyo/concurrent/scheduler/IOPromise.<init>',2,0,0)
f(17,70,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(18,70,1,2,'java/util/concurrent/atomic/AtomicReference.<init>',1,0,0)
f(19,70,1,2,'java/lang/Object.<init>',1,0,0)
f(13,71,9,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',9,0,0)
f(14,76,4,2,'kyo/core$internal$KyoCont.<init>',4,0,0)
f(10,80,31,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',22,0,0)
f(11,92,19,2,'kyo/bench/InterruptBench$$anon$3.<init>',10,0,0)
f(12,93,18,2,'kyo/core$internal$KyoCont.<init>',9,0,0)
f(13,99,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(13,100,3,6,'kyo/core$internal$KyoCont.value',0,3,0)
f(13,103,3,6,'kyo/core$internal$KyoRoot.effect',0,3,0)
f(13,106,2,6,'kyo/core$internal$KyoRoot.value',0,2,0)
f(13,108,3,3,'vtable stub')
f(10,111,13,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,112,12,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',12,0,0)
f(12,112,12,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',12,0,0)
f(13,112,12,2,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10',12,0,0)
f(14,114,10,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',10,0,0)
f(15,114,10,2,'kyo/concurrent/scheduler/IOPromise.complete',10,0,0)
f(16,114,8,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',8,0,0)
f(17,114,8,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',8,0,0)
f(18,114,8,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',8,0,0)
f(16,122,2,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',2,0,0)
f(17,122,2,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',2,0,0)
f(10,124,14,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,125,13,2,'kyo/concurrent/fibers$Fiber$$anon$11.apply',12,0,0)
f(12,128,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(13,128,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(14,128,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(12,129,5,2,'kyo/concurrent/scheduler/IOPromise.<init>',5,0,0)
f(13,129,5,2,'kyo/concurrent/scheduler/IOPromise.<init>',5,0,0)
f(14,129,5,2,'java/util/concurrent/atomic/AtomicReference.<init>',5,0,0)
f(12,134,4,2,'kyo/concurrent/scheduler/IOTask.ensure',3,0,0)
f(13,134,3,2,'kyo/concurrent/scheduler/IOTask.curr',3,0,0)
f(13,137,1,1,'scala/runtime/BoxesRunTime.equals')
f(14,137,1,1,'scala/runtime/BoxesRunTime.equals2')
f(15,137,1,1,'java/lang/Object.equals')
f(10,138,2,3,'vtable stub')
f(9,140,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,140,1,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',1,0,0)
f(11,140,1,2,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e9f8.apply',1,0,0)
f(12,140,1,2,'kyo/bench/Bench.$anonfun$1',1,0,0)
f(13,140,1,2,'kyo/bench/InterruptBench.kyoBenchFiber',1,0,0)
f(14,140,1,2,'kyo/bench/InterruptBench.iterate$2',1,0,0)
f(15,140,1,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',1,0,0)
f(16,140,1,2,'kyo/bench/InterruptBench$$anon$3.<init>',1,0,0)
f(17,140,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(9,141,1,2,'kyo/concurrent/scheduler/Coordinator$.tick',1,0,0)
f(9,142,70,1,'kyo/concurrent/scheduler/IOTask.finalize$1',10,0,0)
f(10,142,69,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$60.0x0000000800d48fb0.apply$mcV$sp',9,0,0)
f(11,142,69,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1',9,0,0)
f(12,142,69,1,'kyo/concurrent/fibers$.loop$9',9,0,0)
f(13,142,62,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',2,0,0)
f(14,142,62,1,'kyo/concurrent/scheduler/IOPromise.complete',2,0,0)
f(15,142,2,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',2,0,0)
f(16,142,2,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',2,0,0)
f(17,142,2,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',2,0,0)
f(15,144,59,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,144,59,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,144,59,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,144,59,1,'scala/runtime/function/JProcedure1.apply')
f(19,146,57,1,'scala/runtime/function/JProcedure1.apply')
f(20,148,55,1,'kyo/concurrent/scheduler/IOTask$$Lambda$67.0x0000000800d4b4e0.applyVoid')
f(21,148,55,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',31,0,0)
f(22,149,2,2,'kyo/concurrent/scheduler/IOTask.<init>',2,0,0)
f(23,149,2,2,'kyo/concurrent/scheduler/IOPromise.<init>',2,0,0)
f(24,149,2,2,'kyo/concurrent/scheduler/IOPromise.<init>',2,0,0)
f(25,149,2,2,'java/util/concurrent/atomic/AtomicReference.<init>',2,0,0)
f(22,151,48,2,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1',24,0,0)
f(23,154,45,2,'kyo/concurrent/scheduler/IOTask$$Lambda$68.0x0000000800d4b8e8.apply',21,0,0)
f(24,160,39,2,'kyo/concurrent/scheduler/IOTask.$anonfun$1',15,0,0)
f(25,160,39,2,'kyo/bench/InterruptBench$$anon$3.apply',15,0,0)
f(26,161,35,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',14,0,0)
f(27,166,23,1,'kyo/bench/InterruptBench$$Lambda$58.0x0000000800d44400.apply',2,0,0)
f(28,168,21,1,'kyo/bench/InterruptBench.$anonfun$adapted$1')
f(29,168,21,1,'kyo/bench/InterruptBench.$anonfun$3')
f(30,168,21,1,'kyo/bench/InterruptBench.iterate$2')
f(31,168,2,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1',2,0,0)
f(31,170,16,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',12,0,0)
f(32,173,13,2,'kyo/bench/InterruptBench$$anon$3.<init>',9,0,0)
f(33,173,13,2,'kyo/core$internal$KyoCont.<init>',9,0,0)
f(34,182,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(34,183,3,6,'kyo/core$internal$KyoCont.value',0,3,0)
f(31,186,3,2,'kyo/concurrent/fibers$Fibers.forkFiber',2,0,0)
f(32,186,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(33,186,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',2,0,0)
f(34,186,2,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',2,0,0)
f(32,188,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(27,189,7,2,'kyo/bench/InterruptBench$$anon$3.<init>',7,0,0)
f(28,189,7,2,'kyo/core$internal$KyoCont.<init>',7,0,0)
f(26,196,3,1,'kyo/core$internal$KyoRoot.apply')
f(22,199,4,2,'kyo/concurrent/scheduler/Scheduler$.schedule',4,0,0)
f(23,199,4,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',4,0,0)
f(24,199,4,2,'kyo/concurrent/scheduler/Queue.offer',4,0,0)
f(25,199,4,2,'kyo/concurrent/scheduler/Queue.tryModify',4,0,0)
f(26,199,4,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',4,0,0)
f(27,199,4,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',4,0,0)
f(28,201,2,2,'java/lang/invoke/VarForm.getMemberName',2,0,0)
f(15,203,1,1,'kyo/concurrent/scheduler/IOPromise.onComplete')
f(13,204,7,2,'scala/runtime/BoxesRunTime.boxToBoolean',7,0,0)
f(10,211,1,2,'kyo/concurrent/scheduler/IOTask.ensures_$eq',1,0,0)
f(9,212,2,2,'kyo/concurrent/scheduler/IOTask.loop$2',2,0,0)
f(10,212,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(11,212,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(12,212,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(10,213,1,2,'kyo/concurrent/scheduler/IOPromise$Pending.add',1,0,0)
f(9,214,9,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,219,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(11,219,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(10,220,2,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',2,0,0)
f(11,220,2,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',2,0,0)
f(12,220,2,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',2,0,0)
f(10,222,1,2,'kyo/concurrent/scheduler/Scheduler$.schedule',1,0,0)
f(11,222,1,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',1,0,0)
f(12,222,1,2,'kyo/concurrent/scheduler/Queue.offer',1,0,0)
f(13,222,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(14,222,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(15,222,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(9,223,20,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,223,20,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',6,0,0)
f(11,223,20,1,'kyo/concurrent/scheduler/IOPromise.complete',6,0,0)
f(12,223,20,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush',6,0,0)
f(13,223,20,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',6,0,0)
f(14,227,16,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run',2,0,0)
f(15,227,2,3,'itable stub')
f(15,229,6,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,229,6,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,229,6,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,229,6,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,229,6,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,229,6,1,'jdk/internal/misc/Unsafe.unpark')
f(21,229,6,3,'pthread_cond_signal')
f(22,229,6,5,'entry_SYSCALL_64_after_hwframe')
f(23,229,6,5,'do_syscall_64')
f(24,229,6,5,'__x64_sys_futex')
f(25,229,6,5,'do_futex')
f(26,229,6,5,'futex_wake')
f(27,229,6,5,'wake_up_q')
f(28,229,6,5,'_raw_spin_unlock_irqrestore')
f(15,235,8,1,'scala/runtime/function/JProcedure1.apply')
f(16,240,3,1,'scala/runtime/function/JProcedure1.apply')
f(17,242,1,2,'kyo/concurrent/scheduler/IOTask$$Lambda$62.0x0000000800d4a2a8.applyVoid',1,0,0)
f(18,242,1,2,'kyo/concurrent/scheduler/IOTask.loop$2$$anonfun$1',1,0,0)
f(19,242,1,2,'kyo/concurrent/scheduler/IOTask.loop$3',1,0,0)
f(20,242,1,2,'java/util/concurrent/atomic/AtomicReference.get',1,0,0)
f(9,243,4,6,'kyo/core$internal$KyoCont.effect',0,4,0)
f(9,247,2,1,'scala/runtime/function/JProcedure1.apply')
f(10,247,1,1,'kyo/ios$KyoIO.value')
f(10,248,1,1,'scala/runtime/function/JProcedure1.apply')
f(9,249,2,3,'vtable stub')
f(7,251,31,1,'kyo/concurrent/scheduler/Queue.poll',2,0,0)
f(8,251,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(9,251,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',2,0,0)
f(8,253,29,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,257,14,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',14,0,0)
f(10,261,10,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',10,0,0)
f(11,266,5,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',5,0,0)
f(12,268,3,2,'java/util/Objects.requireNonNull',3,0,0)
f(9,271,11,2,'kyo/concurrent/scheduler/Queue$$Lambda$59.0x0000000800d48af0.apply',11,0,0)
f(10,271,11,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',11,0,0)
f(11,271,11,2,'scala/collection/mutable/PriorityQueue.dequeue',11,0,0)
f(12,275,7,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',7,0,0)
f(7,282,4,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,282,4,1,'kyo/concurrent/scheduler/Worker.park')
f(9,282,4,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,282,4,1,'jdk/internal/misc/Unsafe.park')
f(11,282,1,3,'Unsafe_Park')
f(12,282,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,282,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,282,1,5,'__x64_sys_futex')
f(11,283,3,3,'[unknown]')
f(12,283,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,283,2,5,'entry_SYSCALL_64_after_hwframe')
f(14,283,2,5,'do_syscall_64')
f(15,283,2,5,'__x64_sys_futex')
f(16,283,2,5,'do_futex')
f(17,283,2,5,'futex_wait')
f(18,283,1,5,'__get_user_nocheck_4')
f(18,284,1,5,'futex_wait_queue_me')
f(19,284,1,5,'schedule')
f(20,284,1,5,'__schedule')
f(21,284,1,5,'finish_task_switch.isra.0')
f(12,285,1,3,'pthread_cond_timedwait')
f(7,286,1,2,'kyo/concurrent/scheduler/Worker.stop$1',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: 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,9183,3,'all')
f(1,0,9180,1,'java/lang/Thread.run')
f(2,0,9180,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,9180,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,1802,1,'java/util/concurrent/FutureTask.run')
f(5,0,1802,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,1802,1,'java/util/concurrent/FutureTask.run')
f(7,0,1802,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,1802,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1802,1,'java/lang/reflect/Method.invoke')
f(10,0,1802,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,1802,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,1802,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,1802,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,1802,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,1802,1,'kyo/bench/Bench.syncKyo')
f(16,0,1270,1,'kyo/bench/Bench.runLoop$1')
f(17,0,970,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,970,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,970,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,970,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,93,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,93,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,49,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,49,44,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,49,44,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,93,282,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,375,595,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,375,595,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,375,595,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,970,300,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,970,238,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,970,238,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,970,238,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,970,183,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,970,183,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,970,183,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(24,970,183,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,970,24,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(25,994,118,2,'kyo.concurrent.scheduler.IOTask')
f(25,1112,41,1,'kyo/concurrent/fibers$Fiber$.promise')
f(26,1112,41,2,'kyo.concurrent.fibers$Fiber')
f(21,1153,55,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,1153,55,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c82da8.apply')
f(23,1153,55,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,1153,55,1,'kyo/concurrent/fibers$Fiber.join')
f(25,1153,55,1,'kyo/concurrent/fibers$Fibers.get')
f(26,1153,55,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,1153,55,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,1208,62,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,1208,62,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c835a8.apply')
f(20,1208,62,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,1208,62,1,'kyo/concurrent/fibers$Fiber.block')
f(22,1208,62,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,1270,532,1,'kyo/bench/InterruptBench.kyoBench')
f(17,1270,51,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1270,51,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1270,51,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1270,51,2,'kyo.bench.InterruptBench$$Lambda$37+0x0000000800c3e9f8')
f(17,1321,223,1,'kyo/concurrent/fibers$Fibers.block')
f(18,1321,22,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,1321,22,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,1321,22,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,1321,22,2,'kyo.concurrent.fibers$Fibers$$Lambda$40+0x0000000800c835a8')
f(18,1343,27,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,1343,27,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,1370,106,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,1370,106,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,1476,68,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,1476,68,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,1544,258,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,1544,41,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,1544,41,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,1544,41,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,1544,41,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c82da8')
f(18,1585,161,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,1585,56,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,1585,56,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,1585,56,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,1585,56,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(19,1641,73,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,1641,73,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(19,1714,32,1,'kyo/locals$Locals$.save')
f(20,1714,32,2,'kyo.locals$Locals$$anon$3')
f(18,1746,56,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,1746,56,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(4,1802,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec28.run')
f(5,1802,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,1802,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,1802,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,1802,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,1802,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,1802,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,1802,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,1812,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,1812,1,2,'java.lang.String')
f(4,1813,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1ee50.run')
f(5,1813,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,1813,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,1813,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,1813,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,1813,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,1813,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$71+0x0000000800d4ea98')
f(4,1824,7356,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23cb0.run')
f(5,1824,7356,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,1824,7356,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,1824,6993,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,1824,6993,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,1824,3491,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,1824,928,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,1824,191,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(12,1824,191,1,'kyo/bench/InterruptBench$$Lambda$58.0x0000000800d44400.apply')
f(13,1824,191,1,'kyo/bench/InterruptBench.$anonfun$2')
f(14,1824,191,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(15,1824,191,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(16,1824,191,2,'kyo.concurrent.fibers$Fiber$$anon$11')
f(11,2015,737,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,2015,737,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,2015,737,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(14,2015,737,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,2015,178,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,2193,411,2,'kyo.concurrent.scheduler.IOTask')
f(15,2604,148,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,2604,148,2,'kyo.concurrent.fibers$Fiber')
f(10,2752,964,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(11,2752,964,2,'kyo.bench.InterruptBench$$anon$3')
f(10,3716,557,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,3716,375,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(12,3716,375,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$62.0x0000000800d49f10.apply')
f(13,3716,375,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$_$$anonfun$adapted$1')
f(14,3716,375,1,'kyo/concurrent/fibers$.$anonfun$3')
f(15,3716,202,2,'kyo.concurrent.fibers$Fiber')
f(15,3918,173,1,'kyo/concurrent/fibers$Fiber.join')
f(16,3918,173,1,'kyo/concurrent/fibers$Fibers.get')
f(17,3918,173,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(18,3918,173,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(11,4091,182,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(12,4091,182,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(13,4091,182,1,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10')
f(14,4091,182,2,'kyo.concurrent.fibers$Fiber$$anon$13$$anon$14')
f(10,4273,1042,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,4273,1042,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(12,4273,273,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(13,4273,273,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(14,4273,273,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(15,4273,152,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$61+0x0000000800d49a00')
f(15,4425,121,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$62+0x0000000800d49f10')
f(12,4546,241,2,'kyo.concurrent.scheduler.IOPromise')
f(12,4787,286,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(13,4787,286,2,'kyo.concurrent.fibers$$anon$12')
f(12,5073,242,1,'kyo/concurrent/fibers$Fiber.interrupt')
f(13,5073,242,2,'kyo.concurrent.fibers$Fiber$$anon$13')
f(9,5315,3,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,5315,3,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,5315,3,1,'kyo/bench/InterruptBench$$Lambda$37.0x0000000800c3e9f8.apply')
f(12,5315,3,1,'kyo/bench/InterruptBench.kyoBench$$anonfun$1')
f(13,5315,3,1,'kyo/bench/InterruptBench.kyoBenchFiber')
f(14,5315,3,1,'kyo/bench/InterruptBench.iterate$2')
f(15,5315,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,5315,1,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(17,5315,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,5315,1,2,'kyo.bench.InterruptBench$$Lambda$59+0x0000000800d488b0')
f(15,5316,2,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(16,5316,2,2,'kyo.bench.InterruptBench$$anon$3')
f(9,5318,2643,1,'kyo/concurrent/scheduler/IOTask.finalize$1')
f(10,5318,2643,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$61.0x0000000800d49a00.apply$mcV$sp')
f(11,5318,2643,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1')
f(12,5318,2643,1,'kyo/concurrent/fibers$.loop$9')
f(13,5318,2643,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(14,5318,2643,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(15,5318,2643,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,5318,2643,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,5318,2643,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,5318,2643,1,'scala/runtime/function/JProcedure1.apply')
f(19,5318,2643,1,'scala/runtime/function/JProcedure1.apply')
f(20,5318,2643,1,'kyo/concurrent/scheduler/IOTask$$Lambda$69.0x0000000800d4e2c0.applyVoid')
f(21,5318,2643,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(22,5318,472,2,'kyo.concurrent.scheduler.IOTask')
f(22,5790,453,1,'kyo/concurrent/scheduler/IOPromise.become')
f(23,5790,453,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(24,5790,146,1,'kyo/concurrent/scheduler/IOPromise$Linked$.apply')
f(25,5790,146,2,'kyo.concurrent.scheduler.IOPromise$Linked')
f(24,5936,307,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(25,5936,307,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(26,5936,307,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(27,5936,307,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(22,6243,1718,1,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1')
f(23,6243,1718,1,'kyo/concurrent/scheduler/IOTask$$Lambda$70.0x0000000800d4e6c8.apply')
f(24,6243,1718,1,'kyo/concurrent/scheduler/IOTask.$anonfun$1')
f(25,6243,1718,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(26,6243,1718,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(27,6243,1718,1,'kyo/bench/InterruptBench$$Lambda$59.0x0000000800d488b0.apply')
f(28,6243,1718,1,'kyo/bench/InterruptBench.$anonfun$adapted$1')
f(29,6243,1718,1,'kyo/bench/InterruptBench.$anonfun$3')
f(30,6243,1718,1,'kyo/bench/InterruptBench.iterate$2')
f(31,6243,339,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(32,6243,176,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(33,6243,176,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,6243,176,2,'kyo.bench.InterruptBench$$Lambda$57+0x0000000800d458c0')
f(32,6419,163,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(33,6419,163,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,6419,163,2,'kyo.bench.InterruptBench$$Lambda$59+0x0000000800d488b0')
f(31,6582,357,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(32,6582,357,2,'kyo.bench.InterruptBench$$anon$2')
f(31,6939,337,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(32,6939,337,2,'kyo.bench.InterruptBench$$anon$3')
f(31,7276,685,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(32,7276,169,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(33,7276,169,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(34,7276,169,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(35,7276,169,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(32,7445,315,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(33,7445,315,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(32,7760,201,1,'kyo/locals$Locals$.save')
f(33,7760,201,2,'kyo.locals$Locals$$anon$3')
f(9,7961,394,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,7961,152,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,7961,152,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,7961,152,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,7961,152,2,'kyo.concurrent.scheduler.IOTask$$Lambda$63+0x0000000800d4acf8')
f(10,8113,242,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,8113,242,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(9,8355,462,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,8355,223,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,8355,223,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,8355,223,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,8355,223,2,'kyo.concurrent.scheduler.IOTask$$Lambda$69+0x0000000800d4e2c0')
f(10,8578,239,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,8578,239,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,8817,363,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,8817,363,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,8817,363,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,8817,363,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,8817,363,2,'kyo.concurrent.scheduler.Queue$$Lambda$56+0x0000000800d47ca0')
f(1,9180,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,9180,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,9180,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,9180,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,9180,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,9180,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,9180,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,9180,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,9180,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,9180,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,9180,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,9180,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,9180,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: 624px}
</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(39);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,288,3,'all')
f(1,0,1,3,'[unknown_Java]')
f(2,0,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(1,1,287,1,'java/lang/Thread.run')
f(2,1,287,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,1,287,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,1,6,1,'java/util/concurrent/FutureTask.run')
f(5,1,6,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,1,6,1,'java/util/concurrent/FutureTask.run')
f(7,1,6,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,1,6,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,1,6,1,'java/lang/reflect/Method.invoke')
f(10,1,6,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,1,6,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,1,6,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,1,6,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,1,6,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,1,6,1,'kyo/bench/Bench.syncKyo')
f(16,1,6,1,'kyo/bench/Bench.runLoop$1')
f(17,1,2,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,1,2,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,1,2,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,1,2,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,1,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,1,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,1,2,1,'java/util/concurrent/locks/LockSupport.park')
f(24,1,2,1,'jdk/internal/misc/Unsafe.park')
f(25,1,2,3,'[unknown]')
f(26,1,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,1,2,5,'entry_SYSCALL_64_after_hwframe')
f(28,1,2,5,'do_syscall_64')
f(29,1,1,5,'__x64_sys_futex')
f(30,1,1,5,'do_futex')
f(31,1,1,5,'futex_wait')
f(32,1,1,5,'futex_wait_queue_me')
f(33,1,1,5,'schedule')
f(34,1,1,5,'__schedule')
f(35,1,1,5,'finish_task_switch.isra.0')
f(29,2,1,5,'syscall_exit_to_user_mode')
f(30,2,1,5,'exit_to_user_mode_prepare')
f(31,2,1,5,'exit_to_user_mode_loop')
f(32,2,1,5,'__rseq_handle_notify_resume')
f(17,3,4,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,3,4,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,3,4,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,3,4,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,3,4,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,3,4,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,3,4,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(24,3,4,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,3,4,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,3,4,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,3,4,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(28,3,4,1,'java/util/concurrent/locks/LockSupport.unpark')
f(29,3,4,1,'jdk/internal/misc/Unsafe.unpark')
f(30,3,4,3,'pthread_cond_signal')
f(31,3,4,5,'entry_SYSCALL_64_after_hwframe')
f(32,3,4,5,'do_syscall_64')
f(33,4,3,5,'__x64_sys_futex')
f(34,4,3,5,'do_futex')
f(35,4,3,5,'futex_wake')
f(36,4,3,5,'wake_up_q')
f(37,4,3,5,'_raw_spin_unlock_irqrestore')
f(4,7,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec28.run')
f(5,7,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,7,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,7,1,1,'java/lang/Thread.sleep')
f(8,7,1,3,'[unknown]')
f(9,7,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,7,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,7,1,5,'do_syscall_64')
f(12,7,1,5,'__x64_sys_futex')
f(13,7,1,5,'do_futex')
f(14,7,1,5,'futex_wait')
f(15,7,1,5,'futex_wait_queue_me')
f(16,7,1,5,'schedule')
f(17,7,1,5,'__schedule')
f(18,7,1,5,'finish_task_switch.isra.0')
f(4,8,280,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23cb0.run')
f(5,8,280,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,8,280,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,22,8,2,'kyo/concurrent/scheduler/IOTask.reenqueue',8,0,0)
f(8,22,8,2,'kyo/concurrent/scheduler/IOTask.curr',8,0,0)
f(7,30,228,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,33,2,2,'kyo/concurrent/scheduler/Coordinator$.tick',2,0,0)
f(8,35,2,2,'kyo/concurrent/scheduler/IOTask.curr',2,0,0)
f(8,37,221,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,39,96,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,44,34,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,45,3,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1',3,0,0)
f(12,47,1,2,'kyo/bench/InterruptBench$$Lambda$58.0x0000000800d44800.apply',1,0,0)
f(13,47,1,2,'kyo/bench/InterruptBench.$anonfun$2',1,0,0)
f(14,47,1,2,'kyo/concurrent/fibers$Fiber.interruptAwait',1,0,0)
f(15,47,1,2,'kyo/concurrent/fibers$Fiber.interruptAwait',1,0,0)
f(11,48,30,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,48,30,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,52,19,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply',19,0,0)
f(14,52,19,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',19,0,0)
f(15,57,2,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',2,0,0)
f(16,57,2,2,'kyo/ios$KyoIO.<init>',2,0,0)
f(15,59,9,2,'kyo/concurrent/scheduler/IOTask.<init>',9,0,0)
f(16,64,4,2,'kyo/concurrent/scheduler/IOPromise.<init>',4,0,0)
f(17,66,1,2,'kyo/concurrent/scheduler/IOPromise$Pending$.apply',1,0,0)
f(17,67,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(18,67,1,2,'java/util/concurrent/atomic/AtomicReference.<init>',1,0,0)
f(19,67,1,2,'java/lang/Object.<init>',1,0,0)
f(15,68,3,2,'kyo/concurrent/scheduler/Scheduler$.schedule',3,0,0)
f(13,71,7,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',7,0,0)
f(10,78,19,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',14,0,0)
f(11,82,15,2,'kyo/bench/InterruptBench$$anon$3.<init>',10,0,0)
f(12,83,14,2,'kyo/core$internal$KyoCont.<init>',9,0,0)
f(13,88,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(13,89,2,6,'kyo/core$internal$KyoRoot.effect',0,2,0)
f(13,91,1,6,'kyo/core$internal$KyoRoot.value',0,1,0)
f(13,92,1,1,'kyo/ios$KyoIO.effect')
f(13,93,4,3,'vtable stub')
f(10,97,18,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,98,2,2,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1',1,0,0)
f(12,98,2,2,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$62.0x0000000800d49f40.apply',1,0,0)
f(13,98,2,2,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$_$$anonfun$adapted$1',1,0,0)
f(14,98,2,2,'kyo/concurrent/fibers$.$anonfun$3',1,0,0)
f(15,98,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(16,98,1,4,'AccessInternal::PostRuntimeDispatch<G1BarrierSet::AccessBarrier<598116ul, G1BarrierSet>, (AccessInternal::BarrierType)2, 598116ul>::oop_access_barrier(void*)')
f(15,99,1,2,'kyo/concurrent/fibers$Fiber.join',1,0,0)
f(16,99,1,2,'kyo/concurrent/fibers$Fibers.get',1,0,0)
f(17,99,1,2,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1',1,0,0)
f(11,100,15,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',15,0,0)
f(12,100,15,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',15,0,0)
f(13,102,13,2,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10',13,0,0)
f(14,102,13,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',13,0,0)
f(15,102,13,2,'kyo/concurrent/scheduler/IOPromise.complete',13,0,0)
f(16,102,10,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',10,0,0)
f(17,102,10,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',10,0,0)
f(18,102,10,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',10,0,0)
f(16,112,3,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',3,0,0)
f(17,112,3,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',3,0,0)
f(10,115,18,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,116,17,2,'kyo/concurrent/fibers$Fiber$$anon$11.apply',14,0,0)
f(12,117,3,2,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1',3,0,0)
f(13,119,1,2,'kyo/concurrent/fibers$$anon$12.<init>',1,0,0)
f(12,120,1,2,'kyo/concurrent/fibers$Fiber.interrupt',1,0,0)
f(12,121,4,2,'kyo/concurrent/scheduler/IOPromise.<init>',4,0,0)
f(13,121,4,2,'kyo/concurrent/scheduler/IOPromise.<init>',4,0,0)
f(14,121,4,2,'java/util/concurrent/atomic/AtomicReference.<init>',4,0,0)
f(12,125,8,2,'kyo/concurrent/scheduler/IOTask.ensure',5,0,0)
f(13,125,1,2,'kyo/concurrent/scheduler/IOTask.curr',1,0,0)
f(13,126,4,2,'kyo/concurrent/scheduler/IOTask.ensures_$eq',4,0,0)
f(13,130,3,1,'scala/runtime/BoxesRunTime.equals')
f(14,130,3,1,'scala/runtime/BoxesRunTime.equals2')
f(15,130,3,1,'java/lang/Object.equals')
f(10,133,2,3,'vtable stub')
f(9,135,92,1,'kyo/concurrent/scheduler/IOTask.finalize$1',22,0,0)
f(10,135,92,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$61.0x0000000800d49a30.apply$mcV$sp',22,0,0)
f(11,135,92,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1',22,0,0)
f(12,135,92,1,'kyo/concurrent/fibers$.loop$9',22,0,0)
f(13,135,70,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(14,135,70,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(15,135,70,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,135,70,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,135,70,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,135,1,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(19,135,1,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(20,135,1,1,'kyo/bench/InterruptBench$$anon$3.<init>')
f(21,135,1,1,'kyo/core$internal$KyoCont.<init>')
f(22,135,1,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(23,135,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(24,135,1,1,'kyo/bench/InterruptBench.iterate$2')
f(25,135,1,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1',1,0,0)
f(18,136,69,1,'scala/runtime/function/JProcedure1.apply')
f(19,138,67,1,'scala/runtime/function/JProcedure1.apply')
f(20,138,67,1,'kyo/concurrent/scheduler/IOTask$$Lambda$67.0x0000000800d4e000.applyVoid')
f(21,139,66,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',32,0,0)
f(22,139,1,2,'kyo/concurrent/scheduler/IOTask.<init>',1,0,0)
f(23,139,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(24,139,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(25,139,1,2,'java/util/concurrent/atomic/AtomicReference.<init>',1,0,0)
f(22,140,63,2,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1',29,0,0)
f(23,142,61,2,'kyo/concurrent/scheduler/IOTask$$Lambda$68.0x0000000800d4e408.apply',27,0,0)
f(24,145,58,2,'kyo/concurrent/scheduler/IOTask.$anonfun$1',24,0,0)
f(25,145,58,2,'kyo/bench/InterruptBench$$anon$3.apply',24,0,0)
f(26,145,58,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',24,0,0)
f(27,151,40,1,'kyo/bench/InterruptBench$$Lambda$59.0x0000000800d48230.apply',6,0,0)
f(28,156,35,1,'kyo/bench/InterruptBench.$anonfun$adapted$1',1,0,0)
f(29,156,35,1,'kyo/bench/InterruptBench.$anonfun$3',1,0,0)
f(30,157,34,1,'kyo/bench/InterruptBench.iterate$2')
f(31,157,3,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',3,0,0)
f(32,157,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(33,157,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(32,158,2,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial',2,0,0)
f(33,158,2,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',2,0,0)
f(31,160,3,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1',3,0,0)
f(31,163,20,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',14,0,0)
f(32,167,16,2,'kyo/bench/InterruptBench$$anon$3.<init>',10,0,0)
f(33,167,16,2,'kyo/core$internal$KyoCont.<init>',10,0,0)
f(34,177,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(34,178,5,6,'kyo/core$internal$KyoCont.value',0,5,0)
f(31,183,8,2,'kyo/concurrent/fibers$Fibers.forkFiber',5,0,0)
f(32,185,3,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',3,0,0)
f(33,185,3,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',3,0,0)
f(34,185,3,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',3,0,0)
f(32,188,3,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(33,188,3,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply',3,0,0)
f(34,190,1,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',1,0,0)
f(35,190,1,2,'kyo/concurrent/scheduler/IOTask.<init>',1,0,0)
f(36,190,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(37,190,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(38,190,1,2,'java/util/concurrent/atomic/AtomicReference.<init>',1,0,0)
f(27,191,12,2,'kyo/bench/InterruptBench$$anon$3.<init>',12,0,0)
f(28,193,10,2,'kyo/core$internal$KyoCont.<init>',10,0,0)
f(22,203,2,2,'kyo/concurrent/scheduler/Scheduler$.schedule',2,0,0)
f(23,203,2,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',2,0,0)
f(24,203,2,2,'kyo/concurrent/scheduler/Queue.offer',2,0,0)
f(25,203,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(26,203,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(27,203,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(25,204,1,2,'kyo/concurrent/scheduler/Queue.tryModify',1,0,0)
f(26,204,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(27,204,1,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',1,0,0)
f(28,204,1,2,'java/lang/invoke/VarForm.getMemberName',1,0,0)
f(13,205,22,2,'scala/runtime/BoxesRunTime.boxToBoolean',22,0,0)
f(9,227,3,2,'kyo/concurrent/scheduler/IOTask.loop$2',3,0,0)
f(10,228,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(11,228,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(12,228,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(10,229,1,2,'kyo/concurrent/scheduler/IOPromise$Pending.add',1,0,0)
f(11,229,1,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.<init>',1,0,0)
f(12,229,1,2,'kyo/concurrent/scheduler/IOPromise$Pending.<init>',1,0,0)
f(13,229,1,2,'java/lang/Object.<init>',1,0,0)
f(9,230,3,2,'kyo/concurrent/scheduler/IOTask.loop$5',3,0,0)
f(10,232,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(11,232,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(9,233,20,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,233,20,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',13,0,0)
f(11,233,20,2,'kyo/concurrent/scheduler/IOPromise.complete',13,0,0)
f(12,233,20,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',13,0,0)
f(13,233,20,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',13,0,0)
f(14,240,13,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run',6,0,0)
f(15,241,5,3,'itable stub')
f(15,246,3,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,246,3,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,246,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,246,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,246,3,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,246,3,1,'jdk/internal/misc/Unsafe.unpark')
f(21,246,1,3,'Unsafe_Unpark')
f(22,246,1,3,'pthread_mutex_lock')
f(21,247,2,3,'pthread_cond_signal')
f(22,247,2,5,'entry_SYSCALL_64_after_hwframe')
f(23,247,2,5,'do_syscall_64')
f(24,247,2,5,'__x64_sys_futex')
f(25,247,2,5,'do_futex')
f(26,247,2,5,'futex_wake')
f(27,247,2,5,'wake_up_q')
f(28,247,2,5,'_raw_spin_unlock_irqrestore')
f(15,249,4,1,'scala/runtime/function/JProcedure1.apply')
f(16,252,1,1,'scala/runtime/function/JProcedure1.apply')
f(9,253,4,6,'kyo/core$internal$KyoCont.effect',0,4,0)
f(9,257,1,1,'scala/runtime/function/JProcedure1.apply')
f(10,257,1,1,'kyo/ios$KyoIO.value')
f(7,258,26,1,'kyo/concurrent/scheduler/Queue.poll',4,0,0)
f(8,258,4,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',4,0,0)
f(9,258,4,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',4,0,0)
f(10,258,4,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',4,0,0)
f(8,262,22,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,263,10,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',10,0,0)
f(10,267,6,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',6,0,0)
f(9,273,11,2,'kyo/concurrent/scheduler/Queue$$Lambda$60.0x0000000800d49770.apply',11,0,0)
f(10,273,11,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',11,0,0)
f(11,273,11,2,'scala/collection/mutable/PriorityQueue.dequeue',11,0,0)
f(12,279,5,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',5,0,0)
f(7,284,3,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,284,3,1,'kyo/concurrent/scheduler/Worker.park')
f(9,284,3,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,284,3,1,'jdk/internal/misc/Unsafe.park')
f(11,284,3,3,'[unknown]')
f(12,284,3,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,285,2,5,'entry_SYSCALL_64_after_hwframe')
f(14,285,2,5,'do_syscall_64')
f(15,285,1,5,'__x64_sys_futex')
f(16,285,1,5,'do_futex')
f(17,285,1,5,'futex_wait')
f(18,285,1,5,'futex_wait_queue_me')
f(19,285,1,5,'schedule')
f(20,285,1,5,'__schedule')
f(21,285,1,5,'finish_task_switch.isra.0')
f(15,286,1,5,'syscall_enter_from_user_mode')
f(7,287,1,2,'kyo/concurrent/scheduler/Worker.stop$1',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: 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,20014,3,'all')
f(1,0,20011,1,'java/lang/Thread.run')
f(2,0,20011,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,20011,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,4116,1,'java/util/concurrent/FutureTask.run')
f(5,0,4116,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,4116,1,'java/util/concurrent/FutureTask.run')
f(7,0,4116,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,4116,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,4116,1,'java/lang/reflect/Method.invoke')
f(10,0,4116,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,4116,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,4116,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,4116,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,4116,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,4116,1,'kyo/bench/Bench.forkKyo')
f(16,0,317,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,317,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,317,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,186,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,0,186,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3ee58')
f(19,186,131,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3ee58')
f(16,317,358,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,317,358,2,'kyo.bench.Bench$$anon$1')
f(16,675,2862,1,'kyo/bench/Bench.runLoop$2')
f(17,675,1202,1,'kyo/bench/Bench$$anon$1.apply')
f(18,675,134,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,675,134,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c83220.apply')
f(20,675,134,1,'kyo/bench/Bench.$anonfun$2')
f(21,675,134,1,'kyo/concurrent/fibers$Fiber.block')
f(22,675,134,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,809,1068,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,809,1068,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,809,1068,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84600.apply')
f(21,809,1068,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,809,84,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,893,864,2,'kyo.concurrent.scheduler.IOTask')
f(22,1757,89,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,1757,89,2,'kyo.concurrent.fibers$Fiber')
f(22,1846,31,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,1846,31,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,1846,31,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,1846,31,1,'kyo/concurrent/scheduler/Queue.offer')
f(26,1846,31,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(27,1846,31,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(28,1846,31,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(29,1846,31,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(30,1846,31,2,'kyo.concurrent.scheduler.Queue$$Lambda$54+0x0000000800d47258')
f(17,1877,1660,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,1877,1660,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,1877,1660,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,1877,1660,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,1877,736,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,1877,736,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,1877,223,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,2100,513,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,2100,513,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,2613,536,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,3149,388,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,3149,388,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,3149,388,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,3537,579,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,3537,314,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,3537,314,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,3537,314,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,3537,314,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84600')
f(17,3851,165,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,3851,165,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,4016,100,1,'kyo/locals$Locals$.save')
f(18,4016,100,2,'kyo.locals$Locals$$anon$3')
f(4,4116,12,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ee28.run')
f(5,4116,12,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,4116,12,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,4116,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,4116,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,4116,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,4116,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,4116,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,4127,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,4127,1,2,'java.lang.String')
f(4,4128,12,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f050.run')
f(5,4128,12,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,4128,12,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,4128,12,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,4128,12,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,4128,12,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,4128,12,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$60+0x0000000800d496f0')
f(4,4140,15871,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fd98.run')
f(5,4140,15871,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,4140,15871,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,4140,15808,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,4140,15808,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,4140,15684,1,'kyo/bench/NarrowBindBench$$anon$2.apply')
f(10,4140,15684,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(11,4140,15684,1,'kyo/bench/NarrowBindBench$$Lambda$57.0x0000000800d44400.apply')
f(12,4140,15684,1,'kyo/bench/NarrowBindBench.$anonfun$adapted$1')
f(13,4140,15684,1,'kyo/bench/NarrowBindBench.$anonfun$1')
f(14,4140,15684,1,'kyo/bench/NarrowBindBench.loop$1')
f(15,4140,4056,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,4140,4056,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,4140,4056,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,4140,4056,2,'kyo.bench.NarrowBindBench$$Lambda$57+0x0000000800d44400')
f(15,8196,3689,2,'kyo.bench.NarrowBindBench$$anon$1')
f(15,11885,7939,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(16,11885,7939,2,'kyo.bench.NarrowBindBench$$anon$2')
f(9,19824,1,1,'kyo/bench/NarrowBindBench$$anon$5.apply')
f(10,19824,1,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$2')
f(11,19824,1,1,'kyo/bench/NarrowBindBench$$Lambda$56.0x0000000800d458c0.apply')
f(12,19824,1,1,'kyo/bench/NarrowBindBench.$anonfun$adapted$2')
f(13,19824,1,1,'kyo/bench/NarrowBindBench.$anonfun$2')
f(14,19824,1,1,'kyo/bench/NarrowBindBench.loop$1')
f(15,19824,1,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(16,19824,1,2,'kyo.bench.NarrowBindBench$$anon$2')
f(9,19825,123,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,19825,123,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,19825,123,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3ee58.apply')
f(12,19825,123,1,'kyo/bench/Bench.$anonfun$1')
f(13,19825,123,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,19825,123,1,'kyo/bench/NarrowBindBench.kyoBench')
f(15,19825,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,19825,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,19825,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,19825,1,2,'kyo.bench.NarrowBindBench$$Lambda$56+0x0000000800d458c0')
f(15,19826,122,2,'kyo.bench.NarrowBindBench$$anon$4')
f(7,19948,63,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,19948,63,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,19948,63,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,19948,63,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,19948,63,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(12,19948,63,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d47ca0')
f(1,20011,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,20011,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,20011,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,20011,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,20011,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,20011,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,20011,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,20011,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,20011,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,20011,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,20011,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,20011,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,20011,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,280,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,2,4,'Compile::Code_Gen()')
f(10,0,1,4,'PhaseOutput::Output()')
f(11,0,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,1,1,4,'PhasePeephole::do_transform()')
f(1,2,278,1,'java/lang/Thread.run')
f(2,2,278,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,2,278,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,2,14,1,'java/util/concurrent/FutureTask.run')
f(5,2,14,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,2,14,1,'java/util/concurrent/FutureTask.run')
f(7,2,14,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,2,14,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,2,14,1,'java/lang/reflect/Method.invoke')
f(10,2,14,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,2,14,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,2,14,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,2,14,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,2,14,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,2,14,1,'kyo/bench/Bench.forkKyo')
f(16,2,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,2,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,2,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,2,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,2,1,3,'Unsafe_AllocateInstance')
f(16,3,12,1,'kyo/bench/Bench.runLoop$2')
f(17,3,6,1,'kyo/bench/Bench$$anon$1.apply')
f(18,3,6,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,3,6,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,3,6,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84600.apply')
f(21,3,6,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,3,6,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,3,6,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,3,6,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,3,6,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,3,6,1,'jdk/internal/misc/Unsafe.unpark')
f(27,3,6,3,'pthread_cond_signal')
f(28,3,6,5,'entry_SYSCALL_64_after_hwframe')
f(29,3,6,5,'do_syscall_64')
f(30,3,6,5,'__x64_sys_futex')
f(31,3,6,5,'do_futex')
f(32,3,6,5,'futex_wake')
f(33,3,1,5,'mark_wake_futex')
f(33,4,5,5,'wake_up_q')
f(34,4,5,5,'_raw_spin_unlock_irqrestore')
f(17,9,6,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,9,6,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,9,6,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,9,6,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,9,6,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,9,6,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,10,5,1,'java/util/concurrent/locks/LockSupport.park')
f(24,10,5,1,'jdk/internal/misc/Unsafe.park')
f(25,10,5,3,'[unknown]')
f(26,10,5,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,11,4,5,'entry_SYSCALL_64_after_hwframe')
f(28,11,4,5,'do_syscall_64')
f(29,11,4,5,'__x64_sys_futex')
f(30,11,4,5,'do_futex')
f(31,11,4,5,'futex_wait')
f(32,11,4,5,'futex_wait_queue_me')
f(33,11,4,5,'schedule')
f(34,11,4,5,'__schedule')
f(35,11,4,5,'finish_task_switch.isra.0')
f(16,15,1,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,15,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,15,1,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84600.apply',1,0,0)
f(19,15,1,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',1,0,0)
f(4,16,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ee28.run')
f(5,16,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,16,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,16,1,1,'java/lang/Thread.sleep')
f(8,16,1,3,'[unknown]')
f(9,16,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,16,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,16,1,5,'do_syscall_64')
f(12,16,1,5,'syscall_exit_to_user_mode')
f(13,16,1,5,'exit_to_user_mode_prepare')
f(14,16,1,5,'exit_to_user_mode_loop')
f(15,16,1,5,'__rseq_handle_notify_resume')
f(16,16,1,5,'rseq_get_rseq_cs.isra.0')
f(4,17,263,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fd98.run')
f(5,17,263,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,17,263,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,17,74,2,'kyo/concurrent/scheduler/IOTask.run',44,0,0)
f(8,18,6,2,'kyo/concurrent/scheduler/IOTask.curr_$eq',6,0,0)
f(8,24,67,2,'kyo/concurrent/scheduler/IOTask.eval',56,0,0)
f(9,74,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(10,74,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(11,74,1,4,'MemAllocator::allocate() const')
f(12,74,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(13,74,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(14,74,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(15,74,1,4,'G1AllocRegion::new_alloc_region_and_allocate(unsigned long, bool)')
f(16,74,1,4,'G1CollectedHeap::new_mutator_alloc_region(unsigned long, bool, unsigned int)')
f(17,74,1,4,'G1RemSetTrackingPolicy::update_at_allocate(HeapRegion*)')
f(18,74,1,4,'G1FromCardCache::clear(unsigned int)')
f(9,75,6,2,'kyo/bench/NarrowBindBench$$anon$2.apply',6,0,0)
f(10,77,4,2,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1',4,0,0)
f(11,77,4,2,'kyo/bench/NarrowBindBench$$Lambda$57.0x0000000800d44400.apply',4,0,0)
f(12,77,4,2,'kyo/bench/NarrowBindBench.$anonfun$adapted$1',4,0,0)
f(13,77,4,2,'kyo/bench/NarrowBindBench.$anonfun$1',4,0,0)
f(14,77,4,2,'kyo/bench/NarrowBindBench.loop$1',4,0,0)
f(15,80,1,2,'kyo/bench/NarrowBindBench$$anon$1.<init>',1,0,0)
f(16,80,1,2,'kyo/ios$KyoIO.<init>',1,0,0)
f(9,81,10,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,81,10,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',1,0,0)
f(11,81,10,1,'kyo/concurrent/scheduler/IOPromise.complete',1,0,0)
f(12,81,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(13,81,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(14,81,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(12,82,9,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,82,9,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,82,9,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,82,9,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,82,9,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,82,9,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,82,9,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,82,9,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,82,9,1,'jdk/internal/misc/Unsafe.unpark')
f(21,82,1,4,'ThreadsListHandle::~ThreadsListHandle()')
f(21,83,8,3,'pthread_cond_signal')
f(22,83,8,5,'entry_SYSCALL_64_after_hwframe')
f(23,83,8,5,'do_syscall_64')
f(24,83,8,5,'__x64_sys_futex')
f(25,83,8,5,'do_futex')
f(26,83,8,5,'futex_wake')
f(27,83,8,5,'wake_up_q')
f(28,83,8,5,'_raw_spin_unlock_irqrestore')
f(7,91,180,2,'kyo/concurrent/scheduler/Queue.poll',180,0,0)
f(8,91,3,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',3,0,0)
f(9,91,3,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',3,0,0)
f(10,92,2,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47ca0.<init>',2,0,0)
f(8,94,177,2,'kyo/concurrent/scheduler/Queue.modify',177,0,0)
f(9,126,145,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47ca0.apply',145,0,0)
f(10,126,145,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',145,0,0)
f(11,137,12,2,'kyo/concurrent/scheduler/Queue.isEmpty',12,0,0)
f(11,149,122,2,'scala/collection/mutable/PriorityQueue.dequeue',122,0,0)
f(12,257,6,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',6,0,0)
f(12,263,7,2,'scala/collection/mutable/PriorityQueue.fixDown',7,0,0)
f(12,270,1,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',1,0,0)
f(7,271,9,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,271,9,1,'kyo/concurrent/scheduler/Worker.park')
f(9,271,9,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,271,9,1,'jdk/internal/misc/Unsafe.park')
f(11,271,1,3,'Unsafe_Park')
f(12,271,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,271,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,271,1,5,'do_syscall_64')
f(15,271,1,5,'__x64_sys_futex')
f(16,271,1,5,'do_futex')
f(17,271,1,5,'futex_wake')
f(18,271,1,5,'hash_futex')
f(11,272,8,3,'[unknown]')
f(12,272,8,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,272,8,5,'entry_SYSCALL_64_after_hwframe')
f(14,272,8,5,'do_syscall_64')
f(15,272,8,5,'__x64_sys_futex')
f(16,272,7,5,'do_futex')
f(17,272,7,5,'futex_wait')
f(18,272,7,5,'futex_wait_queue_me')
f(19,273,6,5,'schedule')
f(20,273,6,5,'__schedule')
f(21,273,6,5,'finish_task_switch.isra.0')
f(16,279,1,5,'get_timespec64')
f(17,279,1,5,'_copy_from_user')
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,18794,3,'all')
f(1,0,18790,1,'java/lang/Thread.run')
f(2,0,18790,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,18790,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,18790,1,'java/util/concurrent/FutureTask.run')
f(5,0,18790,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,18790,1,'java/util/concurrent/FutureTask.run')
f(7,0,18790,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,18790,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,18790,1,'java/lang/reflect/Method.invoke')
f(10,0,18790,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,18790,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,18790,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,18790,1,'kyo/bench/jmh_generated/NarrowBindBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,18790,1,'kyo/bench/jmh_generated/NarrowBindBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,18790,1,'kyo/bench/Bench.syncKyo')
f(16,0,18785,1,'kyo/bench/Bench.runLoop$1')
f(17,0,18784,1,'kyo/bench/NarrowBindBench$$anon$2.apply')
f(18,0,18784,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(19,0,18784,1,'kyo/bench/NarrowBindBench$$Lambda$40.0x0000000800cd38c0.apply')
f(20,0,18784,1,'kyo/bench/NarrowBindBench.$anonfun$adapted$1')
f(21,0,18784,1,'kyo/bench/NarrowBindBench.$anonfun$1')
f(22,0,18784,1,'kyo/bench/NarrowBindBench.loop$1')
f(23,0,3,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(24,0,3,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(25,0,3,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(26,0,3,2,'kyo.bench.NarrowBindBench$$Lambda$40+0x0000000800cd38c0')
f(23,3,9389,2,'kyo.bench.NarrowBindBench$$anon$1')
f(23,9392,9392,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(24,9392,9392,2,'kyo.bench.NarrowBindBench$$anon$2')
f(17,18784,1,1,'kyo/bench/NarrowBindBench$$anon$5.apply')
f(18,18784,1,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$2')
f(19,18784,1,1,'kyo/bench/NarrowBindBench$$Lambda$37.0x0000000800c2d568.apply')
f(20,18784,1,1,'kyo/bench/NarrowBindBench.$anonfun$adapted$2')
f(21,18784,1,1,'kyo/bench/NarrowBindBench.$anonfun$2')
f(22,18784,1,1,'kyo/bench/NarrowBindBench.loop$1')
f(23,18784,1,2,'kyo.bench.NarrowBindBench$$anon$1')
f(16,18785,5,1,'kyo/bench/NarrowBindBench.kyoBench')
f(17,18785,3,2,'kyo.bench.NarrowBindBench$$anon$4')
f(17,18788,2,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$2')
f(18,18788,2,2,'kyo.bench.NarrowBindBench$$anon$5')
f(1,18790,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,18790,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,18790,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,18790,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,18790,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,18790,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,18790,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,18790,1,2,'org.openjdk.jmh.infra.Control')
f(8,18791,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,18791,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,18791,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,18791,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,18791,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,18791,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: 928px}
</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(58);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,300,3,'all')
f(1,0,3,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,3,3,'thread_native_entry(Thread*)')
f(3,0,3,4,'Thread::call_run()')
f(4,0,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,'PhaseChaitin::Register_Allocate()')
f(11,0,1,4,'PhaseChaitin::post_allocate_copy_removal()')
f(12,0,1,4,'PhaseChaitin::elide_copy(Node*, int, Block*, Node_List&, Node_List&, bool)')
f(9,1,1,4,'ParseGenerator::generate(JVMState*)')
f(10,1,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(11,1,1,4,'Parse::do_all_blocks()')
f(12,1,1,4,'Parse::do_one_block()')
f(13,1,1,4,'Parse::do_call()')
f(14,1,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(15,1,1,4,'ParseGenerator::generate(JVMState*)')
f(16,1,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(17,1,1,4,'Parse::do_all_blocks()')
f(18,1,1,4,'Parse::do_one_block()')
f(19,1,1,4,'Parse::do_call()')
f(20,1,1,4,'ParseGenerator::generate(JVMState*)')
f(21,1,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(22,1,1,4,'Parse::do_all_blocks()')
f(23,1,1,4,'Parse::do_one_block()')
f(24,1,1,4,'Parse::do_call()')
f(25,1,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(26,1,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(27,1,1,4,'ParseGenerator::generate(JVMState*)')
f(28,1,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(29,1,1,4,'Parse::do_all_blocks()')
f(30,1,1,4,'Parse::do_one_block()')
f(31,1,1,4,'Parse::do_call()')
f(32,1,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(33,1,1,4,'ParseGenerator::generate(JVMState*)')
f(34,1,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(35,1,1,4,'Parse::do_all_blocks()')
f(36,1,1,4,'Parse::do_one_block()')
f(37,1,1,4,'Parse::do_call()')
f(38,1,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(39,1,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(40,1,1,4,'ParseGenerator::generate(JVMState*)')
f(41,1,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(42,1,1,4,'Parse::do_all_blocks()')
f(43,1,1,4,'Parse::do_one_block()')
f(44,1,1,4,'Parse::do_call()')
f(45,1,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(46,1,1,4,'ParseGenerator::generate(JVMState*)')
f(47,1,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(48,1,1,4,'Parse::do_all_blocks()')
f(49,1,1,4,'Parse::do_one_block()')
f(50,1,1,4,'Parse::do_call()')
f(51,1,1,4,'Compile::call_generator(ciMethod*, int, bool, JVMState*, bool, float, ciKlass*, bool)')
f(52,1,1,4,'InlineTree::ok_to_inline(ciMethod*, JVMState*, ciCallProfile&, bool&)')
f(53,1,1,4,'ciMethod::get_flow_analysis()')
f(54,1,1,4,'ciTypeFlow::do_flow()')
f(55,1,1,4,'ciTypeFlow::flow_types()')
f(56,1,1,4,'ciTypeFlow::df_flow_types(ciTypeFlow::Block*, bool, ciTypeFlow::StateVector*, ciTypeFlow::JsrSet*)')
f(57,1,1,4,'ciBytecodeStream::reset_to_bci(int)')
f(4,2,1,4,'VMThread::run()')
f(5,2,1,4,'VMThread::inner_execute(VM_Operation*)')
f(6,2,1,4,'VMThread::evaluate_operation(VM_Operation*)')
f(7,2,1,4,'VM_Operation::evaluate()')
f(8,2,1,4,'VM_G1CollectForAllocation::doit()')
f(9,2,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint(double)')
f(10,2,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint_helper(double)')
f(11,2,1,4,'G1CollectedHeap::evacuate_initial_collection_set(G1ParScanThreadStateSet*, bool)')
f(12,2,1,4,'G1RemSet::merge_heap_roots(bool)')
f(13,2,1,4,'WorkGang::run_task(AbstractGangTask*, unsigned int, bool)')
f(14,2,1,3,'sem_post')
f(15,2,1,5,'entry_SYSCALL_64_after_hwframe')
f(16,2,1,5,'do_syscall_64')
f(17,2,1,5,'__x64_sys_futex')
f(18,2,1,5,'do_futex')
f(19,2,1,5,'futex_wake')
f(20,2,1,5,'wake_up_q')
f(21,2,1,5,'_raw_spin_unlock_irqrestore')
f(1,3,297,1,'java/lang/Thread.run')
f(2,3,297,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,3,297,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,3,297,1,'java/util/concurrent/FutureTask.run')
f(5,3,297,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,3,297,1,'java/util/concurrent/FutureTask.run')
f(7,3,297,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,3,297,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,3,297,1,'java/lang/reflect/Method.invoke')
f(10,3,297,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,3,297,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,3,297,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,3,297,1,'kyo/bench/jmh_generated/NarrowBindBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,3,297,1,'kyo/bench/jmh_generated/NarrowBindBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,3,296,1,'kyo/bench/Bench.syncKyo',34,0,0)
f(16,3,296,1,'kyo/bench/Bench.runLoop$1',41,0,0)
f(17,148,151,2,'kyo/bench/NarrowBindBench$$anon$2.apply',150,0,0)
f(18,222,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(19,222,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(20,222,1,4,'MemAllocator::allocate() const')
f(21,222,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(22,222,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(23,222,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(24,222,1,4,'MutatorAllocRegion::retire(bool)')
f(25,222,1,4,'G1CollectedHeap::retire_mutator_alloc_region(HeapRegion*, unsigned long)')
f(18,223,1,2,'kyo/bench/NarrowBindBench$$anon$1.apply',1,0,0)
f(19,223,1,2,'kyo/bench/NarrowBindBench$$anon$1.apply',1,0,0)
f(18,224,75,2,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1',75,0,0)
f(19,227,72,2,'kyo/bench/NarrowBindBench$$Lambda$40.0x0000000800cd38c0.apply',72,0,0)
f(20,227,72,2,'kyo/bench/NarrowBindBench.$anonfun$adapted$1',72,0,0)
f(21,227,72,2,'kyo/bench/NarrowBindBench.$anonfun$1',72,0,0)
f(22,227,72,2,'kyo/bench/NarrowBindBench.loop$1',72,0,0)
f(23,234,9,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',9,0,0)
f(24,234,9,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',9,0,0)
f(25,234,9,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',9,0,0)
f(23,243,56,2,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1',56,0,0)
f(24,269,30,2,'kyo/bench/NarrowBindBench$$anon$2.<init>',30,0,0)
f(25,281,18,2,'kyo/core$internal$KyoCont.<init>',18,0,0)
f(15,299,1,2,'org/openjdk/jmh/infra/Blackhole.consume',1,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 560px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(35);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,13641,3,'all')
f(1,0,13637,1,'java/lang/Thread.run')
f(2,0,13637,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,13637,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,925,1,'java/util/concurrent/FutureTask.run')
f(5,0,925,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,925,1,'java/util/concurrent/FutureTask.run')
f(7,0,925,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,925,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,925,1,'java/lang/reflect/Method.invoke')
f(10,0,925,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,925,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,925,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,925,1,'kyo/bench/jmh_generated/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,925,1,'kyo/bench/jmh_generated/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,925,1,'kyo/bench/Bench.forkKyo')
f(16,0,67,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,67,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,67,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,67,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c80820')
f(16,67,113,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,67,113,2,'kyo.bench.Bench$$anon$1')
f(16,180,573,1,'kyo/bench/Bench.runLoop$2')
f(17,180,263,1,'kyo/bench/Bench$$anon$1.apply')
f(18,180,77,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,180,77,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c85ba8.apply')
f(20,180,77,1,'kyo/bench/Bench.$anonfun$2')
f(21,180,77,1,'kyo/concurrent/fibers$Fiber.block')
f(22,180,77,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,257,186,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,257,186,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,257,186,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c81f78.apply')
f(21,257,186,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,257,186,2,'kyo.concurrent.scheduler.IOTask')
f(17,443,310,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,443,310,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,443,310,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,443,310,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,443,104,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,443,104,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,443,104,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,443,104,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,547,47,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,594,159,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,594,159,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,594,159,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,753,172,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,753,172,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,753,172,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,753,172,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,753,172,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c81f78')
f(4,925,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e478.run')
f(5,925,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,925,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,925,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,925,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,925,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,925,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,925,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(7,935,1,1,'kyo/concurrent/scheduler/MovingStdDev.observe')
f(8,935,1,2,'java.lang.String')
f(4,936,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e6a0.run')
f(5,936,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,936,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,936,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,936,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,936,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,936,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$68+0x0000000800d4cc00')
f(4,947,12690,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d22b68.run')
f(5,947,12690,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,947,12690,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,947,12690,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,947,12690,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,947,12548,1,'kyo/bench/NarrowBindMapBench$$anon$12.apply')
f(10,947,12548,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11')
f(11,947,12548,1,'kyo/bench/NarrowBindMapBench$$Lambda$67.0x0000000800d4c830.apply')
f(12,947,12548,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$11')
f(13,947,12548,1,'kyo/bench/NarrowBindMapBench.$anonfun$11')
f(14,947,12548,1,'kyo/bench/NarrowBindMapBench.loop$1')
f(15,947,1533,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,947,1533,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,947,1533,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,947,1533,2,'kyo.bench.NarrowBindMapBench$$Lambda$67+0x0000000800d4c830')
f(15,2480,22,2,'kyo.bench.NarrowBindMapBench$$anon$1')
f(15,2502,1483,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(16,2502,1483,2,'kyo.bench.NarrowBindMapBench$$anon$2')
f(15,3985,609,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$transformLoop$2')
f(16,3985,609,2,'kyo.bench.NarrowBindMapBench$$anon$3')
f(15,4594,1570,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$transformLoop$3')
f(16,4594,1570,2,'kyo.bench.NarrowBindMapBench$$anon$4')
f(15,6164,651,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$transformLoop$4')
f(16,6164,651,2,'kyo.bench.NarrowBindMapBench$$anon$5')
f(15,6815,1538,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$transformLoop$5')
f(16,6815,1538,2,'kyo.bench.NarrowBindMapBench$$anon$6')
f(15,8353,592,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$transformLoop$6')
f(16,8353,592,2,'kyo.bench.NarrowBindMapBench$$anon$7')
f(15,8945,1507,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$transformLoop$7')
f(16,8945,1507,2,'kyo.bench.NarrowBindMapBench$$anon$8')
f(15,10452,616,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$transformLoop$8')
f(16,10452,616,2,'kyo.bench.NarrowBindMapBench$$anon$9')
f(15,11068,1794,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$transformLoop$9')
f(16,11068,1794,2,'kyo.bench.NarrowBindMapBench$$anon$10')
f(15,12862,221,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$transformLoop$10')
f(16,12862,221,2,'kyo.bench.NarrowBindMapBench$$anon$11')
f(15,13083,412,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11')
f(16,13083,412,2,'kyo.bench.NarrowBindMapBench$$anon$12')
f(9,13495,142,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,13495,142,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,13495,142,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c80820.apply')
f(12,13495,142,1,'kyo/bench/Bench.$anonfun$1')
f(13,13495,142,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,13495,142,1,'kyo/bench/NarrowBindMapBench.kyoBench')
f(15,13495,142,2,'kyo.bench.NarrowBindMapBench$$anon$14')
f(1,13637,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,13637,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,13637,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,13637,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,13637,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,13637,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,13637,1,1,'jdk/proxy1/$Proxy0.iterationResult')
f(8,13637,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient$$Lambda$8.0x0000000800c01c70.invoke')
f(9,13637,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.lambda$new$0')
f(10,13637,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushFrame')
f(11,13637,1,1,'java/io/ObjectOutputStream.writeObject')
f(12,13637,1,1,'java/io/ObjectOutputStream.writeObject0')
f(13,13637,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(14,13637,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(15,13637,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(16,13637,1,1,'java/io/ObjectOutputStream.writeObject0')
f(17,13637,1,1,'java/io/ObjectOutputStream.writeArray')
f(18,13637,1,1,'java/io/ObjectOutputStream.writeObject0')
f(19,13637,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(20,13637,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(21,13637,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(22,13637,1,1,'java/io/ObjectOutputStream.writeObject0')
f(23,13637,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(24,13637,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(25,13637,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(26,13637,1,1,'java/io/ObjectOutputStream.writeObject0')
f(27,13637,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(28,13637,1,1,'java/io/ObjectOutputStream.writeSerialData')
f(29,13637,1,1,'java/io/ObjectOutputStream.defaultWriteFields')
f(30,13637,1,1,'java/io/ObjectOutputStream.writeObject0')
f(31,13637,1,1,'java/io/ObjectOutputStream.writeOrdinaryObject')
f(32,13637,1,1,'java/io/ObjectOutputStream$HandleTable.assign')
f(33,13637,1,1,'java/io/ObjectOutputStream$HandleTable.growEntries')
f(34,13637,1,2,'int[]')
f(7,13638,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,13638,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,13638,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,13638,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,13638,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,13638,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,13638,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,295,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,'PhaseChaitin::Register_Allocate()')
f(11,0,1,4,'shrI_mem_1Node::out_RegMask() const')
f(9,1,1,4,'Compile::Optimize()')
f(10,1,1,4,'PhaseIterGVN::optimize()')
f(11,1,1,4,'PhaseIterGVN::transform_old(Node*)')
f(12,1,1,4,'NodeHash::hash_find_insert(Node*)')
f(1,2,293,1,'java/lang/Thread.run')
f(2,2,293,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,2,293,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/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,2,2,1,'kyo/bench/jmh_generated/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,2,2,1,'kyo/bench/Bench.forkKyo')
f(16,2,2,1,'kyo/bench/Bench.runLoop$2')
f(17,2,1,1,'kyo/bench/Bench$$anon$1.apply')
f(18,2,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,2,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,2,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c81f78.apply')
f(21,2,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,2,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,2,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,2,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,2,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,2,1,1,'jdk/internal/misc/Unsafe.unpark')
f(27,2,1,3,'pthread_cond_signal')
f(28,2,1,5,'entry_SYSCALL_64_after_hwframe')
f(29,2,1,5,'do_syscall_64')
f(30,2,1,5,'__x64_sys_futex')
f(31,2,1,5,'do_futex')
f(32,2,1,5,'futex_wake')
f(33,2,1,5,'wake_up_q')
f(34,2,1,5,'_raw_spin_unlock_irqrestore')
f(17,3,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,3,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,3,1,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,3,1,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,3,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,3,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,3,1,1,'java/util/concurrent/locks/LockSupport.park')
f(24,3,1,1,'jdk/internal/misc/Unsafe.park')
f(25,3,1,3,'[unknown]')
f(26,3,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,3,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,3,1,5,'do_syscall_64')
f(29,3,1,5,'__x64_sys_futex')
f(30,3,1,5,'do_futex')
f(31,3,1,5,'futex_wait')
f(32,3,1,5,'futex_wait_queue_me')
f(33,3,1,5,'schedule')
f(34,3,1,5,'__schedule')
f(35,3,1,5,'finish_task_switch.isra.0')
f(4,4,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e478.run')
f(5,4,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,4,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,4,1,1,'java/lang/Thread.sleep')
f(8,4,1,3,'[unknown]')
f(9,4,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,4,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,4,1,5,'do_syscall_64')
f(12,4,1,5,'__x64_sys_futex')
f(13,4,1,5,'do_futex')
f(14,4,1,5,'futex_wait')
f(4,5,290,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d22b68.run')
f(5,5,290,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,5,290,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,5,289,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,5,289,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,6,287,2,'kyo/bench/NarrowBindMapBench$$anon$12.apply',282,0,0)
f(10,6,286,2,'kyo/bench/NarrowBindMapBench$$anon$11.apply',282,0,0)
f(11,6,286,2,'kyo/bench/NarrowBindMapBench$$anon$10.apply',282,0,0)
f(12,7,285,2,'kyo/bench/NarrowBindMapBench$$anon$9.apply',281,0,0)
f(13,11,281,2,'kyo/bench/NarrowBindMapBench$$anon$8.apply',277,0,0)
f(14,64,228,2,'kyo/bench/NarrowBindMapBench$$anon$7.apply',224,0,0)
f(15,70,222,2,'kyo/bench/NarrowBindMapBench$$anon$6.apply',218,0,0)
f(16,90,202,2,'kyo/bench/NarrowBindMapBench$$anon$5.apply',198,0,0)
f(17,99,159,2,'kyo/bench/NarrowBindMapBench$$anon$4.apply',155,0,0)
f(18,112,120,2,'kyo/bench/NarrowBindMapBench$$anon$3.apply',116,0,0)
f(19,190,29,2,'kyo/bench/NarrowBindMapBench$$anon$2.apply',25,0,0)
f(20,211,2,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(21,211,2,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(22,211,2,4,'MemAllocator::allocate() const')
f(23,211,2,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(24,211,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(24,212,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(25,212,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(26,212,1,4,'MutatorAllocRegion::retire(bool)')
f(27,212,1,4,'G1MonitoringSupport::update_eden_size()')
f(20,213,1,2,'kyo/bench/NarrowBindMapBench$$anon$1.apply',1,0,0)
f(21,213,1,2,'kyo/bench/NarrowBindMapBench$$anon$1.apply',1,0,0)
f(20,214,4,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1',2,0,0)
f(21,216,2,1,'kyo/bench/NarrowBindMapBench$$Lambda$57.0x0000000800d49320.apply')
f(22,216,2,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$1')
f(23,216,2,1,'kyo/bench/NarrowBindMapBench.$anonfun$1')
f(24,216,2,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(25,216,2,1,'java/lang/Integer.valueOf')
f(20,218,1,2,'kyo/concurrent/scheduler/IOTask.apply',1,0,0)
f(19,219,13,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$transformLoop$2',13,0,0)
f(20,224,8,2,'kyo/bench/NarrowBindMapBench$$Lambda$58.0x0000000800d4a3f8.apply',8,0,0)
f(21,225,7,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$2',7,0,0)
f(22,226,6,2,'scala/runtime/BoxesRunTime.unboxToInt',6,0,0)
f(23,230,2,2,'java/lang/Integer.intValue',2,0,0)
f(18,232,26,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$transformLoop$3',26,0,0)
f(19,244,14,2,'kyo/bench/NarrowBindMapBench$$Lambda$59.0x0000000800d4a9f0.apply',14,0,0)
f(20,244,14,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$3',14,0,0)
f(21,257,1,2,'scala/runtime/BoxesRunTime.unboxToInt',1,0,0)
f(17,258,33,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$transformLoop$4',33,0,0)
f(18,269,14,2,'kyo/bench/NarrowBindMapBench$$Lambda$60.0x0000000800d4adb8.apply',14,0,0)
f(19,269,14,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$4',14,0,0)
f(20,269,11,2,'kyo/bench/NarrowBindMapBench.$anonfun$4',11,0,0)
f(20,280,3,2,'scala/runtime/BoxesRunTime.unboxToInt',3,0,0)
f(18,283,8,2,'scala/runtime/BoxesRunTime.unboxToInt',8,0,0)
f(17,291,1,2,'kyo/concurrent/scheduler/IOTask.apply',1,0,0)
f(10,292,1,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11')
f(11,292,1,1,'kyo/bench/NarrowBindMapBench$$Lambda$67.0x0000000800d4c830.apply')
f(12,292,1,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$11')
f(13,292,1,1,'kyo/bench/NarrowBindMapBench.$anonfun$11')
f(14,292,1,1,'kyo/bench/NarrowBindMapBench.loop$1')
f(15,292,1,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$transformLoop$9')
f(16,292,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(17,292,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(18,292,1,4,'MemAllocator::Allocation::notify_allocation_jfr_sampler()')
f(9,293,1,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,293,1,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,293,1,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,293,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,293,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,293,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,293,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,293,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,293,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,293,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,293,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,293,1,1,'jdk/internal/misc/Unsafe.unpark')
f(21,293,1,3,'pthread_cond_signal')
f(22,293,1,5,'entry_SYSCALL_64_after_hwframe')
f(23,293,1,5,'do_syscall_64')
f(24,293,1,5,'__x64_sys_futex')
f(25,293,1,5,'do_futex')
f(26,293,1,5,'futex_wake')
f(27,293,1,5,'wake_up_q')
f(28,293,1,5,'_raw_spin_unlock_irqrestore')
f(7,294,1,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,294,1,1,'kyo/concurrent/scheduler/Worker.park')
f(9,294,1,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,294,1,1,'jdk/internal/misc/Unsafe.park')
f(11,294,1,3,'[unknown]')
f(12,294,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,294,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,294,1,5,'do_syscall_64')
f(15,294,1,5,'__x64_sys_futex')
f(16,294,1,5,'do_futex')
f(17,294,1,5,'futex_wait')
f(18,294,1,5,'futex_wait_queue_me')
f(19,294,1,5,'schedule')
f(20,294,1,5,'__schedule')
f(21,294,1,5,'finish_task_switch.isra.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: 560px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(35);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,13667,3,'all')
f(1,0,13663,1,'java/lang/Thread.run')
f(2,0,13663,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,13663,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,13663,1,'java/util/concurrent/FutureTask.run')
f(5,0,13663,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,13663,1,'java/util/concurrent/FutureTask.run')
f(7,0,13663,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,13663,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,13663,1,'java/lang/reflect/Method.invoke')
f(10,0,13663,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,13663,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,13663,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,13663,1,'kyo/bench/jmh_generated/NarrowBindMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,13663,1,'kyo/bench/jmh_generated/NarrowBindMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,13663,1,'kyo/bench/Bench.syncKyo')
f(16,0,13663,1,'kyo/bench/Bench.runLoop$1')
f(17,0,13662,1,'kyo/bench/NarrowBindMapBench$$anon$12.apply')
f(18,0,13662,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11')
f(19,0,13662,1,'kyo/bench/NarrowBindMapBench$$Lambda$50.0x0000000800cd7440.apply')
f(20,0,13662,1,'kyo/bench
View raw

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

View raw

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

View raw

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

View raw

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

View raw

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

View raw

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

View raw

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

View raw

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

View raw

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

View raw

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

View raw

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

View raw

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

View raw

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

View raw

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

View raw

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

View raw

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

View raw

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

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