Skip to content

Instantly share code, notes, and snippets.

@fwbrasil
Created June 10, 2023 22:33
Show Gist options
  • Save fwbrasil/03aa2284ae49d905407339342a509edc to your computer and use it in GitHub Desktop.
Save fwbrasil/03aa2284ae49d905407339342a509edc to your computer and use it in GitHub Desktop.
[
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.BroadFlatMapBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 51768.31152762504,
"scoreError" : 8504.469627192515,
"scoreConfidence" : [
43263.841900432526,
60272.78115481755
],
"scorePercentiles" : {
"0.0" : 51486.27349071727,
"50.0" : 51512.28543310319,
"90.0" : 52306.37565905466,
"95.0" : 52306.37565905466,
"99.0" : 52306.37565905466,
"99.9" : 52306.37565905466,
"99.99" : 52306.37565905466,
"99.999" : 52306.37565905466,
"99.9999" : 52306.37565905466,
"100.0" : 52306.37565905466
},
"scoreUnit" : "ops/s",
"rawData" : [
[
52306.37565905466,
51486.27349071727,
51512.28543310319
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.BroadFlatMapBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 204756.18134877164,
"scoreError" : 3525.4171443806363,
"scoreConfidence" : [
201230.76420439102,
208281.59849315227
],
"scorePercentiles" : {
"0.0" : 204561.12638983663,
"50.0" : 204759.8638838695,
"90.0" : 204947.55377260875,
"95.0" : 204947.55377260875,
"99.0" : 204947.55377260875,
"99.9" : 204947.55377260875,
"99.99" : 204947.55377260875,
"99.999" : 204947.55377260875,
"99.9999" : 204947.55377260875,
"100.0" : 204947.55377260875
},
"scoreUnit" : "ops/s",
"rawData" : [
[
204561.12638983663,
204947.55377260875,
204759.8638838695
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.ChainedForkBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1257.7841874505236,
"scoreError" : 526.2047896830979,
"scoreConfidence" : [
731.5793977674257,
1783.9889771336216
],
"scorePercentiles" : {
"0.0" : 1230.0310393586522,
"50.0" : 1255.7157247956422,
"90.0" : 1287.605798197276,
"95.0" : 1287.605798197276,
"99.0" : 1287.605798197276,
"99.9" : 1287.605798197276,
"99.99" : 1287.605798197276,
"99.999" : 1287.605798197276,
"99.9999" : 1287.605798197276,
"100.0" : 1287.605798197276
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1230.0310393586522,
1287.605798197276,
1255.7157247956422
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.ChainedForkBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1241.3063217004635,
"scoreError" : 175.93110787284868,
"scoreConfidence" : [
1065.3752138276147,
1417.2374295733123
],
"scorePercentiles" : {
"0.0" : 1231.5755005564681,
"50.0" : 1241.483654533243,
"90.0" : 1250.8598100116792,
"95.0" : 1250.8598100116792,
"99.0" : 1250.8598100116792,
"99.9" : 1250.8598100116792,
"99.99" : 1250.8598100116792,
"99.999" : 1250.8598100116792,
"99.9999" : 1250.8598100116792,
"100.0" : 1250.8598100116792
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1250.8598100116792,
1231.5755005564681,
1241.483654533243
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.CollectAllBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 23175.87267911344,
"scoreError" : 2389.025349682231,
"scoreConfidence" : [
20786.84732943121,
25564.89802879567
],
"scorePercentiles" : {
"0.0" : 23044.81837008972,
"50.0" : 23176.080462791942,
"90.0" : 23306.71920445865,
"95.0" : 23306.71920445865,
"99.0" : 23306.71920445865,
"99.9" : 23306.71920445865,
"99.99" : 23306.71920445865,
"99.999" : 23306.71920445865,
"99.9999" : 23306.71920445865,
"100.0" : 23306.71920445865
},
"scoreUnit" : "ops/s",
"rawData" : [
[
23044.81837008972,
23306.71920445865,
23176.080462791942
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.CollectAllBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 38190.10925182206,
"scoreError" : 958.3416774672086,
"scoreConfidence" : [
37231.76757435485,
39148.45092928927
],
"scorePercentiles" : {
"0.0" : 38130.095974069474,
"50.0" : 38212.487025498885,
"90.0" : 38227.744755897846,
"95.0" : 38227.744755897846,
"99.0" : 38227.744755897846,
"99.9" : 38227.744755897846,
"99.99" : 38227.744755897846,
"99.999" : 38227.744755897846,
"99.9999" : 38227.744755897846,
"100.0" : 38227.744755897846
},
"scoreUnit" : "ops/s",
"rawData" : [
[
38212.487025498885,
38227.744755897846,
38130.095974069474
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.CountdownLatchBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 9204.903051713733,
"scoreError" : 502.12242439147644,
"scoreConfidence" : [
8702.780627322256,
9707.02547610521
],
"scorePercentiles" : {
"0.0" : 9181.662029845687,
"50.0" : 9197.75102819013,
"90.0" : 9235.29609710538,
"95.0" : 9235.29609710538,
"99.0" : 9235.29609710538,
"99.9" : 9235.29609710538,
"99.99" : 9235.29609710538,
"99.999" : 9235.29609710538,
"99.9999" : 9235.29609710538,
"100.0" : 9235.29609710538
},
"scoreUnit" : "ops/s",
"rawData" : [
[
9197.75102819013,
9181.662029845687,
9235.29609710538
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.CountdownLatchBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 11336.78994447454,
"scoreError" : 194.98155959057362,
"scoreConfidence" : [
11141.808384883967,
11531.771504065113
],
"scorePercentiles" : {
"0.0" : 11329.295292266668,
"50.0" : 11332.046253237526,
"90.0" : 11349.028287919427,
"95.0" : 11349.028287919427,
"99.0" : 11349.028287919427,
"99.9" : 11349.028287919427,
"99.99" : 11349.028287919427,
"99.999" : 11349.028287919427,
"99.9999" : 11349.028287919427,
"100.0" : 11349.028287919427
},
"scoreUnit" : "ops/s",
"rawData" : [
[
11329.295292266668,
11349.028287919427,
11332.046253237526
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.DeepBindBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 21105.303522896575,
"scoreError" : 3545.5303557463535,
"scoreConfidence" : [
17559.773167150222,
24650.833878642927
],
"scorePercentiles" : {
"0.0" : 20882.118894056188,
"50.0" : 21196.63586072591,
"90.0" : 21237.155813907622,
"95.0" : 21237.155813907622,
"99.0" : 21237.155813907622,
"99.9" : 21237.155813907622,
"99.99" : 21237.155813907622,
"99.999" : 21237.155813907622,
"99.9999" : 21237.155813907622,
"100.0" : 21237.155813907622
},
"scoreUnit" : "ops/s",
"rawData" : [
[
21196.63586072591,
21237.155813907622,
20882.118894056188
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.DeepBindBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 40794.20670383989,
"scoreError" : 511.36482063225,
"scoreConfidence" : [
40282.84188320764,
41305.571524472136
],
"scorePercentiles" : {
"0.0" : 40764.6191518012,
"50.0" : 40797.63857832623,
"90.0" : 40820.36238139223,
"95.0" : 40820.36238139223,
"99.0" : 40820.36238139223,
"99.9" : 40820.36238139223,
"99.99" : 40820.36238139223,
"99.999" : 40820.36238139223,
"99.9999" : 40820.36238139223,
"100.0" : 40820.36238139223
},
"scoreUnit" : "ops/s",
"rawData" : [
[
40764.6191518012,
40820.36238139223,
40797.63857832623
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.DeepBindMapBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1395.2767053974676,
"scoreError" : 361.92897492682624,
"scoreConfidence" : [
1033.3477304706414,
1757.2056803242938
],
"scorePercentiles" : {
"0.0" : 1382.8251085772179,
"50.0" : 1384.8505878605815,
"90.0" : 1418.1544197546036,
"95.0" : 1418.1544197546036,
"99.0" : 1418.1544197546036,
"99.9" : 1418.1544197546036,
"99.99" : 1418.1544197546036,
"99.999" : 1418.1544197546036,
"99.9999" : 1418.1544197546036,
"100.0" : 1418.1544197546036
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1384.8505878605815,
1382.8251085772179,
1418.1544197546036
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.DeepBindMapBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1730.8715329293555,
"scoreError" : 17.301770949961487,
"scoreConfidence" : [
1713.569761979394,
1748.173303879317
],
"scorePercentiles" : {
"0.0" : 1729.786682646338,
"50.0" : 1731.2846228061487,
"90.0" : 1731.5432933355796,
"95.0" : 1731.5432933355796,
"99.0" : 1731.5432933355796,
"99.9" : 1731.5432933355796,
"99.99" : 1731.5432933355796,
"99.999" : 1731.5432933355796,
"99.9999" : 1731.5432933355796,
"100.0" : 1731.5432933355796
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1731.2846228061487,
1731.5432933355796,
1729.786682646338
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.EnqueueDequeueBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1921.7099342928625,
"scoreError" : 318.50606908342826,
"scoreConfidence" : [
1603.2038652094343,
2240.2160033762907
],
"scorePercentiles" : {
"0.0" : 1906.824936294433,
"50.0" : 1917.3786025208449,
"90.0" : 1940.92626406331,
"95.0" : 1940.92626406331,
"99.0" : 1940.92626406331,
"99.9" : 1940.92626406331,
"99.99" : 1940.92626406331,
"99.999" : 1940.92626406331,
"99.9999" : 1940.92626406331,
"100.0" : 1940.92626406331
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1917.3786025208449,
1906.824936294433,
1940.92626406331
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.EnqueueDequeueBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1766.9445602012684,
"scoreError" : 101.57852845570929,
"scoreConfidence" : [
1665.366031745559,
1868.5230886569777
],
"scorePercentiles" : {
"0.0" : 1762.8818164040276,
"50.0" : 1764.6606486986127,
"90.0" : 1773.2912155011643,
"95.0" : 1773.2912155011643,
"99.0" : 1773.2912155011643,
"99.9" : 1773.2912155011643,
"99.99" : 1773.2912155011643,
"99.999" : 1773.2912155011643,
"99.9999" : 1773.2912155011643,
"100.0" : 1773.2912155011643
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1762.8818164040276,
1773.2912155011643,
1764.6606486986127
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.ForkManyBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 353.17090803955017,
"scoreError" : 153.63963039282476,
"scoreConfidence" : [
199.5312776467254,
506.8105384323749
],
"scorePercentiles" : {
"0.0" : 346.30784144346376,
"50.0" : 350.63624399965863,
"90.0" : 362.5686386755281,
"95.0" : 362.5686386755281,
"99.0" : 362.5686386755281,
"99.9" : 362.5686386755281,
"99.99" : 362.5686386755281,
"99.999" : 362.5686386755281,
"99.9999" : 362.5686386755281,
"100.0" : 362.5686386755281
},
"scoreUnit" : "ops/s",
"rawData" : [
[
350.63624399965863,
346.30784144346376,
362.5686386755281
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.ForkManyBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 560.9440904289359,
"scoreError" : 81.69753311576936,
"scoreConfidence" : [
479.2465573131665,
642.6416235447052
],
"scorePercentiles" : {
"0.0" : 557.3632481602248,
"50.0" : 559.5039214430917,
"90.0" : 565.9651016834912,
"95.0" : 565.9651016834912,
"99.0" : 565.9651016834912,
"99.9" : 565.9651016834912,
"99.99" : 565.9651016834912,
"99.999" : 565.9651016834912,
"99.9999" : 565.9651016834912,
"100.0" : 565.9651016834912
},
"scoreUnit" : "ops/s",
"rawData" : [
[
557.3632481602248,
565.9651016834912,
559.5039214430917
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.InterruptBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 4238.649062777472,
"scoreError" : 214.76059964906509,
"scoreConfidence" : [
4023.888463128407,
4453.409662426537
],
"scorePercentiles" : {
"0.0" : 4225.4526644400175,
"50.0" : 4242.424944587798,
"90.0" : 4248.069579304602,
"95.0" : 4248.069579304602,
"99.0" : 4248.069579304602,
"99.9" : 4248.069579304602,
"99.99" : 4248.069579304602,
"99.999" : 4248.069579304602,
"99.9999" : 4248.069579304602,
"100.0" : 4248.069579304602
},
"scoreUnit" : "ops/s",
"rawData" : [
[
4225.4526644400175,
4248.069579304602,
4242.424944587798
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.InterruptBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 4069.771089049933,
"scoreError" : 325.0581912095991,
"scoreConfidence" : [
3744.712897840334,
4394.829280259532
],
"scorePercentiles" : {
"0.0" : 4052.101008974351,
"50.0" : 4069.4797495698554,
"90.0" : 4087.7325086055916,
"95.0" : 4087.7325086055916,
"99.0" : 4087.7325086055916,
"99.9" : 4087.7325086055916,
"99.99" : 4087.7325086055916,
"99.999" : 4087.7325086055916,
"99.9999" : 4087.7325086055916,
"100.0" : 4087.7325086055916
},
"scoreUnit" : "ops/s",
"rawData" : [
[
4069.4797495698554,
4052.101008974351,
4087.7325086055916
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.NarrowBindBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 9695.552387788419,
"scoreError" : 914.7115348892941,
"scoreConfidence" : [
8780.840852899124,
10610.263922677714
],
"scorePercentiles" : {
"0.0" : 9651.78998404507,
"50.0" : 9684.608283051293,
"90.0" : 9750.258896268893,
"95.0" : 9750.258896268893,
"99.0" : 9750.258896268893,
"99.9" : 9750.258896268893,
"99.99" : 9750.258896268893,
"99.999" : 9750.258896268893,
"99.9999" : 9750.258896268893,
"100.0" : 9750.258896268893
},
"scoreUnit" : "ops/s",
"rawData" : [
[
9684.608283051293,
9750.258896268893,
9651.78998404507
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.NarrowBindBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 14495.432317934225,
"scoreError" : 102.59228643458863,
"scoreConfidence" : [
14392.840031499636,
14598.024604368813
],
"scorePercentiles" : {
"0.0" : 14489.602898054958,
"50.0" : 14495.869860915678,
"90.0" : 14500.824194832037,
"95.0" : 14500.824194832037,
"99.0" : 14500.824194832037,
"99.9" : 14500.824194832037,
"99.99" : 14500.824194832037,
"99.999" : 14500.824194832037,
"99.9999" : 14500.824194832037,
"100.0" : 14500.824194832037
},
"scoreUnit" : "ops/s",
"rawData" : [
[
14495.869860915678,
14489.602898054958,
14500.824194832037
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.NarrowBindMapBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1462.0559023901749,
"scoreError" : 725.5981526297684,
"scoreConfidence" : [
736.4577497604065,
2187.6540550199434
],
"scorePercentiles" : {
"0.0" : 1416.409883982856,
"50.0" : 1480.4992803383968,
"90.0" : 1489.2585428492716,
"95.0" : 1489.2585428492716,
"99.0" : 1489.2585428492716,
"99.9" : 1489.2585428492716,
"99.99" : 1489.2585428492716,
"99.999" : 1489.2585428492716,
"99.9999" : 1489.2585428492716,
"100.0" : 1489.2585428492716
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1489.2585428492716,
1480.4992803383968,
1416.409883982856
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.NarrowBindMapBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1725.8002636269046,
"scoreError" : 9.238064252379067,
"scoreConfidence" : [
1716.5621993745256,
1735.0383278792835
],
"scorePercentiles" : {
"0.0" : 1725.3997282583398,
"50.0" : 1725.6316294160686,
"90.0" : 1726.3694332063048,
"95.0" : 1726.3694332063048,
"99.0" : 1726.3694332063048,
"99.9" : 1726.3694332063048,
"99.99" : 1726.3694332063048,
"99.999" : 1726.3694332063048,
"99.9999" : 1726.3694332063048,
"100.0" : 1726.3694332063048
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1725.6316294160686,
1726.3694332063048,
1725.3997282583398
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.PingPongBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 2116.5915525366277,
"scoreError" : 570.7541442157918,
"scoreConfidence" : [
1545.837408320836,
2687.3456967524194
],
"scorePercentiles" : {
"0.0" : 2081.9886760825816,
"50.0" : 2124.90803313576,
"90.0" : 2142.8779483915414,
"95.0" : 2142.8779483915414,
"99.0" : 2142.8779483915414,
"99.9" : 2142.8779483915414,
"99.99" : 2142.8779483915414,
"99.999" : 2142.8779483915414,
"99.9999" : 2142.8779483915414,
"100.0" : 2142.8779483915414
},
"scoreUnit" : "ops/s",
"rawData" : [
[
2124.90803313576,
2081.9886760825816,
2142.8779483915414
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.PingPongBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 2055.2119467993384,
"scoreError" : 558.3169690415791,
"scoreConfidence" : [
1496.8949777577593,
2613.5289158409178
],
"scorePercentiles" : {
"0.0" : 2021.0052107101583,
"50.0" : 2064.6353069486513,
"90.0" : 2079.9953227392057,
"95.0" : 2079.9953227392057,
"99.0" : 2079.9953227392057,
"99.9" : 2079.9953227392057,
"99.99" : 2079.9953227392057,
"99.999" : 2079.9953227392057,
"99.9999" : 2079.9953227392057,
"100.0" : 2079.9953227392057
},
"scoreUnit" : "ops/s",
"rawData" : [
[
2064.6353069486513,
2021.0052107101583,
2079.9953227392057
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.ProducerConsumerBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1776.3467624025197,
"scoreError" : 418.84940264378156,
"scoreConfidence" : [
1357.4973597587382,
2195.1961650463013
],
"scorePercentiles" : {
"0.0" : 1749.9206419483637,
"50.0" : 1787.7322298911424,
"90.0" : 1791.3874153680533,
"95.0" : 1791.3874153680533,
"99.0" : 1791.3874153680533,
"99.9" : 1791.3874153680533,
"99.99" : 1791.3874153680533,
"99.999" : 1791.3874153680533,
"99.9999" : 1791.3874153680533,
"100.0" : 1791.3874153680533
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1787.7322298911424,
1791.3874153680533,
1749.9206419483637
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.ProducerConsumerBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1732.8468754401135,
"scoreError" : 1053.2895618561845,
"scoreConfidence" : [
679.557313583929,
2786.136437296298
],
"scorePercentiles" : {
"0.0" : 1695.307692283625,
"50.0" : 1703.9052204489988,
"90.0" : 1799.3277135877167,
"95.0" : 1799.3277135877167,
"99.0" : 1799.3277135877167,
"99.9" : 1799.3277135877167,
"99.99" : 1799.3277135877167,
"99.999" : 1799.3277135877167,
"99.9999" : 1799.3277135877167,
"100.0" : 1799.3277135877167
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1695.307692283625,
1703.9052204489988,
1799.3277135877167
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.SemaphoreBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1195.800695331089,
"scoreError" : 284.81573174378593,
"scoreConfidence" : [
910.984963587303,
1480.616427074875
],
"scorePercentiles" : {
"0.0" : 1183.8510005130754,
"50.0" : 1190.0866965268312,
"90.0" : 1213.46438895336,
"95.0" : 1213.46438895336,
"99.0" : 1213.46438895336,
"99.9" : 1213.46438895336,
"99.99" : 1213.46438895336,
"99.999" : 1213.46438895336,
"99.9999" : 1213.46438895336,
"100.0" : 1213.46438895336
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1183.8510005130754,
1190.0866965268312,
1213.46438895336
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.SemaphoreBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1210.7883697745276,
"scoreError" : 318.9531275902871,
"scoreConfidence" : [
891.8352421842405,
1529.7414973648147
],
"scorePercentiles" : {
"0.0" : 1198.83258302978,
"50.0" : 1202.679174506088,
"90.0" : 1230.8533517877147,
"95.0" : 1230.8533517877147,
"99.0" : 1230.8533517877147,
"99.9" : 1230.8533517877147,
"99.99" : 1230.8533517877147,
"99.999" : 1230.8533517877147,
"99.9999" : 1230.8533517877147,
"100.0" : 1230.8533517877147
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1202.679174506088,
1198.83258302978,
1230.8533517877147
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.SuspensionBench.forkKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 64079.93298454915,
"scoreError" : 16249.000179985742,
"scoreConfidence" : [
47830.93280456341,
80328.93316453489
],
"scorePercentiles" : {
"0.0" : 63108.03457689964,
"50.0" : 64274.60936841433,
"90.0" : 64857.155008333495,
"95.0" : 64857.155008333495,
"99.0" : 64857.155008333495,
"99.9" : 64857.155008333495,
"99.99" : 64857.155008333495,
"99.999" : 64857.155008333495,
"99.9999" : 64857.155008333495,
"100.0" : 64857.155008333495
},
"scoreUnit" : "ops/s",
"rawData" : [
[
64274.60936841433,
64857.155008333495,
63108.03457689964
]
]
},
"secondaryMetrics" : {
}
},
{
"jmhVersion" : "1.36",
"benchmark" : "kyo.bench.SuspensionBench.syncKyo",
"mode" : "thrpt",
"threads" : 1,
"forks" : 1,
"jvm" : "/home/runner/.jabba/jdk/openjdk@1.17.0/bin/java",
"jvmArgs" : [
"-Dcats.effect.tracing.mode=DISABLED"
],
"jdkVersion" : "17",
"vmName" : "OpenJDK 64-Bit Server VM",
"vmVersion" : "17+35-2724",
"warmupIterations" : 10,
"warmupTime" : "1 s",
"warmupBatchSize" : 1,
"measurementIterations" : 3,
"measurementTime" : "1 s",
"measurementBatchSize" : 1,
"primaryMetric" : {
"score" : 1179236.1478922393,
"scoreError" : 8935.735586270863,
"scoreConfidence" : [
1170300.4123059683,
1188171.8834785102
],
"scorePercentiles" : {
"0.0" : 1178883.798627213,
"50.0" : 1179029.191475592,
"90.0" : 1179795.4535739128,
"95.0" : 1179795.4535739128,
"99.0" : 1179795.4535739128,
"99.9" : 1179795.4535739128,
"99.99" : 1179795.4535739128,
"99.999" : 1179795.4535739128,
"99.9999" : 1179795.4535739128,
"100.0" : 1179795.4535739128
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1179795.4535739128,
1179029.191475592,
1178883.798627213
]
]
},
"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,45,3,'all')
f(1,0,45,1,'java/lang/Thread.run')
f(2,0,45,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,45,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,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,16,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,0,16,2,'kyo.bench.Bench$$anon$1')
f(16,16,18,1,'kyo/bench/Bench.runLoop$2')
f(17,16,4,1,'kyo/bench/Bench$$anon$1.apply')
f(18,16,1,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,16,1,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c82da8.apply')
f(20,16,1,1,'kyo/bench/Bench.$anonfun$2')
f(21,16,1,1,'kyo/concurrent/fibers$Fiber.block')
f(22,16,1,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,17,3,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,17,3,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,17,3,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(21,17,3,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,17,2,2,'kyo.concurrent.scheduler.IOTask')
f(22,19,1,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,19,1,2,'kyo.concurrent.fibers$Fiber')
f(17,20,14,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,20,14,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,20,14,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,20,14,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,20,7,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,20,7,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,20,2,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,22,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,22,5,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,27,5,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,32,2,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,32,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,32,2,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,34,3,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,34,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,34,1,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,35,2,1,'kyo/locals$Locals$.save')
f(18,35,2,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/Scheduler$.loadAvg')
f(7,37,1,1,'java/util/concurrent/CopyOnWriteArrayList.iterator')
f(8,37,1,2,'java.util.concurrent.CopyOnWriteArrayList$COWIterator')
f(4,38,7,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,38,7,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,38,7,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,38,7,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,38,7,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,38,7,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,38,7,1,'scala/runtime/ObjectRef.create')
f(11,38,7,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: 1312px}
</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(82);
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,204,3,'all')
f(1,0,5,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,5,3,'thread_native_entry(Thread*)')
f(3,0,5,4,'Thread::call_run()')
f(4,0,5,4,'JavaThread::thread_main_inner()')
f(5,0,5,4,'CompileBroker::compiler_thread_loop()')
f(6,0,5,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,5,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,5,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::gather_lrg_masks(bool)')
f(9,1,1,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::build_loop_tree()')
f(9,2,3,4,'ParseGenerator::generate(JVMState*)')
f(10,2,3,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(11,2,3,4,'Parse::do_all_blocks()')
f(12,2,3,4,'Parse::do_one_block()')
f(13,2,3,4,'Parse::do_call()')
f(14,2,3,4,'PredictedCallGenerator::generate(JVMState*)')
f(15,2,3,4,'ParseGenerator::generate(JVMState*)')
f(16,2,3,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(17,2,3,4,'Parse::do_all_blocks()')
f(18,2,3,4,'Parse::do_one_block()')
f(19,2,3,4,'Parse::do_call()')
f(20,2,1,4,'GraphKit::record_profiled_arguments_for_speculation(ciMethod*, Bytecodes::Code)')
f(21,2,1,4,'TypeFunc::make(ciMethod*)')
f(22,2,1,4,'Type::hashcons()')
f(23,2,1,4,'Dict::Insert(void*, void*, bool)')
f(24,2,1,4,'Dict::doubhash()')
f(20,3,2,4,'PredictedCallGenerator::generate(JVMState*)')
f(21,3,2,4,'ParseGenerator::generate(JVMState*)')
f(22,3,2,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(23,3,2,4,'Parse::do_all_blocks()')
f(24,3,2,4,'Parse::do_one_block()')
f(25,3,2,4,'Parse::do_call()')
f(26,3,2,4,'ParseGenerator::generate(JVMState*)')
f(27,3,2,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(28,3,2,4,'Parse::do_all_blocks()')
f(29,3,2,4,'Parse::do_one_block()')
f(30,3,2,4,'Parse::do_call()')
f(31,3,2,4,'ParseGenerator::generate(JVMState*)')
f(32,3,2,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(33,3,2,4,'Parse::do_all_blocks()')
f(34,3,2,4,'Parse::do_one_block()')
f(35,3,2,4,'Parse::do_call()')
f(36,3,1,4,'ParseGenerator::generate(JVMState*)')
f(37,3,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(38,3,1,4,'Parse::do_all_blocks()')
f(39,3,1,4,'Parse::do_one_block()')
f(40,3,1,4,'Parse::do_call()')
f(41,3,1,4,'ParseGenerator::generate(JVMState*)')
f(42,3,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(43,3,1,4,'Parse::do_all_blocks()')
f(44,3,1,4,'Parse::do_one_block()')
f(45,3,1,4,'Parse::return_current(Node*)')
f(46,3,1,4,'Parse::call_register_finalizer()')
f(47,3,1,4,'PhaseTransform::longcon(long)')
f(48,3,1,4,'Type::hashcons()')
f(49,3,1,4,'TypeLong::hash() const')
f(36,4,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(37,4,1,4,'ParseGenerator::generate(JVMState*)')
f(38,4,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(39,4,1,4,'Parse::do_all_blocks()')
f(40,4,1,4,'Parse::do_one_block()')
f(41,4,1,4,'Parse::do_call()')
f(42,4,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(43,4,1,4,'ParseGenerator::generate(JVMState*)')
f(44,4,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(45,4,1,4,'Parse::do_all_blocks()')
f(46,4,1,4,'Parse::do_one_block()')
f(47,4,1,4,'Parse::do_call()')
f(48,4,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(49,4,1,4,'ParseGenerator::generate(JVMState*)')
f(50,4,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(51,4,1,4,'Parse::do_all_blocks()')
f(52,4,1,4,'Parse::do_one_block()')
f(53,4,1,4,'Parse::do_call()')
f(54,4,1,4,'ParseGenerator::generate(JVMState*)')
f(55,4,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(56,4,1,4,'Parse::do_all_blocks()')
f(57,4,1,4,'Parse::do_one_block()')
f(58,4,1,4,'Parse::do_call()')
f(59,4,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(60,4,1,4,'ParseGenerator::generate(JVMState*)')
f(61,4,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(62,4,1,4,'Parse::do_all_blocks()')
f(63,4,1,4,'Parse::do_one_block()')
f(64,4,1,4,'Parse::do_call()')
f(65,4,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(66,4,1,4,'ParseGenerator::generate(JVMState*)')
f(67,4,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(68,4,1,4,'Parse::do_all_blocks()')
f(69,4,1,4,'Parse::do_one_block()')
f(70,4,1,4,'Parse::do_call()')
f(71,4,1,4,'LibraryIntrinsic::generate(JVMState*)')
f(72,4,1,4,'LibraryCallKit::inline_unsafe_access(bool, BasicType, LibraryCallKit::AccessKind, bool) [clone .part.0]')
f(73,4,1,4,'GraphKit::access_load_at(Node*, Node*, TypePtr const*, Type const*, BasicType, unsigned long)')
f(74,4,1,4,'BarrierSetC2::load_at(C2Access&, Type const*) const')
f(75,4,1,4,'G1BarrierSetC2::load_at_resolved(C2Access&, Type const*) const')
f(76,4,1,4,'BarrierSetC2::load_at_resolved(C2Access&, Type const*) const')
f(77,4,1,4,'GraphKit::make_load(Node*, Node*, Type const*, BasicType, int, MemNode::MemOrd, LoadNode::ControlDependency, bool, bool, bool, bool, unsigned char)')
f(78,4,1,4,'PhaseGVN::transform_no_reclaim(Node*)')
f(79,4,1,4,'LoadNode::Ideal(PhaseGVN*, bool)')
f(80,4,1,4,'TypePtr::xmeet(Type const*) const')
f(81,4,1,3,'__tls_get_addr')
f(1,5,199,1,'java/lang/Thread.run')
f(2,5,199,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,5,199,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,5,66,1,'java/util/concurrent/FutureTask.run')
f(5,5,66,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,5,66,1,'java/util/concurrent/FutureTask.run')
f(7,5,66,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,5,66,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,5,66,1,'java/lang/reflect/Method.invoke')
f(10,5,66,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,5,66,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,5,66,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,5,66,1,'kyo/bench/jmh_generated/BroadFlatMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,5,66,1,'kyo/bench/jmh_generated/BroadFlatMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,6,65,1,'kyo/bench/Bench.forkKyo')
f(16,6,64,1,'kyo/bench/Bench.runLoop$2',0,1,0)
f(17,7,27,1,'kyo/bench/Bench$$anon$1.apply')
f(18,7,27,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,7,27,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,7,26,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply',1,0,0)
f(21,7,26,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',1,0,0)
f(22,7,1,2,'kyo/concurrent/scheduler/IOTask.<init>',1,0,0)
f(23,7,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(22,8,25,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,8,25,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,8,25,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,8,25,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,8,25,1,'jdk/internal/misc/Unsafe.unpark')
f(27,8,25,3,'pthread_cond_signal')
f(28,11,22,5,'entry_SYSCALL_64_after_hwframe')
f(29,11,22,5,'do_syscall_64')
f(30,11,22,5,'__x64_sys_futex')
f(31,11,22,5,'do_futex')
f(32,11,22,5,'futex_wake')
f(33,12,21,5,'wake_up_q')
f(34,12,21,5,'_raw_spin_unlock_irqrestore')
f(20,33,1,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',1,0,0)
f(21,33,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(17,34,36,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply',1,0,0)
f(18,34,36,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply',1,0,0)
f(19,34,36,1,'kyo/concurrent/scheduler/IOPromise.block',1,0,0)
f(20,34,36,1,'kyo/concurrent/scheduler/IOPromise.loop$4',1,0,0)
f(21,35,35,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,35,35,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,36,34,1,'java/util/concurrent/locks/LockSupport.park')
f(24,36,34,1,'jdk/internal/misc/Unsafe.park')
f(25,38,3,3,'Unsafe_Park')
f(26,39,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,39,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,39,1,5,'do_syscall_64')
f(29,39,1,5,'__x64_sys_futex')
f(30,39,1,5,'do_futex')
f(31,39,1,5,'hash_futex')
f(26,40,1,3,'pthread_mutex_unlock')
f(25,41,29,3,'[unknown]')
f(26,41,28,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,42,27,5,'entry_SYSCALL_64_after_hwframe')
f(28,42,27,5,'do_syscall_64')
f(29,42,25,5,'__x64_sys_futex')
f(30,42,25,5,'do_futex')
f(31,42,25,5,'futex_wait')
f(32,43,24,5,'futex_wait_queue_me')
f(33,43,24,5,'schedule')
f(34,44,23,5,'__schedule')
f(35,44,23,5,'finish_task_switch.isra.0')
f(29,67,1,5,'syscall_enter_from_user_mode')
f(29,68,1,5,'syscall_exit_to_user_mode')
f(30,68,1,5,'exit_to_user_mode_prepare')
f(31,68,1,5,'exit_to_user_mode_loop')
f(32,68,1,5,'__rseq_handle_notify_resume')
f(33,68,1,5,'rseq_ip_fixup')
f(26,69,1,3,'pthread_cond_wait')
f(16,70,1,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,70,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(4,71,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,71,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,71,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,71,1,1,'java/lang/Thread.sleep')
f(8,71,1,4,'AccessInternal::PostRuntimeDispatch<G1BarrierSet::AccessBarrier<548964ul, G1BarrierSet>, (AccessInternal::BarrierType)2, 548964ul>::oop_access_barrier(void*)')
f(4,72,132,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,72,132,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,72,132,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,72,93,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,72,93,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,72,63,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,72,63,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,72,63,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e9f8.apply')
f(12,72,63,1,'kyo/bench/Bench.$anonfun$1')
f(13,72,63,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,72,63,1,'kyo/bench/BroadFlatMapBench.kyoBench')
f(15,72,63,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(16,72,27,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(17,72,27,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(18,72,27,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(19,72,27,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,72,9,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(21,72,9,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(22,72,9,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(23,72,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,72,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,72,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(26,72,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,72,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,72,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,72,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,72,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,72,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,72,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,72,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,73,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,73,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,73,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(32,73,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(31,74,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,74,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,74,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,74,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(32,75,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,75,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,75,1,2,'scala/math/BigInt.<init>',1,0,0)
f(24,76,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,76,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,76,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(27,76,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,76,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,76,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,76,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,76,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(32,76,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(33,76,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(25,77,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,77,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,77,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(28,77,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,77,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,77,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$56.0x0000000800d45000.apply')
f(34,77,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,77,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,77,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,78,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,78,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,78,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(29,78,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,78,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,78,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,78,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(33,78,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,78,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,78,1,2,'scala/math/BigInt$.apply',1,0,0)
f(27,79,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,79,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,79,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,79,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,79,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,79,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,79,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,79,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(28,80,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,80,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,80,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
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.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,80,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(35,80,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,80,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,81,18,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,81,9,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(22,81,9,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(23,81,9,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,81,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,81,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,81,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(27,81,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,81,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,81,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,81,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,81,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,81,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,81,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,81,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(35,81,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,81,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,81,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(39,81,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,81,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(42,81,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(43,81,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(44,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(45,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,83,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,83,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,83,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(32,83,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,83,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,83,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,83,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,83,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,84,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,84,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(32,84,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(33,84,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(34,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,85,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,85,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(37,85,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,85,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,85,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(41,85,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,85,1,2,'scala/math/BigInt$.apply',1,0,0)
f(44,85,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(25,86,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,86,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,86,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(28,86,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,86,3,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$56.0x0000000800d45000.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,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,86,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,86,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(30,87,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,87,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,87,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,87,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,88,1,2,'scala/math/BigInt$.apply',1,0,0)
f(26,89,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,89,1,2,'scala/math/BigInt$.apply',1,0,0)
f(28,89,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(21,90,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,90,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,90,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,90,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(25,90,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,90,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,90,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,90,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,90,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,90,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,90,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,90,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,90,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',3,0,0)
f(34,90,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',3,0,0)
f(35,91,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',2,0,0)
f(28,93,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,93,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,93,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,93,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,93,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,93,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,93,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,93,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,93,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,93,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(38,93,1,2,'scala/math/BigInt.<init>',1,0,0)
f(29,94,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,94,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,94,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(32,94,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d44400.newInvokeSpecial',1,0,0)
f(33,94,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.<init>',1,0,0)
f(23,95,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,95,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,95,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(26,95,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,95,3,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.0x0000000800d45000.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.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,95,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(34,95,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,95,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,95,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,96,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,96,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,96,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,96,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,96,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,96,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,96,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,96,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,96,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,97,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,97,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,98,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,98,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,98,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,98,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(28,98,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(29,98,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(16,99,36,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(17,99,13,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(18,99,13,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(19,99,13,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(20,99,13,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,99,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(22,99,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(23,100,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,100,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,100,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,100,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,100,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(28,100,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,100,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,100,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,100,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,100,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(33,100,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,100,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,100,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,100,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,101,1,2,'scala/math/BigInt$.apply',1,0,0)
f(26,102,4,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.0x0000000800d45000.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.kyoFib$1')
f(32,102,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,102,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,103,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,103,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,103,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,103,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,103,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,104,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,104,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,104,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,104,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,104,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,104,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,104,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(35,104,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,104,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,104,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,105,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$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.0x0000000800d45000.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,2,'scala/math/BigInt$.apply',1,0,0)
f(38,105,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(21,106,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,106,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,106,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(24,106,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,106,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,106,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(28,106,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,106,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,106,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(33,106,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,106,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,106,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(37,106,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,106,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,106,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(42,106,1,2,'scala/math/BigInt.<init>',1,0,0)
f(22,107,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,107,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,107,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(25,107,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,107,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,107,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,107,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(29,107,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,107,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,107,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,107,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(33,107,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,107,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,107,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,107,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,107,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(31,108,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,108,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,108,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,108,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,109,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,109,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,109,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,109,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,109,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(32,109,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,109,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,109,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,109,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(36,109,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,109,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,110,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,110,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,110,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,111,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,111,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(17,112,23,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(18,112,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(19,112,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(20,112,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(21,112,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,112,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,112,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(24,112,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,112,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,112,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,112,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(28,112,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d44400.newInvokeSpecial',1,0,0)
f(29,112,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.<init>',1,0,0)
f(27,113,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,113,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(29,113,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,113,2,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.0x0000000800d45000.apply')
f(33,113,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,113,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,114,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,114,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,114,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(34,114,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,114,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,114,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,115,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,115,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,115,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(25,115,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,115,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,115,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,115,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(29,115,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,115,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,115,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,115,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,115,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,115,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(35,115,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(36,115,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(27,116,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,116,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,116,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,116,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,116,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,116,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,116,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,116,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,116,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,117,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,117,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,117,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,117,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,117,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,117,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(23,118,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,118,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,118,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(26,118,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
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.0x0000000800d45000.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.kyoFib$1')
f(33,118,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,118,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,118,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(18,119,16,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(19,119,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(20,119,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(21,119,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(22,119,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,119,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,119,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(25,119,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,119,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,119,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,119,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(29,119,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,119,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,119,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,119,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(33,119,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$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,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,120,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,120,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,120,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,120,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,120,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(34,120,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,120,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(38,120,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d44400.newInvokeSpecial',1,0,0)
f(39,120,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.<init>',1,0,0)
f(23,121,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,121,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,121,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,121,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(27,121,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,121,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,121,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,121,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,121,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,121,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,121,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,121,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,121,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(36,121,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,121,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,122,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,122,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,122,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(28,122,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,122,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,122,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,122,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,122,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,122,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(34,122,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d44400.newInvokeSpecial',1,0,0)
f(35,122,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.<init>',1,0,0)
f(26,123,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,123,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,123,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,123,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,123,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,123,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,123,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,123,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,123,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(35,123,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,123,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,123,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(19,124,11,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,124,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(21,124,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(22,124,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(23,124,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,124,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,124,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(26,124,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(27,125,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,125,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,125,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,125,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,125,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(32,125,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,125,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(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.0x0000000800d45000.apply')
f(29,126,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,126,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,126,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,126,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.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.kyoFib$1')
f(36,126,1,2,'scala/math/BigInt$.apply',1,0,0)
f(20,127,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,127,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(22,127,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(23,127,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,127,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,127,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,127,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(27,127,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,127,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,127,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,127,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,127,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,127,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,127,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,128,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,128,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,128,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,128,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,128,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,128,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,129,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,129,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,129,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,129,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,129,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,130,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,130,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(21,131,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,131,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,131,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(24,131,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,131,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,131,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,131,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,131,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,131,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(22,132,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,132,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,132,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$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.kyoFib$1')
f(28,132,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,132,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,132,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,132,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,132,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,132,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,133,2,2,'scala/math/BigInt$.apply',2,0,0)
f(22,133,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(23,133,2,2,'scala/math/BigInt.<init>',2,0,0)
f(9,135,1,1,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf')
f(9,136,29,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,136,29,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,136,29,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,136,29,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,136,29,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,136,29,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,136,29,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,136,29,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,136,29,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,136,29,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,136,29,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,136,29,1,'jdk/internal/misc/Unsafe.unpark')
f(21,136,1,4,'ThreadsListHandle::~ThreadsListHandle()')
f(21,137,3,3,'Unsafe_Unpark')
f(22,138,1,4,'SafeThreadsListPtr::release_stable_list()')
f(22,139,1,3,'pthread_mutex_lock')
f(21,140,25,3,'pthread_cond_signal')
f(22,140,25,5,'entry_SYSCALL_64_after_hwframe')
f(23,140,25,5,'do_syscall_64')
f(24,140,25,5,'__x64_sys_futex')
f(25,140,25,5,'do_futex')
f(26,140,25,5,'futex_wake')
f(27,141,24,5,'wake_up_q')
f(28,141,24,5,'_raw_spin_unlock_irqrestore')
f(7,165,2,2,'kyo/concurrent/scheduler/Queue.poll',1,0,0)
f(8,165,2,2,'kyo/concurrent/scheduler/Queue.modify',1,0,0)
f(9,165,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(9,166,1,1,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47148.apply')
f(10,166,1,1,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1')
f(11,166,1,1,'scala/collection/mutable/PriorityQueue.dequeue')
f(7,167,37,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,167,37,1,'kyo/concurrent/scheduler/Worker.park')
f(9,167,37,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,167,37,1,'jdk/internal/misc/Unsafe.park')
f(11,168,5,3,'Unsafe_Park')
f(12,168,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,169,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,169,1,5,'do_syscall_64')
f(15,169,1,5,'__x64_sys_futex')
f(16,169,1,5,'do_futex')
f(17,169,1,5,'hash_futex')
f(12,170,2,4,'Parker::park(bool, long)')
f(12,172,1,3,'__tls_get_addr')
f(11,173,31,3,'[unknown]')
f(12,173,28,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,174,27,5,'entry_SYSCALL_64_after_hwframe')
f(14,174,27,5,'do_syscall_64')
f(15,174,22,5,'__x64_sys_futex')
f(16,174,21,5,'do_futex')
f(17,174,21,5,'futex_wait')
f(18,174,18,5,'futex_wait_queue_me')
f(19,175,2,5,'hrtimer_sleeper_start_expires')
f(20,175,2,5,'_raw_spin_unlock_irqrestore')
f(19,177,15,5,'schedule')
f(20,177,15,5,'__schedule')
f(21,178,14,5,'finish_task_switch.isra.0')
f(18,192,1,5,'hrtimer_cancel')
f(19,192,1,5,'_raw_spin_unlock_irqrestore')
f(18,193,2,5,'hrtimer_init_sleeper')
f(19,194,1,5,'__hrtimer_init')
f(16,195,1,5,'get_timespec64')
f(17,195,1,5,'copy_user_enhanced_fast_string')
f(15,196,5,5,'syscall_exit_to_user_mode')
f(16,196,5,5,'exit_to_user_mode_prepare')
f(17,196,5,5,'exit_to_user_mode_loop')
f(18,198,2,5,'__rseq_handle_notify_resume')
f(18,200,1,5,'mem_cgroup_handle_over_high')
f(12,201,3,3,'pthread_cond_timedwait')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 16px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(1);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,0,2,'all')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 800px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(50);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,299,3,'all')
f(1,0,6,3,'[unknown_Java]')
f(2,0,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(1,6,293,1,'java/lang/Thread.run')
f(2,6,293,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,6,293,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,6,293,1,'java/util/concurrent/FutureTask.run')
f(5,6,293,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,6,293,1,'java/util/concurrent/FutureTask.run')
f(7,6,293,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,6,293,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,6,293,1,'java/lang/reflect/Method.invoke')
f(10,6,293,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,6,293,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,6,293,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,6,293,1,'kyo/bench/jmh_generated/BroadFlatMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,6,293,1,'kyo/bench/jmh_generated/BroadFlatMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,6,293,1,'kyo/bench/Bench.syncKyo')
f(16,6,293,1,'kyo/bench/BroadFlatMapBench.kyoBench')
f(17,6,293,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(18,6,107,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(19,6,107,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(20,6,107,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(21,7,106,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,7,38,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,7,38,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(24,7,38,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,7,38,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,7,16,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,7,16,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,7,16,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,7,16,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,7,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,7,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,7,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,7,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,7,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(35,7,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(36,8,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,8,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,8,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,8,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(40,8,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(41,8,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(39,9,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,9,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,9,1,2,'scala/math/BigInt$.apply',1,0,0)
f(42,9,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,10,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,10,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,10,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,10,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,10,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,10,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,10,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,10,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,11,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,11,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,11,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,11,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(36,12,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,12,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,12,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,12,2,2,'scala/math/BigInt$.apply',2,0,0)
f(40,12,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(30,14,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,14,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,14,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,14,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,14,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,14,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,14,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,14,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,14,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,14,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,14,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,14,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,15,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,15,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,15,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,15,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,15,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,15,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,15,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,15,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,15,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,17,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,18,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,19,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,19,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,19,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,20,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,20,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,20,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,20,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,20,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,20,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,20,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,20,1,2,'scala/math/BigInt$.apply',1,0,0)
f(43,20,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,21,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,21,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,21,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,22,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,22,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,23,22,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,23,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,23,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,23,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,23,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,23,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,23,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,23,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,23,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,23,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,23,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,23,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,23,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,23,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(40,23,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(41,23,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(35,24,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,24,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,24,2,2,'scala/math/BigInt$.apply',2,0,0)
f(38,24,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(35,26,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,27,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,27,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,27,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,27,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,27,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,27,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,27,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,27,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,28,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,28,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,29,16,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,29,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,29,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,29,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,29,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,29,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,29,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,29,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,29,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,29,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,29,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,29,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$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,'scala/math/BigInt$.apply',1,0,0)
f(43,29,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(36,30,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,30,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,30,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,30,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,30,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,30,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,31,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,31,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,32,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,32,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,32,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,32,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,32,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,32,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,32,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,32,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,32,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,32,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,32,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,33,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,33,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(36,33,1,2,'scala/math/BigInt.<init>',1,0,0)
f(28,34,11,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,34,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,34,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,34,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,34,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,34,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,34,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,34,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,34,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,34,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,35,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,35,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,35,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,35,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,35,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,35,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,35,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,36,4,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,37,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(38,38,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,38,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,39,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,39,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,39,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,39,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,39,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(40,39,1,2,'scala/math/BigInt.<init>',1,0,0)
f(34,40,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,40,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,41,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,41,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,41,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,41,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,41,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,41,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,41,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,41,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,41,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,41,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(39,41,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,42,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,43,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,43,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,43,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,43,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(30,44,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,44,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,44,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,44,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,44,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,44,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(22,45,68,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,45,25,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,45,25,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(25,45,25,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,45,25,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,45,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,45,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,45,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,45,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,45,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,45,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,45,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,45,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,45,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,46,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,46,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,46,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,46,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,46,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,46,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,46,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,46,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,46,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,47,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,47,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,47,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,47,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,47,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,47,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,48,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,48,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,48,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,48,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,48,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,48,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,48,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,48,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,48,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,49,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,49,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,49,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,49,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,49,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,49,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(27,50,20,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,50,9,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(29,50,9,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(30,51,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,51,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,51,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,51,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,51,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,51,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,51,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(37,51,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(38,53,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,53,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,54,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,54,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,54,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,54,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,54,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,54,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,54,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(32,55,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,55,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,55,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,55,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,55,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,57,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,57,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,57,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,57,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,57,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,57,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,58,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,58,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,59,11,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,59,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,59,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,59,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,59,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,59,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,59,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,59,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,59,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,59,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,59,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,59,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,59,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,59,1,2,'scala/math/BigInt.<init>',1,0,0)
f(37,60,2,2,'scala/math/BigInt$.apply',2,0,0)
f(33,62,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,62,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,62,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,62,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,62,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,62,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,62,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,63,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,63,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,63,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,63,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,63,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,63,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,64,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,64,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,64,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,64,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,64,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,64,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,64,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,64,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,64,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,64,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,64,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,64,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,64,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,64,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,64,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(44,64,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(45,64,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(46,64,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(47,64,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$1',1,0,0)
f(30,65,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,65,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,65,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,65,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,65,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,65,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,65,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,65,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,65,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,65,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,66,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,66,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,66,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,66,3,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(35,67,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,67,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,67,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,67,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(38,68,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,68,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,69,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,69,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(23,70,43,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,70,18,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,70,18,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(26,70,18,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,70,18,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,70,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(29,70,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(30,70,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(31,71,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,71,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,71,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,71,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$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,'scala/math/BigInt$.apply',1,0,0)
f(38,71,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,72,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,72,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,72,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,72,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,72,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,72,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,72,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,72,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(38,73,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,73,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,74,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,75,13,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,76,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(30,76,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(31,76,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(29,77,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,77,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,77,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,77,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,77,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,77,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,77,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,77,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,77,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,77,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,78,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,78,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,78,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,78,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,78,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,78,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,79,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,79,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,80,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,80,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,80,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,80,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,80,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,80,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,80,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,80,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,80,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,80,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,80,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,81,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,81,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,82,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,82,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,82,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,82,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,82,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,83,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,83,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,83,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,83,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,83,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,84,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,84,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,84,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,84,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,84,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,84,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,84,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,85,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,85,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(33,86,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,86,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,87,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,87,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,88,25,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,88,10,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(26,88,10,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(27,89,9,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(28,90,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,90,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,90,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,90,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,90,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,90,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,90,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,91,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,91,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,91,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,91,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,91,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,91,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,91,1,2,'scala/math/BigInt.<init>',1,0,0)
f(33,92,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,92,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,92,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,92,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,92,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,92,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(39,92,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(40,92,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(41,92,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,93,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,93,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,93,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,93,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,93,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,94,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,94,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,94,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,94,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,94,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,94,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,94,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,94,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,94,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,95,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,95,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,95,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,95,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,95,3,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(35,96,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,96,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,97,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,97,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,97,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(40,97,1,2,'scala/math/BigInt.<init>',1,0,0)
f(25,98,15,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,99,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,99,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,99,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,99,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,99,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,99,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,99,3,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(33,100,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,100,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,100,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,100,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,101,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,101,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,102,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,102,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,102,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,102,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,102,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,102,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,102,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(37,102,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(38,102,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',2,0,0)
f(35,104,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,104,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,105,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,105,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,105,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,105,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,105,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,106,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,106,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,107,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,107,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,107,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,107,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,107,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,107,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,107,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,107,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,107,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,107,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,107,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,108,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,108,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,109,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,109,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,109,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,109,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,109,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,109,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,109,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,109,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,109,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,110,3,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$39.0x0000000800ca1228.apply')
f(30,110,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,110,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,110,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,110,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,110,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,110,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,110,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,110,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,110,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,111,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,111,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,111,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,111,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,111,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,111,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,111,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,111,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,112,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,112,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(18,113,186,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(19,113,74,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(20,113,74,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(21,113,74,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(22,113,74,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,113,24,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,113,24,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(25,113,24,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,113,24,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,113,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,113,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,113,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,113,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,113,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,113,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,113,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,113,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,113,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,113,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,113,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,113,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,113,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(40,113,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(41,113,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',2,0,0)
f(39,115,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,115,2,2,'scala/math/BigInt$.apply',2,0,0)
f(41,115,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(35,117,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,117,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,117,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,117,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(31,118,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,118,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,118,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,118,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.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,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,119,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,119,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(27,120,17,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,120,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,120,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,120,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,120,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,120,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,120,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,120,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,120,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,120,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,120,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,120,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,120,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(43,120,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(44,120,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(36,121,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,121,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,121,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,121,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,121,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,121,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,121,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,122,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,122,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,122,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,122,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,122,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,122,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,122,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,122,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,122,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,122,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,122,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,123,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,123,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(35,123,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(36,123,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(34,124,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,124,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,124,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,125,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,125,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,125,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,126,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,126,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,127,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,127,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,127,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,127,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,127,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,127,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,127,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,127,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,127,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,127,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,127,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,127,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,127,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(37,128,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,129,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,129,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,130,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,130,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,130,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,130,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,130,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,131,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,131,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,131,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,131,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,131,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,131,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,131,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,131,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,131,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,131,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,132,2,2,'scala/math/BigInt$.apply',2,0,0)
f(40,133,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,134,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,134,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,134,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,134,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$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,'scala/math/BigInt$.apply',1,0,0)
f(37,134,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,135,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,135,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,135,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,135,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,135,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,135,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,135,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,135,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(39,135,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(40,135,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(32,136,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,136,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,136,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,136,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,136,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,136,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,136,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,136,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(40,136,1,2,'scala/math/BigInt.<init>',1,0,0)
f(23,137,50,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,137,19,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,137,19,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(26,137,19,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,137,19,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,137,10,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',3,0,0)
f(29,137,10,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',3,0,0)
f(30,139,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(31,140,7,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.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,140,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,140,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,140,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,140,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(41,140,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(42,140,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(43,140,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(44,140,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,141,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,141,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,141,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,141,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(36,142,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,142,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,142,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,142,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,142,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,142,1,2,'scala/math/BigInt.<init>',1,0,0)
f(33,143,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,143,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,143,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,143,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,143,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,143,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,143,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,143,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,143,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,143,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,143,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(44,143,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(45,143,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(46,143,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(47,143,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(48,143,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(49,143,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(39,144,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,144,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,144,1,2,'scala/math/BigInt.<init>',1,0,0)
f(34,145,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,145,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,145,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,146,1,2,'scala/math/BigInt$.apply',1,0,0)
f(28,147,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,147,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,147,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,147,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,147,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,147,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,147,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,147,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,147,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,149,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,149,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,149,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,149,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,149,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,149,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,149,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,149,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,149,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,149,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,149,1,2,'scala/math/BigInt$.apply',1,0,0)
f(44,149,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,150,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,150,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,151,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,151,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,151,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,152,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,152,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,152,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,152,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,152,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,152,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,152,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,152,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,152,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,152,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,152,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,152,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,153,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,153,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,153,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,153,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(30,154,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,154,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,154,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,154,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,154,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,154,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,154,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,154,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(31,155,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,155,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,155,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,155,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,155,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,155,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,155,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,155,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,155,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(40,155,1,2,'scala/math/BigInt.<init>',1,0,0)
f(24,156,31,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,156,11,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(26,156,11,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(27,156,11,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(28,157,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,157,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,157,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,157,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,157,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,157,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,157,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,157,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,157,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,157,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,157,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,157,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,157,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,157,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(42,157,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(43,157,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(44,157,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$1',1,0,0)
f(34,158,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,158,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,158,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,158,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(35,159,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,159,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,159,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,159,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(29,160,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,160,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,160,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,160,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,160,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,161,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,161,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,161,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,161,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,161,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,161,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,162,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,162,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,162,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,162,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,162,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,162,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,164,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,164,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,165,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,165,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,165,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,165,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,166,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,166,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(25,167,20,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,167,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,167,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,167,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,167,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,167,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,167,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,167,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,167,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,167,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,167,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,167,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,167,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,168,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,168,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,168,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,168,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,168,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,168,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,168,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,168,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(31,169,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,169,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,170,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,170,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,170,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(33,171,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,171,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,171,1,2,'scala/math/BigInt.<init>',1,0,0)
f(26,172,15,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,172,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,172,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,172,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,172,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,173,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,173,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,173,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,173,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,173,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,173,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,173,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(31,174,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,174,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(33,174,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(34,175,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(35,176,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,177,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,177,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,177,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,178,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,178,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,178,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,178,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,178,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(40,178,1,2,'scala/math/BigInt.<init>',1,0,0)
f(27,179,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,179,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,179,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,179,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,179,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,179,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,179,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(34,179,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(35,179,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(33,180,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,180,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,180,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,180,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,180,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,180,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,180,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(40,180,1,2,'scala/math/BigInt.<init>',1,0,0)
f(33,181,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,181,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,181,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,181,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,181,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,181,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,182,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,182,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,182,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,182,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,182,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,182,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,182,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,182,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,182,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,182,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,182,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,182,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,182,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,182,1,2,'scala/math/BigInt$.apply',1,0,0)
f(42,182,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,183,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,183,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,183,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,183,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,184,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,184,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,184,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,184,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,184,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,184,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,184,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,184,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,184,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,184,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,184,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,185,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,185,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,185,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,185,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,185,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,185,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,185,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,185,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,185,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,185,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,186,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,186,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(19,187,112,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,187,40,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(21,187,40,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(22,187,40,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(23,187,40,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,187,17,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,187,17,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(26,187,17,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,187,17,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,187,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(29,187,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(30,188,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,188,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,188,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,188,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,188,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,188,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,188,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,188,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,188,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(32,189,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,189,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,189,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,189,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,189,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,189,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,189,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(39,189,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(40,189,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(41,189,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,190,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,190,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,190,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,190,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,190,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,190,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,191,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,191,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,192,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,192,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,192,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,193,11,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,193,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,193,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,193,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,193,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,193,4,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(34,193,4,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(35,194,3,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(36,195,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,196,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,196,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,196,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,196,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,196,1,2,'scala/math/BigInt.<init>',1,0,0)
f(33,197,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,197,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,197,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,197,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,197,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,197,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,197,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,197,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,198,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,198,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,198,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,198,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(29,199,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,199,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,199,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,199,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,199,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,199,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,199,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,199,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,199,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,199,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,200,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,200,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,200,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,200,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,200,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,200,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,201,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,201,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,201,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,201,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,201,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(40,201,1,2,'scala/math/BigInt.<init>',1,0,0)
f(30,202,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,202,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,202,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,202,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$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,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,203,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,203,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,203,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,203,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,203,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(24,204,23,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,204,12,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,204,12,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,204,12,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,204,12,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,204,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,204,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,204,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,204,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,204,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,204,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,204,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(36,205,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,205,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,205,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,205,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,205,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,205,1,2,'scala/math/BigInt.<init>',1,0,0)
f(33,206,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,206,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,206,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,206,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,206,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(38,206,1,2,'scala/math/BigInt.<init>',1,0,0)
f(29,207,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,207,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,207,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,207,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,207,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,208,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,208,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,208,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,208,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,208,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,209,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(40,209,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(41,209,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(39,210,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,211,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,211,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',3,0,0)
f(36,211,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',3,0,0)
f(30,214,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,214,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,214,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,214,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,214,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,215,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,215,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(25,216,11,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,216,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,216,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,216,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,216,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,216,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,216,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,216,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,216,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,216,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,216,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,216,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,216,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,216,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,217,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,217,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,217,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,217,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,217,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,217,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,217,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,217,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(38,218,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,218,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,219,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,219,1,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,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,219,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,219,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,219,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,220,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,220,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,220,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,220,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,220,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,220,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,220,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,220,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,220,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(35,221,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,221,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,221,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,221,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,222,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,222,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(29,222,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(30,222,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(28,223,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,223,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,223,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,223,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,223,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,223,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,223,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,223,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,223,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,223,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(38,223,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(39,223,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(40,223,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(28,224,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,224,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,224,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,224,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,224,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,224,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,225,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,225,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,225,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,225,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,225,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,225,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,225,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(26,226,1,2,'scala/math/BigInt$.apply',1,0,0)
f(27,226,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(20,227,72,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,227,24,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(22,227,24,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(23,227,24,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,227,24,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,227,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,227,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,227,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,227,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,227,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,227,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,227,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,227,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,227,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,227,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,227,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(33,228,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,228,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,228,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,228,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,228,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,229,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,229,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,229,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,229,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,229,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,229,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,229,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,229,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,230,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,231,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,231,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,231,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,231,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,231,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,231,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,232,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,232,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,232,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,232,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,232,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(31,233,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,233,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,233,1,2,'scala/math/BigInt.<init>',1,0,0)
f(25,234,17,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,234,9,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,234,9,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,234,9,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,234,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,234,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,234,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,234,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,234,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,234,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,234,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,234,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,234,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(38,235,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,235,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,236,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,236,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,237,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,237,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,237,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,237,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,237,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,238,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,239,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,239,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,239,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(35,240,2,2,'scala/math/BigInt$.apply',2,0,0)
f(36,240,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(37,241,1,2,'scala/math/BigInt.<init>',1,0,0)
f(31,242,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,242,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,242,1,2,'scala/math/BigInt.<init>',1,0,0)
f(26,243,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,243,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(28,243,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(29,244,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,244,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,244,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,244,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,244,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,244,1,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(31,245,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,245,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,245,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,245,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,245,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,245,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,245,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,245,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,245,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(40,245,1,2,'scala/math/BigInt.<init>',1,0,0)
f(32,246,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,246,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,246,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,246,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,246,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,246,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,246,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(39,246,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(40,246,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(41,246,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$1',1,0,0)
f(27,247,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,247,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,247,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,247,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,247,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,247,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,247,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,247,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(32,248,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,248,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,249,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,249,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,249,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,249,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,249,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,250,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,250,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,250,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,250,1,2,'scala/math/BigInt.<init>',1,0,0)
f(21,251,48,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,251,14,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,251,14,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(24,251,14,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,251,14,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,251,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,251,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,251,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,251,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,251,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,251,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,251,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,251,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,251,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,251,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,251,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,251,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,251,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,251,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,252,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,252,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,252,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(33,252,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(32,254,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,254,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,254,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,254,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,254,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,254,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,254,1,2,'scala/math/BigInt$.apply',1,0,0)
f(26,255,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,255,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,256,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,256,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,256,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,256,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,256,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,256,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,256,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,257,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,257,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,257,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,257,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,258,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,258,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,258,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,258,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,258,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,258,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,258,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
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(29,259,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,259,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,259,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,259,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,259,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,259,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,259,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,259,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,259,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(38,259,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$1',1,0,0)
f(39,259,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$40.0x0000000800ca15f8.apply',1,0,0)
f(34,260,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,260,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,261,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,261,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,261,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,261,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,261,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,261,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,261,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,262,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,263,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,263,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,264,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,264,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(22,265,34,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,265,13,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,265,13,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(25,265,13,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,265,13,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,265,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,265,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,265,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,265,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,266,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,266,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,266,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,266,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,266,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,266,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,266,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,266,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,266,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,266,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,266,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,266,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,266,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(44,266,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(45,266,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(46,266,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(47,266,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$1',1,0,0)
f(31,267,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,267,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,267,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,267,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,267,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,268,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,268,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,268,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,268,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,268,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,269,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,269,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,270,1,2,'scala/math/BigInt$.apply',1,0,0)
f(27,271,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,272,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,272,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,272,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,272,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,272,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,272,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,272,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,272,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,272,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,272,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,272,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,272,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,273,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,273,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,273,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,273,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,273,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,274,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,274,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(35,274,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,275,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,275,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,275,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(37,275,1,2,'scala/math/BigInt.<init>',1,0,0)
f(29,276,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,276,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,276,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,276,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,276,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,276,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,277,1,2,'scala/math/BigInt$.apply',1,0,0)
f(28,277,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(23,278,21,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,278,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(25,278,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(26,278,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(27,279,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,279,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,279,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,279,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,279,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,279,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,279,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,279,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,279,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,279,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,279,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,280,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,280,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,281,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,281,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,281,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,281,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,281,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,281,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,281,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,281,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,282,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,282,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(32,282,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(33,282,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(31,283,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,283,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,283,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,284,2,2,'scala/math/BigInt$.apply',2,0,0)
f(31,284,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(24,286,13,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,286,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,286,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,286,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,286,7,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(29,287,6,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(30,288,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,288,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(32,288,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(31,289,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,290,3,2,'scala/math/BigInt$.apply',3,0,0)
f(33,290,3,2,'scala/math/BigInt$.getCached',3,0,0)
f(25,293,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,293,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,293,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,293,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,293,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,293,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,293,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,293,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,293,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,294,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,294,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,294,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,294,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,294,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,294,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(32,294,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(33,294,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(31,295,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,295,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,296,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,296,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,296,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,296,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,296,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,297,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,297,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,297,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,297,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,297,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,297,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,297,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,297,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,297,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,298,1,2,'scala/math/BigInt$.apply',1,0,0)
f(28,298,1,2,'scala/math/BigInt$.getCached',1,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 400px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(25);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,8550,3,'all')
f(1,0,8546,1,'java/lang/Thread.run')
f(2,0,8546,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,8546,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,694,1,'java/util/concurrent/FutureTask.run')
f(5,0,694,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,694,1,'java/util/concurrent/FutureTask.run')
f(7,0,694,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,694,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,694,1,'java/lang/reflect/Method.invoke')
f(10,0,694,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,694,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,694,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,694,1,'kyo/bench/jmh_generated/ChainedForkBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,694,1,'kyo/bench/jmh_generated/ChainedForkBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,694,1,'kyo/bench/Bench.forkKyo')
f(16,0,94,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,94,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,94,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,94,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3f088')
f(16,94,70,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,94,70,2,'kyo.bench.Bench$$anon$1')
f(16,164,396,1,'kyo/bench/Bench.runLoop$2')
f(17,164,183,1,'kyo/bench/Bench$$anon$1.apply')
f(18,164,80,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,164,80,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c83420.apply')
f(20,164,80,1,'kyo/bench/Bench.$anonfun$2')
f(21,164,80,1,'kyo/concurrent/fibers$Fiber.block')
f(22,164,80,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,244,103,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,244,103,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,244,103,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(21,244,103,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,244,99,2,'kyo.concurrent.scheduler.IOTask')
f(22,343,4,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,343,4,2,'kyo.concurrent.fibers$Fiber')
f(17,347,213,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,347,213,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,347,213,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,347,213,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,347,98,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,347,98,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,347,93,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,440,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,440,5,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,445,29,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,474,86,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,474,86,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,474,86,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,560,134,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,560,84,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,560,84,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,560,84,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,560,84,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(17,644,33,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,644,33,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,677,17,1,'kyo/locals$Locals$.save')
f(18,677,17,2,'kyo.locals$Locals$$anon$3')
f(4,694,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f2b8.run')
f(5,694,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,694,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,694,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,694,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,694,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,694,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,694,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,705,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f4e0.run')
f(5,705,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,705,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,705,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,705,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,705,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,705,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$70+0x0000000800d4eb70')
f(4,716,7830,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fda8.run')
f(5,716,7830,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,716,7830,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,716,7830,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,716,7830,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,716,2888,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,716,2888,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,716,2888,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,716,2888,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(13,716,2888,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,716,461,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(14,1177,1910,2,'kyo.concurrent.scheduler.IOTask')
f(14,3087,517,1,'kyo/concurrent/fibers$Fiber$.promise')
f(15,3087,517,2,'kyo.concurrent.fibers$Fiber')
f(9,3604,4940,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,3604,4940,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,3604,82,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3f088.apply')
f(12,3604,82,1,'kyo/bench/Bench.$anonfun$1')
f(13,3604,82,1,'kyo/bench/ChainedForkBench.kyoBenchFiber')
f(14,3604,82,1,'kyo/concurrent/fibers$Fibers.promise')
f(15,3604,82,2,'kyo.concurrent.fibers$Fibers$$anon$31')
f(11,3686,4858,1,'kyo/bench/ChainedForkBench$$Lambda$61.0x0000000800d4a518.apply')
f(12,3686,4858,1,'kyo/bench/ChainedForkBench.$anonfun$3')
f(13,3686,4858,1,'kyo/bench/ChainedForkBench.iterate$2')
f(14,3686,1065,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4c800.linkToTargetMethod')
f(15,3686,1065,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(16,3686,1065,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,3686,1065,2,'kyo.bench.ChainedForkBench$$Lambda$61+0x0000000800d4a518')
f(14,4751,1173,1,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2')
f(15,4751,1173,2,'kyo.bench.ChainedForkBench$$anon$2')
f(14,5924,2620,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(15,5924,1080,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,5924,1080,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,5924,1080,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,5924,1080,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(15,7004,1096,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(16,7004,1096,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(15,8100,444,1,'kyo/locals$Locals$.save')
f(16,8100,444,2,'kyo.locals$Locals$$anon$3')
f(9,8544,1,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,8544,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,8544,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,8544,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,8544,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$63+0x0000000800d4aba0')
f(9,8545,1,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,8545,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,8545,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,8545,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,8545,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$64+0x0000000800d4afa8')
f(1,8546,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,8546,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,8546,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,8546,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,8546,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,8546,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,8546,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,8546,1,2,'org.openjdk.jmh.runner.InfraControl')
f(8,8547,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,8547,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,8547,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,8547,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,8547,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,8547,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 560px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(35);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,296,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,'PhaseChaitin::post_allocate_copy_removal()')
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(13,1,1,4,'NodeHash::grow()')
f(1,2,294,1,'java/lang/Thread.run')
f(2,2,294,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,2,294,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,2,2,1,'java/util/concurrent/FutureTask.run')
f(5,2,2,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,2,2,1,'java/util/concurrent/FutureTask.run')
f(7,2,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,2,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,2,2,1,'java/lang/reflect/Method.invoke')
f(10,2,2,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,2,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,2,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,2,2,1,'kyo/bench/jmh_generated/ChainedForkBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,2,2,1,'kyo/bench/jmh_generated/ChainedForkBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,2,2,1,'kyo/bench/Bench.forkKyo')
f(16,2,2,1,'kyo/bench/Bench.runLoop$2')
f(17,2,2,1,'kyo/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.0x0000000800c84800.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,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(4,4,292,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.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,16,165,1,'kyo/concurrent/scheduler/IOTask.run',11,0,0)
f(8,16,165,1,'kyo/concurrent/scheduler/IOTask.eval',11,0,0)
f(9,24,111,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,27,2,2,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2',2,0,0)
f(10,29,106,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',5,0,0)
f(11,34,101,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,41,94,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(13,48,87,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',0,0,1)
f(14,79,5,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',5,0,0)
f(15,79,5,2,'kyo/ios$KyoIO.<init>',5,0,0)
f(16,81,3,2,'kyo/core$internal$Kyo.<init>',3,0,0)
f(17,82,2,2,'java/lang/Object.<init>',2,0,0)
f(14,84,35,2,'kyo/concurrent/scheduler/IOTask.<init>',35,0,0)
f(15,113,6,2,'kyo/concurrent/scheduler/IOPromise.<init>',6,0,0)
f(16,113,6,2,'kyo/concurrent/scheduler/IOPromise.<init>',6,0,0)
f(14,119,16,2,'kyo/concurrent/scheduler/Scheduler$.schedule',15,0,0)
f(15,120,15,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',14,0,0)
f(16,120,15,2,'kyo/concurrent/scheduler/Queue.offer',14,0,0)
f(17,128,5,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',4,0,0)
f(18,128,5,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',4,0,0)
f(19,128,5,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',4,0,0)
f(20,132,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(21,132,1,3,'Unsafe_AllocateInstance')
f(22,132,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(23,132,1,4,'MemAllocator::Allocation::notify_allocation_jvmti_sampler()')
f(17,133,2,2,'kyo/concurrent/scheduler/Queue.tryModify',2,0,0)
f(18,133,2,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',2,0,0)
f(19,134,1,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',1,0,0)
f(9,135,33,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,136,32,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',25,0,0)
f(11,137,31,2,'kyo/bench/ChainedForkBench$$Lambda$61.0x0000000800d4a2e8.apply',24,0,0)
f(12,137,31,2,'kyo/bench/ChainedForkBench.$anonfun$3',24,0,0)
f(13,137,31,2,'kyo/bench/ChainedForkBench.iterate$2',24,0,0)
f(14,138,1,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d4c800.linkToTargetMethod',1,0,0)
f(15,138,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial',1,0,0)
f(16,138,1,2,'kyo/bench/ChainedForkBench$$Lambda$61.0x0000000800d4a2e8.<init>',1,0,0)
f(14,139,16,2,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2',16,0,0)
f(14,155,13,2,'kyo/concurrent/fibers$Fibers.forkFiber',6,0,0)
f(15,157,4,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',4,0,0)
f(16,157,4,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',4,0,0)
f(17,157,4,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',4,0,0)
f(15,161,7,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(16,166,2,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',2,0,0)
f(9,168,4,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,168,4,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,168,4,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,168,4,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,168,4,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,168,4,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,168,4,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,168,4,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,168,4,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,168,4,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,168,4,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,168,4,1,'jdk/internal/misc/Unsafe.unpark')
f(21,168,4,3,'pthread_cond_signal')
f(22,169,3,5,'entry_SYSCALL_64_after_hwframe')
f(23,169,3,5,'do_syscall_64')
f(24,169,3,5,'__x64_sys_futex')
f(25,169,3,5,'do_futex')
f(26,169,3,5,'futex_wake')
f(27,169,3,5,'wake_up_q')
f(28,169,3,5,'_raw_spin_unlock_irqrestore')
f(9,172,5,6,'kyo/core$internal$KyoCont.effect',0,5,0)
f(9,177,1,1,'kyo/ios$KyoIO.effect')
f(9,178,3,3,'vtable stub')
f(7,181,107,2,'kyo/concurrent/scheduler/Queue.poll',107,0,0)
f(8,181,9,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',9,0,0)
f(9,184,6,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',6,0,0)
f(10,188,2,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',2,0,0)
f(8,190,6,2,'kyo/concurrent/scheduler/Queue.isEmpty',6,0,0)
f(8,196,92,2,'kyo/concurrent/scheduler/Queue.modify',92,0,0)
f(9,205,23,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',23,0,0)
f(10,209,19,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',19,0,0)
f(9,228,60,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d45000.apply',60,0,0)
f(10,234,54,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',54,0,0)
f(11,234,11,2,'kyo/concurrent/scheduler/Queue.items',11,0,0)
f(11,245,43,2,'scala/collection/mutable/PriorityQueue.dequeue',43,0,0)
f(12,276,9,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_size0',9,0,0)
f(12,285,3,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_size0_$eq',3,0,0)
f(7,288,8,2,'kyo/concurrent/scheduler/Worker.stop$1',8,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,8799,3,'all')
f(1,0,8796,1,'java/lang/Thread.run')
f(2,0,8796,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,8796,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,951,1,'java/util/concurrent/FutureTask.run')
f(5,0,951,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,951,1,'java/util/concurrent/FutureTask.run')
f(7,0,951,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,951,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,951,1,'java/lang/reflect/Method.invoke')
f(10,0,951,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,951,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,951,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,951,1,'kyo/bench/jmh_generated/ChainedForkBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,950,1,'kyo/bench/jmh_generated/ChainedForkBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,950,1,'kyo/bench/Bench.syncKyo')
f(16,0,446,1,'kyo/bench/Bench.runLoop$1')
f(17,0,236,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,236,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,236,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,236,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,160,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,160,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,86,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,86,74,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,86,74,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,160,57,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,217,19,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,217,19,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,217,19,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,236,210,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,236,191,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,236,191,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,236,191,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,236,119,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,236,119,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,236,119,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(24,236,119,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,236,118,2,'kyo.concurrent.scheduler.IOTask')
f(25,354,1,1,'kyo/concurrent/fibers$Fiber$.promise')
f(26,354,1,2,'kyo.concurrent.fibers$Fiber')
f(21,355,72,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,355,72,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c83420.apply')
f(23,355,72,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,355,72,1,'kyo/concurrent/fibers$Fiber.join')
f(25,355,72,1,'kyo/concurrent/fibers$Fibers.get')
f(26,355,72,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,355,72,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,427,19,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,427,19,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c83c20.apply')
f(20,427,19,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,427,19,1,'kyo/concurrent/fibers$Fiber.block')
f(22,427,19,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,446,504,1,'kyo/bench/ChainedForkBench.kyoBench')
f(17,446,65,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,446,65,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,446,65,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,446,65,2,'kyo.bench.ChainedForkBench$$Lambda$37+0x0000000800c3f088')
f(17,511,231,1,'kyo/concurrent/fibers$Fibers.block')
f(18,511,64,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,511,64,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,575,101,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,575,101,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,676,66,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,676,66,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,742,208,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,742,68,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,742,68,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,742,68,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,742,68,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c83420')
f(18,810,85,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,810,68,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,810,68,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,810,68,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,810,68,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(19,878,17,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,878,17,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(18,895,55,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,895,55,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(14,950,1,1,'org/openjdk/jmh/results/ThroughputResult.<init>')
f(15,950,1,2,'java.lang.StringBuilder')
f(4,951,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f2b8.run')
f(5,951,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,951,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,951,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,951,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,951,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,951,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,951,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,962,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1f4e0.run')
f(5,962,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,962,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,962,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,962,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,962,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,962,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$71+0x0000000800d4eb70')
f(4,973,7823,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d1fda8.run')
f(5,973,7823,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,973,7823,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,973,7361,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,973,7361,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,973,2,1,'kyo/bench/ChainedForkBench$$anon$1.apply')
f(10,973,2,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(11,973,2,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(12,973,2,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$Promise$$anon$26$$_$loop$22')
f(13,973,2,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(14,973,2,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(15,973,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,973,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,973,2,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,973,2,1,'scala/runtime/function/JProcedure1.apply')
f(19,973,2,1,'scala/runtime/function/JProcedure1.apply')
f(20,973,2,1,'kyo/concurrent/scheduler/IOTask$$Lambda$65.0x0000000800d4afa8.applyVoid')
f(21,973,2,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(22,973,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(23,973,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(24,973,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(25,973,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$68+0x0000000800d4e000')
f(22,974,1,1,'kyo/concurrent/scheduler/IOPromise.become')
f(23,974,1,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(24,974,1,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(25,974,1,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(26,974,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(27,974,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(9,975,2850,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,975,2850,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,975,2850,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,975,2850,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(13,975,2850,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,975,419,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(14,1394,1773,2,'kyo.concurrent.scheduler.IOTask')
f(14,3167,658,1,'kyo/concurrent/fibers$Fiber$.promise')
f(15,3167,658,2,'kyo.concurrent.fibers$Fiber')
f(9,3825,1,1,'kyo/bench/ChainedForkBench$$anon$5.apply')
f(10,3825,1,1,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$5')
f(11,3825,1,1,'kyo/bench/ChainedForkBench$$Lambda$57.0x0000000800d44a30.apply')
f(12,3825,1,1,'kyo/bench/ChainedForkBench.$anonfun$5')
f(13,3825,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(14,3825,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(15,3825,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,3825,1,2,'kyo.bench.ChainedForkBench$$Lambda$59+0x0000000800d49ac0')
f(9,3826,4508,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,3826,4508,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,3826,4508,1,'kyo/bench/ChainedForkBench$$Lambda$62.0x0000000800d4a518.apply')
f(12,3826,4508,1,'kyo/bench/ChainedForkBench.$anonfun$3')
f(13,3826,4508,1,'kyo/bench/ChainedForkBench.iterate$2')
f(14,3826,915,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4c800.linkToTargetMethod')
f(15,3826,915,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(16,3826,915,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,3826,915,2,'kyo.bench.ChainedForkBench$$Lambda$62+0x0000000800d4a518')
f(14,4741,1,1,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$1')
f(15,4741,1,2,'kyo.bench.ChainedForkBench$$anon$1')
f(14,4742,1106,1,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2')
f(15,4742,1106,2,'kyo.bench.ChainedForkBench$$anon$2')
f(14,5848,2486,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(15,5848,645,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,5848,645,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,5848,645,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,5848,645,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(15,6493,1032,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(16,6493,1032,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(15,7525,809,1,'kyo/locals$Locals$.save')
f(16,7525,809,2,'kyo.locals$Locals$$anon$3')
f(7,8334,462,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,8334,462,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,8334,462,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,8334,462,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,8334,462,2,'kyo.concurrent.scheduler.Queue$$Lambda$56+0x0000000800d45000')
f(1,8796,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,8796,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,8796,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,8796,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,8796,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,8796,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,8796,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,8796,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,8796,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,8796,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,8796,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,8796,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,8796,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,295,3,'all')
f(1,0,295,1,'java/lang/Thread.run')
f(2,0,295,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,295,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,2,1,'java/util/concurrent/FutureTask.run')
f(5,0,2,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,2,1,'java/util/concurrent/FutureTask.run')
f(7,0,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,2,1,'java/lang/reflect/Method.invoke')
f(10,0,2,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,2,1,'kyo/bench/jmh_generated/ChainedForkBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,2,1,'kyo/bench/jmh_generated/ChainedForkBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,2,1,'kyo/bench/Bench.syncKyo')
f(16,0,1,1,'kyo/bench/Bench.runLoop$1')
f(17,0,1,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,0,1,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,0,1,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,0,1,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,0,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,0,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,0,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(24,0,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,0,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,0,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,0,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(28,0,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(29,0,1,1,'jdk/internal/misc/Unsafe.unpark')
f(30,0,1,3,'pthread_cond_signal')
f(31,0,1,5,'entry_SYSCALL_64_after_hwframe')
f(32,0,1,5,'do_syscall_64')
f(33,0,1,5,'__x64_sys_futex')
f(34,0,1,5,'do_futex')
f(35,0,1,5,'futex_wake')
f(36,0,1,5,'wake_up_q')
f(37,0,1,5,'_raw_spin_unlock_irqrestore')
f(16,1,1,2,'kyo/bench/ChainedForkBench.kyoBench',1,0,0)
f(17,1,1,2,'kyo/concurrent/fibers$Fibers.block',1,0,0)
f(18,1,1,2,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26',1,0,0)
f(19,1,1,2,'kyo/concurrent/fibers$Fibers$$anon$117.<init>',1,0,0)
f(20,1,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(4,2,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f2b8.run')
f(5,2,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,2,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,2,1,2,'kyo/concurrent/scheduler/MovingStdDev.observe',1,0,0)
f(8,2,1,3,'clock_gettime')
f(9,2,1,3,'[vdso]')
f(4,3,292,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d1fda8.run')
f(5,3,292,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,3,292,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,21,155,1,'kyo/concurrent/scheduler/IOTask.run',6,0,0)
f(8,21,155,1,'kyo/concurrent/scheduler/IOTask.eval',6,0,0)
f(9,26,107,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,32,1,2,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2',1,0,0)
f(10,33,100,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',3,0,0)
f(11,36,97,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,45,88,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(13,52,81,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,82,2,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',2,0,0)
f(15,82,2,2,'kyo/ios$KyoIO.<init>',2,0,0)
f(16,82,2,2,'kyo/core$internal$Kyo.<init>',2,0,0)
f(17,82,2,2,'java/lang/Object.<init>',2,0,0)
f(14,84,29,2,'kyo/concurrent/scheduler/IOTask.<init>',29,0,0)
f(15,109,4,2,'kyo/concurrent/scheduler/IOPromise.<init>',4,0,0)
f(16,109,4,2,'kyo/concurrent/scheduler/IOPromise.<init>',4,0,0)
f(14,113,20,2,'kyo/concurrent/scheduler/Scheduler$.schedule',20,0,0)
f(15,115,18,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',18,0,0)
f(16,115,18,2,'kyo/concurrent/scheduler/Queue.offer',18,0,0)
f(17,122,10,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',10,0,0)
f(18,122,10,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',10,0,0)
f(19,122,10,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',10,0,0)
f(17,132,1,2,'kyo/concurrent/scheduler/Queue.tryModify',1,0,0)
f(18,132,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(19,132,1,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',1,0,0)
f(9,133,36,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,135,34,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',32,0,0)
f(11,136,33,2,'kyo/bench/ChainedForkBench$$Lambda$62.0x0000000800d4a518.apply',31,0,0)
f(12,136,33,2,'kyo/bench/ChainedForkBench.$anonfun$3',31,0,0)
f(13,136,33,2,'kyo/bench/ChainedForkBench.iterate$2',31,0,0)
f(14,138,1,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d4c800.linkToTargetMethod',1,0,0)
f(15,138,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial',1,0,0)
f(16,138,1,2,'kyo/bench/ChainedForkBench$$Lambda$62.0x0000000800d4a518.<init>',1,0,0)
f(14,139,23,2,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2',23,0,0)
f(15,160,2,2,'kyo/bench/ChainedForkBench$$anon$2.<init>',2,0,0)
f(16,161,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(14,162,7,2,'kyo/concurrent/fibers$Fibers.forkFiber',5,0,0)
f(15,164,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(16,164,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(17,164,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(15,165,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(15,167,2,2,'kyo/locals$Locals$.save',2,0,0)
f(9,169,2,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,169,2,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,169,2,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,169,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,169,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,169,2,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,169,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,169,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,169,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,169,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,169,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,169,2,1,'jdk/internal/misc/Unsafe.unpark')
f(21,169,2,3,'pthread_cond_signal')
f(22,169,2,5,'entry_SYSCALL_64_after_hwframe')
f(23,169,2,5,'do_syscall_64')
f(24,169,1,5,'__x64_sys_futex')
f(25,169,1,5,'do_futex')
f(26,169,1,5,'futex_wake')
f(27,169,1,5,'wake_up_q')
f(28,169,1,5,'_raw_spin_unlock_irqrestore')
f(24,170,1,5,'syscall_enter_from_user_mode')
f(9,171,4,6,'kyo/core$internal$KyoCont.effect',0,4,0)
f(9,175,1,3,'vtable stub')
f(7,176,109,2,'kyo/concurrent/scheduler/Queue.poll',109,0,0)
f(8,197,4,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',4,0,0)
f(9,197,4,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',4,0,0)
f(10,197,2,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',2,0,0)
f(10,199,2,2,'kyo/concurrent/scheduler/Queue$$Lambda$56.0x0000000800d45000.<init>',2,0,0)
f(8,201,1,2,'kyo/concurrent/scheduler/Queue.isEmpty',1,0,0)
f(9,201,1,2,'kyo/concurrent/scheduler/Queue.items',1,0,0)
f(8,202,83,2,'kyo/concurrent/scheduler/Queue.modify',83,0,0)
f(9,207,27,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',27,0,0)
f(10,207,27,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',27,0,0)
f(11,223,3,2,'java/lang/invoke/VarForm.getMemberName',3,0,0)
f(11,226,8,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',8,0,0)
f(9,234,51,2,'kyo/concurrent/scheduler/Queue$$Lambda$56.0x0000000800d45000.apply',51,0,0)
f(10,236,49,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',49,0,0)
f(11,237,48,2,'scala/collection/mutable/PriorityQueue.dequeue',48,0,0)
f(12,256,2,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',2,0,0)
f(12,258,27,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_size0',27,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,1,2,'kyo/concurrent/scheduler/Worker.queue',1,0,0)
f(7,287,8,2,'kyo/concurrent/scheduler/Worker.stop$1',8,0,0)
f(8,289,6,2,'kyo/concurrent/scheduler/Scheduler$.stopWorker',6,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 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,13570,3,'all')
f(1,0,13567,1,'java/lang/Thread.run')
f(2,0,13567,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,13567,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,2398,1,'java/util/concurrent/FutureTask.run')
f(5,0,2398,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,2398,1,'java/util/concurrent/FutureTask.run')
f(7,0,2398,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,2398,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,2398,1,'java/lang/reflect/Method.invoke')
f(10,0,2398,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,2398,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,2398,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,2398,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,2397,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,2397,1,'kyo/bench/Bench.forkKyo')
f(16,0,152,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,152,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,152,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,152,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3fb00')
f(16,152,228,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,152,228,2,'kyo.bench.Bench$$anon$1')
f(16,380,1506,1,'kyo/bench/Bench.runLoop$2')
f(17,380,625,1,'kyo/bench/Bench$$anon$1.apply')
f(18,380,90,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,380,90,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c81000.apply')
f(20,380,90,1,'kyo/bench/Bench.$anonfun$2')
f(21,380,90,1,'kyo/concurrent/fibers$Fiber.block')
f(22,380,90,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,470,535,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,470,535,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,470,535,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85290.apply')
f(21,470,535,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,470,39,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,509,372,2,'kyo.concurrent.scheduler.IOTask')
f(22,881,124,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,881,124,2,'kyo.concurrent.fibers$Fiber')
f(17,1005,881,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,1005,881,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,1005,881,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,1005,881,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,1005,399,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,1005,399,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,1005,124,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,1129,275,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,1129,275,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,1404,261,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,1665,221,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,1665,221,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,1665,221,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,1886,511,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,1886,169,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1886,169,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1886,169,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1886,169,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c85290')
f(17,2055,245,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,2055,245,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,2300,97,1,'kyo/locals$Locals$.save')
f(18,2300,97,2,'kyo.locals$Locals$$anon$3')
f(14,2397,1,2,'org.openjdk.jmh.results.BenchmarkTaskResult')
f(4,2398,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f4b8.run')
f(5,2398,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,2398,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,2398,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,2398,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,2398,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,2398,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,2398,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,2409,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f6e0.run')
f(5,2409,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,2409,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,2409,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,2409,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,2409,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,2409,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,2409,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$63+0x0000000800d55778')
f(4,2420,11147,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d243c0.run')
f(5,2420,11147,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,2420,11147,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,2420,11146,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,2420,11146,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,2420,7752,1,'kyo/bench/CollectAllBench$$anon$2.apply')
f(10,2420,3046,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(11,2420,2067,2,'kyo.bench.CollectAllBench$$anon$2')
f(11,4487,979,1,'kyo/bench/CollectAllBench$$Lambda$58.0x0000000800d56000.apply')
f(12,4487,979,1,'kyo/bench/CollectAllBench.$anonfun$2')
f(13,4487,977,1,'scala/collection/AbstractIterable.sum')
f(14,4487,977,1,'scala/collection/IterableOnceOps.sum$')
f(15,4487,977,1,'scala/collection/IterableOnceOps.sum')
f(16,4487,977,1,'scala/collection/AbstractIterable.reduce')
f(17,4487,977,1,'scala/collection/IterableOnceOps.reduce$')
f(18,4487,977,1,'scala/collection/IterableOnceOps.reduce')
f(19,4487,977,1,'scala/collection/AbstractIterable.reduceLeft')
f(20,4487,977,1,'scala/collection/IterableOnceOps.reduceLeft$')
f(21,4487,977,1,'scala/collection/IterableOnceOps.reduceLeft')
f(22,4487,977,1,'scala/collection/IterableOnceOps$$Lambda$59.0x0000000800d57638.apply')
f(23,4487,977,1,'scala/collection/IterableOnceOps.$anonfun$sum$1')
f(24,4487,977,1,'scala/math/Numeric$IntIsIntegral$.plus')
f(25,4487,977,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(26,4487,977,1,'java/lang/Integer.valueOf')
f(27,4487,977,2,'java.lang.Integer')
f(13,5464,2,1,'scala/runtime/BoxesRunTime.boxToLong')
f(14,5464,2,1,'java/lang/Long.valueOf')
f(15,5464,2,2,'java.lang.Long')
f(10,5466,4706,1,'kyo/lists$Lists$$anon$11.apply')
f(11,5466,4706,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(12,5466,4706,1,'kyo/lists$Lists$$Lambda$57.0x0000000800d53b78.apply')
f(13,5466,4706,1,'kyo/lists$Lists.$anonfun$5')
f(14,5466,3359,1,'kyo/lists$Lists.loop$2')
f(15,5466,1426,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,5466,1426,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,5466,1426,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,5466,1426,2,'kyo.lists$Lists$$Lambda$57+0x0000000800d53b78')
f(15,6892,1933,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(16,6892,1933,2,'kyo.lists$Lists$$anon$11')
f(14,8825,1347,1,'scala/collection/mutable/ListBuffer.addOne')
f(15,8825,1347,2,'scala.collection.immutable.$colon$colon')
f(9,10172,3394,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,10172,3394,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,10172,3394,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3fb00.apply')
f(12,10172,3394,1,'kyo/bench/Bench.$anonfun$1')
f(13,10172,3394,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,10172,3394,1,'kyo/bench/CollectAllBench.kyoBench')
f(15,10172,1,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(16,10172,1,2,'kyo.bench.CollectAllBench$$anon$2')
f(15,10173,8,1,'kyo/lists$Lists.collect')
f(16,10173,4,1,'kyo/lists$Lists.loop$2')
f(17,10173,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,10173,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,10173,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,10173,2,2,'kyo.lists$Lists$$Lambda$57+0x0000000800d53b78')
f(17,10175,2,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(18,10175,2,2,'kyo.lists$Lists$$anon$11')
f(16,10177,4,1,'scala/collection/mutable/ListBuffer$.apply')
f(17,10177,4,1,'scala/collection/IterableFactory.apply$')
f(18,10177,4,1,'scala/collection/IterableFactory.apply')
f(19,10177,4,1,'scala/collection/mutable/ListBuffer$.from')
f(20,10177,4,1,'scala/collection/mutable/ListBuffer$.from')
f(21,10177,4,2,'scala.collection.mutable.ListBuffer')
f(15,10181,1779,1,'scala/collection/AbstractIterable.toList')
f(16,10181,1779,1,'scala/collection/IterableOnceOps.toList$')
f(17,10181,1779,1,'scala/collection/IterableOnceOps.toList')
f(18,10181,1779,1,'scala/collection/immutable/List.prependedAll')
f(19,10181,1770,2,'scala.collection.immutable.$colon$colon')
f(19,11951,9,1,'scala/collection/immutable/Vector.iterator')
f(20,11951,9,2,'scala.collection.immutable.NewVectorIterator')
f(15,11960,1606,1,'scala/collection/immutable/Range.map')
f(16,11960,1127,1,'kyo/bench/CollectAllBench$$Lambda$56.0x0000000800d44800.apply')
f(17,11960,1127,1,'kyo/bench/CollectAllBench.$anonfun$adapted$1')
f(18,11960,1127,1,'kyo/bench/CollectAllBench.$anonfun$1')
f(19,11960,1127,2,'kyo.bench.CollectAllBench$$anon$1')
f(16,13087,136,1,'scala/collection/SeqFactory$Delegate.newBuilder')
f(17,13087,136,1,'scala/collection/immutable/Vector$.newBuilder')
f(18,13087,136,1,'scala/collection/immutable/Vector$.newBuilder')
f(19,13087,124,2,'scala.collection.immutable.VectorBuilder')
f(19,13211,12,1,'scala/collection/immutable/VectorBuilder.<init>')
f(20,13211,12,2,'java.lang.Object[]')
f(16,13223,320,1,'scala/collection/immutable/VectorBuilder.addOne')
f(17,13223,320,1,'scala/collection/immutable/VectorBuilder.addOne')
f(18,13223,320,1,'scala/collection/immutable/VectorBuilder.advance')
f(19,13223,320,1,'scala/collection/immutable/VectorBuilder.advance1')
f(20,13223,5,2,'java.lang.Object[][]')
f(20,13228,315,2,'java.lang.Object[]')
f(16,13543,23,1,'scala/collection/immutable/VectorBuilder.result')
f(17,13543,23,1,'scala/collection/immutable/VectorBuilder.result')
f(18,13543,4,1,'java/util/Arrays.copyOf')
f(19,13543,4,2,'java.lang.Object[]')
f(18,13547,17,1,'java/util/Arrays.copyOfRange')
f(19,13547,17,2,'java.lang.Object[][]')
f(18,13564,2,2,'scala.collection.immutable.Vector2')
f(7,13566,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,13566,1,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,13566,1,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,13566,1,1,'scala/runtime/ObjectRef.create')
f(11,13566,1,2,'scala.runtime.ObjectRef')
f(1,13567,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,13567,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,13567,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,13567,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,13567,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,13567,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,13567,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,13567,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,13567,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,13567,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,13567,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,13567,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,13567,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,250,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,'PhaseBlockLayout::PhaseBlockLayout(PhaseCFG&)')
f(11,0,1,4,'PhaseBlockLayout::find_edges()')
f(12,0,1,4,'Block::num_fall_throughs()')
f(9,1,1,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::Dominators()')
f(1,2,1,3,'[unknown_Java]')
f(2,2,1,1,'kyo/bench/CollectAllBench$$Lambda$58.0x0000000800d56000.apply')
f(1,3,247,1,'java/lang/Thread.run')
f(2,3,247,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,3,247,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,3,30,1,'java/util/concurrent/FutureTask.run')
f(5,3,30,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,3,30,1,'java/util/concurrent/FutureTask.run')
f(7,3,30,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,3,30,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,3,30,1,'java/lang/reflect/Method.invoke')
f(10,3,30,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,3,30,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,3,30,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,3,30,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,3,30,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,3,30,1,'kyo/bench/Bench.forkKyo')
f(16,3,30,1,'kyo/bench/Bench.runLoop$2')
f(17,3,18,1,'kyo/bench/Bench$$anon$1.apply')
f(18,3,18,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,3,18,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,3,16,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85290.apply',2,0,0)
f(21,3,16,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',2,0,0)
f(22,5,14,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,5,14,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,5,14,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,5,14,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,5,14,1,'jdk/internal/misc/Unsafe.unpark')
f(27,5,1,3,'Unsafe_Unpark')
f(28,5,1,4,'ThreadsListHandle::cv_internal_thread_to_JavaThread(_jobject*, JavaThread**, oopDesc**)')
f(27,6,13,3,'pthread_cond_signal')
f(28,6,13,5,'entry_SYSCALL_64_after_hwframe')
f(29,6,13,5,'do_syscall_64')
f(30,6,12,5,'__x64_sys_futex')
f(31,6,12,5,'do_futex')
f(32,6,11,5,'futex_wake')
f(33,7,10,5,'wake_up_q')
f(34,7,10,5,'_raw_spin_unlock_irqrestore')
f(32,17,1,5,'hash_futex')
f(30,18,1,5,'syscall_enter_from_user_mode')
f(20,19,2,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',2,0,0)
f(21,19,2,2,'kyo/core$internal$KyoCont.<init>',2,0,0)
f(17,21,12,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply',1,0,0)
f(18,21,12,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply',1,0,0)
f(19,21,12,1,'kyo/concurrent/scheduler/IOPromise.block',1,0,0)
f(20,21,12,1,'kyo/concurrent/scheduler/IOPromise.loop$4',1,0,0)
f(21,21,11,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,21,11,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,24,8,1,'java/util/concurrent/locks/LockSupport.park')
f(24,24,8,1,'jdk/internal/misc/Unsafe.park')
f(25,24,1,3,'Unsafe_Park')
f(26,24,1,4,'Parker::park(bool, long)')
f(25,25,7,3,'[unknown]')
f(26,25,7,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,27,5,5,'entry_SYSCALL_64_after_hwframe')
f(28,27,5,5,'do_syscall_64')
f(29,27,4,5,'__x64_sys_futex')
f(30,27,4,5,'do_futex')
f(31,27,4,5,'futex_wait')
f(32,28,2,5,'futex_wait_queue_me')
f(33,28,2,5,'schedule')
f(34,28,2,5,'__schedule')
f(35,28,2,5,'finish_task_switch.isra.0')
f(32,30,1,5,'futex_wait_setup')
f(33,30,1,5,'get_futex_key')
f(29,31,1,5,'syscall_enter_from_user_mode')
f(21,32,1,2,'kyo/concurrent/scheduler/IOPromise$$anon$1.<init>',1,0,0)
f(4,33,1,1,'java/util/concurrent/ThreadPoolExecutor.getTask')
f(5,33,1,1,'java/util/concurrent/LinkedBlockingQueue.take')
f(6,33,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject.await')
f(7,33,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject.enableWait')
f(8,33,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.release')
f(9,33,1,0,'java/util/concurrent/locks/ReentrantLock$Sync.tryRelease',0,0,1)
f(4,34,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f4b8.run')
f(5,34,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,34,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,34,1,1,'java/lang/Thread.sleep')
f(8,34,1,3,'[unknown]')
f(9,34,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,34,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,34,1,5,'do_syscall_64')
f(12,34,1,5,'__x64_sys_futex')
f(13,34,1,5,'do_futex')
f(14,34,1,5,'futex_wait')
f(15,34,1,5,'hash_futex')
f(4,35,215,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d243c0.run')
f(5,35,215,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,35,215,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,35,194,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,35,194,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,41,119,2,'kyo/bench/CollectAllBench$$anon$2.apply',81,0,0)
f(10,43,38,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(11,43,38,1,'kyo/bench/CollectAllBench$$Lambda$58.0x0000000800d56000.apply')
f(12,43,38,2,'kyo/bench/CollectAllBench.$anonfun$2',25,0,0)
f(13,43,38,2,'scala/collection/AbstractIterable.sum',25,0,0)
f(14,43,38,2,'scala/collection/IterableOnceOps.sum$',25,0,0)
f(15,43,38,2,'scala/collection/IterableOnceOps.sum',25,0,0)
f(16,43,38,2,'scala/collection/AbstractIterable.reduce',25,0,0)
f(17,43,38,2,'scala/collection/IterableOnceOps.reduce$',25,0,0)
f(18,43,38,2,'scala/collection/IterableOnceOps.reduce',25,0,0)
f(19,43,38,2,'scala/collection/AbstractIterable.reduceLeft',25,0,0)
f(20,43,38,2,'scala/collection/IterableOnceOps.reduceLeft$',25,0,0)
f(21,43,38,2,'scala/collection/IterableOnceOps.reduceLeft',25,0,0)
f(22,44,31,2,'scala/collection/IterableOnceOps$$Lambda$59.0x0000000800d57638.apply',18,0,0)
f(23,44,31,2,'scala/collection/IterableOnceOps.$anonfun$sum$1',18,0,0)
f(24,44,31,2,'scala/math/Numeric$IntIsIntegral$.plus',18,0,0)
f(25,44,31,2,'scala/runtime/BoxesRunTime.boxToInteger',18,0,0)
f(26,59,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(27,59,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(28,59,1,4,'MemAllocator::allocate() const')
f(26,60,15,1,'java/lang/Integer.valueOf',3,0,0)
f(27,63,12,1,'java/lang/Integer.<init>')
f(28,63,12,1,'java/lang/Number.<init>')
f(22,75,6,2,'scala/collection/StrictOptimizedLinearSeqOps$$anon$1.next',6,0,0)
f(23,80,1,2,'scala/collection/immutable/$colon$colon.head',1,0,0)
f(10,81,79,2,'kyo/lists$Lists$$anon$11.apply',79,0,0)
f(11,84,53,2,'kyo/bench/CollectAllBench$$anon$1.apply',53,0,0)
f(12,84,53,2,'kyo/bench/CollectAllBench$$anon$1.apply',53,0,0)
f(13,87,50,2,'scala/runtime/BoxesRunTime.boxToInteger',50,0,0)
f(11,137,23,2,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5',23,0,0)
f(12,139,21,2,'kyo/lists$Lists$$Lambda$57.0x0000000800d53b78.apply',21,0,0)
f(13,140,20,2,'kyo/lists$Lists.$anonfun$5',20,0,0)
f(14,140,20,2,'scala/collection/mutable/ListBuffer.addOne',20,0,0)
f(15,140,17,2,'scala/collection/immutable/$colon$colon.<init>',17,0,0)
f(16,140,3,2,'scala/collection/immutable/List.<init>',3,0,0)
f(17,140,3,2,'scala/collection/immutable/AbstractSeq.<init>',3,0,0)
f(16,143,14,2,'scala/runtime/Statics.releaseFence',14,0,0)
f(17,143,14,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d1c400.invoke_MT',14,0,0)
f(18,154,1,2,'java/lang/invoke/Invokers.checkGenericType',1,0,0)
f(18,155,2,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d54000.invokeStatic',2,0,0)
f(15,157,3,2,'scala/collection/mutable/ListBuffer.last0_$eq',3,0,0)
f(9,160,50,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,160,50,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',45,0,0)
f(11,160,50,2,'kyo/bench/Bench$$Lambda$37.0x0000000800c3fb00.apply',45,0,0)
f(12,160,50,2,'kyo/bench/Bench.$anonfun$1',45,0,0)
f(13,160,50,2,'kyo/bench/Bench.kyoBenchFiber',45,0,0)
f(14,160,50,2,'kyo/bench/CollectAllBench.kyoBench',45,0,0)
f(15,160,27,2,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1',27,0,0)
f(16,160,27,2,'kyo/bench/CollectAllBench$$Lambda$58.0x0000000800d56000.apply',27,0,0)
f(17,160,27,2,'kyo/bench/CollectAllBench.$anonfun$2',27,0,0)
f(18,160,27,2,'scala/runtime/BoxesRunTime.boxToLong',27,0,0)
f(15,187,1,1,'kyo/lists$Lists.collect')
f(16,187,1,1,'kyo/lists$Lists.loop$2')
f(17,187,1,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(18,187,1,2,'kyo/lists$Lists$$Lambda$57.0x0000000800d53b78.apply',1,0,0)
f(19,187,1,2,'kyo/lists$Lists.$anonfun$5',1,0,0)
f(20,187,1,2,'scala/collection/mutable/ListBuffer.addOne',1,0,0)
f(21,187,1,2,'scala/collection/immutable/$colon$colon.<init>',1,0,0)
f(22,187,1,2,'scala/runtime/Statics.releaseFence',1,0,0)
f(23,187,1,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d1c400.invoke_MT',1,0,0)
f(15,188,1,1,'scala/collection/AbstractIterable.toList')
f(16,188,1,1,'scala/collection/IterableOnceOps.toList$')
f(17,188,1,1,'scala/collection/IterableOnceOps.toList')
f(18,188,1,1,'scala/collection/immutable/List.prependedAll')
f(19,188,1,1,'scala/collection/immutable/NewVectorIterator.next')
f(20,188,1,1,'scala/collection/immutable/NewVectorIterator.advance')
f(21,188,1,1,'scala/collection/immutable/NewVectorIterator.advanceA')
f(15,189,17,2,'scala/collection/immutable/Range.map',14,0,0)
f(16,189,2,2,'kyo/bench/CollectAllBench$$Lambda$56.0x0000000800d44400.apply',2,0,0)
f(17,189,2,2,'kyo/bench/CollectAllBench.$anonfun$adapted$1',2,0,0)
f(18,189,2,2,'scala/runtime/BoxesRunTime.unboxToInt',2,0,0)
f(16,191,12,2,'scala/collection/immutable/Range.iterator',12,0,0)
f(16,203,3,1,'scala/collection/immutable/VectorBuilder.addOne')
f(17,203,3,1,'scala/collection/immutable/VectorBuilder.addOne')
f(18,203,3,1,'scala/collection/immutable/VectorBuilder.advance')
f(19,203,3,1,'scala/collection/immutable/VectorBuilder.advance1')
f(15,206,4,2,'scala/runtime/RichInt$.until$extension',4,0,0)
f(16,206,4,2,'scala/collection/immutable/Range$Exclusive.<init>',4,0,0)
f(17,206,4,2,'scala/collection/immutable/Range.<init>',4,0,0)
f(18,209,1,2,'scala/collection/immutable/Range.longLength',1,0,0)
f(19,209,1,2,'scala/collection/immutable/Range.hasStub',1,0,0)
f(20,209,1,2,'scala/collection/immutable/Range.isExact',1,0,0)
f(9,210,17,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,210,17,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,210,17,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,210,17,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,210,17,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,210,17,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,210,17,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,210,17,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,210,17,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,210,17,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,210,17,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,210,17,1,'jdk/internal/misc/Unsafe.unpark')
f(21,210,1,4,'ThreadsListHandle::~ThreadsListHandle()')
f(21,211,16,3,'pthread_cond_signal')
f(22,211,16,5,'entry_SYSCALL_64_after_hwframe')
f(23,211,16,5,'do_syscall_64')
f(24,211,16,5,'__x64_sys_futex')
f(25,211,16,5,'do_futex')
f(26,211,16,5,'futex_wake')
f(27,211,1,5,'mark_wake_futex')
f(27,212,15,5,'wake_up_q')
f(28,212,15,5,'_raw_spin_unlock_irqrestore')
f(9,227,2,2,'kyo/ios$KyoIO.effect',2,0,0)
f(10,227,2,2,'kyo/ios$KyoIO.effect',2,0,0)
f(7,229,2,2,'kyo/concurrent/scheduler/Queue.poll',2,0,0)
f(8,229,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(9,229,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(8,230,1,2,'kyo/concurrent/scheduler/Queue.modify',1,0,0)
f(9,230,1,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d45690.apply',1,0,0)
f(10,230,1,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',1,0,0)
f(7,231,19,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,231,19,1,'kyo/concurrent/scheduler/Worker.park')
f(9,231,19,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,231,19,1,'jdk/internal/misc/Unsafe.park')
f(11,231,5,3,'Unsafe_Park')
f(12,232,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,232,2,5,'entry_SYSCALL_64_after_hwframe')
f(14,232,2,5,'__x64_sys_futex')
f(12,234,2,4,'Parker::park(bool, long)')
f(11,236,14,3,'[unknown]')
f(12,236,14,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,237,13,5,'entry_SYSCALL_64_after_hwframe')
f(14,237,13,5,'do_syscall_64')
f(15,238,10,5,'__x64_sys_futex')
f(16,238,10,5,'do_futex')
f(17,238,10,5,'futex_wait')
f(18,238,10,5,'futex_wait_queue_me')
f(19,238,10,5,'schedule')
f(20,238,10,5,'__schedule')
f(21,238,10,5,'finish_task_switch.isra.0')
f(15,248,2,5,'syscall_exit_to_user_mode')
f(16,248,2,5,'exit_to_user_mode_prepare')
f(17,248,2,5,'exit_to_user_mode_loop')
f(18,248,2,5,'__rseq_handle_notify_resume')
f(19,248,1,5,'__put_user_nocheck_8')
f(19,249,1,5,'rseq_ip_fixup')
f(20,249,1,5,'__get_user_8')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 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,14447,3,'all')
f(1,0,14444,1,'java/lang/Thread.run')
f(2,0,14444,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,14444,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,14444,1,'java/util/concurrent/FutureTask.run')
f(5,0,14444,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,14444,1,'java/util/concurrent/FutureTask.run')
f(7,0,14444,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,14444,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,14444,1,'java/lang/reflect/Method.invoke')
f(10,0,14444,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,14444,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,14444,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,14444,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,14444,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,14444,1,'kyo/bench/Bench.syncKyo')
f(16,0,10644,1,'kyo/bench/Bench.runLoop$1')
f(17,0,10644,1,'kyo/bench/CollectAllBench$$anon$2.apply')
f(18,0,3410,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(19,0,2221,2,'kyo.bench.CollectAllBench$$anon$2')
f(19,2221,1189,1,'kyo/bench/CollectAllBench$$Lambda$41.0x0000000800d24940.apply')
f(20,2221,1189,1,'kyo/bench/CollectAllBench.$anonfun$2')
f(21,2221,1189,1,'scala/collection/AbstractIterable.sum')
f(22,2221,1189,1,'scala/collection/IterableOnceOps.sum$')
f(23,2221,1189,1,'scala/collection/IterableOnceOps.sum')
f(24,2221,1189,1,'scala/collection/AbstractIterable.reduce')
f(25,2221,1189,1,'scala/collection/IterableOnceOps.reduce$')
f(26,2221,1189,1,'scala/collection/IterableOnceOps.reduce')
f(27,2221,1189,1,'scala/collection/AbstractIterable.reduceLeft')
f(28,2221,1189,1,'scala/collection/IterableOnceOps.reduceLeft$')
f(29,2221,1189,1,'scala/collection/IterableOnceOps.reduceLeft')
f(30,2221,1189,1,'scala/collection/IterableOnceOps$$Lambda$42.0x0000000800d2a090.apply')
f(31,2221,1189,1,'scala/collection/IterableOnceOps.$anonfun$sum$1')
f(32,2221,1189,1,'scala/math/Numeric$IntIsIntegral$.plus')
f(33,2221,1189,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(34,2221,1189,1,'java/lang/Integer.valueOf')
f(35,2221,1189,2,'java.lang.Integer')
f(18,3410,7234,1,'kyo/lists$Lists$$anon$11.apply')
f(19,3410,7234,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(20,3410,7234,1,'kyo/lists$Lists$$Lambda$40.0x0000000800d0fb38.apply')
f(21,3410,7234,1,'kyo/lists$Lists.$anonfun$5')
f(22,3410,4574,1,'kyo/lists$Lists.loop$2')
f(23,3410,1772,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(24,3410,1772,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(25,3410,1772,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(26,3410,1772,2,'kyo.lists$Lists$$Lambda$40+0x0000000800d0fb38')
f(23,5182,2802,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(24,5182,2802,2,'kyo.lists$Lists$$anon$11')
f(22,7984,2660,1,'scala/collection/mutable/ListBuffer.addOne')
f(23,7984,2660,2,'scala.collection.immutable.$colon$colon')
f(16,10644,3800,1,'kyo/bench/CollectAllBench.kyoBench')
f(17,10644,9,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(18,10644,9,2,'kyo.bench.CollectAllBench$$anon$2')
f(17,10653,10,1,'kyo/lists$Lists.collect')
f(18,10653,10,1,'scala/collection/mutable/ListBuffer$.apply')
f(19,10653,10,1,'scala/collection/IterableFactory.apply$')
f(20,10653,10,1,'scala/collection/IterableFactory.apply')
f(21,10653,10,1,'scala/collection/mutable/ListBuffer$.from')
f(22,10653,10,1,'scala/collection/mutable/ListBuffer$.from')
f(23,10653,10,2,'scala.collection.mutable.ListBuffer')
f(17,10663,2037,1,'scala/collection/AbstractIterable.toList')
f(18,10663,2037,1,'scala/collection/IterableOnceOps.toList$')
f(19,10663,2037,1,'scala/collection/IterableOnceOps.toList')
f(20,10663,2037,1,'scala/collection/immutable/List.prependedAll')
f(21,10663,2028,2,'scala.collection.immutable.$colon$colon')
f(21,12691,9,1,'scala/collection/immutable/Vector.iterator')
f(22,12691,9,2,'scala.collection.immutable.NewVectorIterator')
f(17,12700,1744,1,'scala/collection/immutable/Range.map')
f(18,12700,1173,1,'kyo/bench/CollectAllBench$$Lambda$39.0x0000000800cbeb88.apply')
f(19,12700,1173,1,'kyo/bench/CollectAllBench.$anonfun$adapted$1')
f(20,12700,1173,1,'kyo/bench/CollectAllBench.$anonfun$1')
f(21,12700,1173,2,'kyo.bench.CollectAllBench$$anon$1')
f(18,13873,9,1,'scala/collection/SeqFactory$Delegate.newBuilder')
f(19,13873,9,1,'scala/collection/immutable/Vector$.newBuilder')
f(20,13873,9,1,'scala/collection/immutable/Vector$.newBuilder')
f(21,13873,9,1,'scala/collection/immutable/VectorBuilder.<init>')
f(22,13873,9,2,'java.lang.Object[]')
f(18,13882,544,1,'scala/collection/immutable/VectorBuilder.addOne')
f(19,13882,544,1,'scala/collection/immutable/VectorBuilder.addOne')
f(20,13882,544,1,'scala/collection/immutable/VectorBuilder.advance')
f(21,13882,544,1,'scala/collection/immutable/VectorBuilder.advance1')
f(22,13882,9,2,'java.lang.Object[][]')
f(22,13891,535,2,'java.lang.Object[]')
f(18,14426,18,1,'scala/collection/immutable/VectorBuilder.result')
f(19,14426,18,1,'scala/collection/immutable/VectorBuilder.result')
f(20,14426,18,1,'java/util/Arrays.copyOfRange')
f(21,14426,18,2,'java.lang.Object[][]')
f(1,14444,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,14444,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,14444,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,14444,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,14444,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,14444,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,14444,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,14444,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,14444,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,14444,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,14444,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,14444,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,14444,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: 720px}
</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(45);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,298,3,'all')
f(1,0,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,1,3,'thread_native_entry(Thread*)')
f(3,0,1,4,'Thread::call_run()')
f(4,0,1,4,'VMThread::run()')
f(5,0,1,4,'VMThread::inner_execute(VM_Operation*)')
f(6,0,1,4,'VMThread::evaluate_operation(VM_Operation*)')
f(7,0,1,4,'VM_Operation::evaluate()')
f(8,0,1,4,'VM_G1CollectForAllocation::doit()')
f(9,0,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint(double)')
f(10,0,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint_helper(double)')
f(11,0,1,4,'G1CollectedHeap::evacuate_initial_collection_set(G1ParScanThreadStateSet*, bool)')
f(12,0,1,4,'WorkGang::run_task(AbstractGangTask*, unsigned int, bool)')
f(13,0,1,3,'sem_post')
f(14,0,1,5,'entry_SYSCALL_64_after_hwframe')
f(15,0,1,5,'do_syscall_64')
f(16,0,1,5,'__x64_sys_futex')
f(17,0,1,5,'do_futex')
f(18,0,1,5,'futex_wake')
f(19,0,1,5,'wake_up_q')
f(20,0,1,5,'_raw_spin_unlock_irqrestore')
f(1,1,9,3,'[unknown_Java]')
f(2,1,2,1,'kyo/bench/CollectAllBench$$Lambda$41.0x0000000800d24940.apply')
f(2,3,7,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(1,10,288,1,'java/lang/Thread.run')
f(2,10,288,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,10,288,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,10,288,1,'java/util/concurrent/FutureTask.run')
f(5,10,288,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,10,288,1,'java/util/concurrent/FutureTask.run')
f(7,10,288,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,10,288,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,10,288,1,'java/lang/reflect/Method.invoke')
f(10,10,288,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,10,288,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,10,288,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,10,288,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,10,288,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,10,288,1,'kyo/bench/Bench.syncKyo',35,0,0)
f(16,10,188,1,'kyo/bench/Bench.runLoop$1',35,0,0)
f(17,19,179,1,'kyo/bench/CollectAllBench$$anon$2.apply',26,0,0)
f(18,23,57,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1',5,0,0)
f(19,24,52,1,'kyo/bench/CollectAllBench$$Lambda$41.0x0000000800d24940.apply')
f(20,24,52,2,'kyo/bench/CollectAllBench.$anonfun$2',38,0,0)
f(21,24,52,2,'scala/collection/AbstractIterable.sum',38,0,0)
f(22,24,52,2,'scala/collection/IterableOnceOps.sum$',38,0,0)
f(23,24,52,2,'scala/collection/IterableOnceOps.sum',38,0,0)
f(24,24,52,2,'scala/collection/AbstractIterable.reduce',38,0,0)
f(25,24,52,2,'scala/collection/IterableOnceOps.reduce$',38,0,0)
f(26,24,52,2,'scala/collection/IterableOnceOps.reduce',38,0,0)
f(27,24,52,2,'scala/collection/AbstractIterable.reduceLeft',38,0,0)
f(28,24,52,2,'scala/collection/IterableOnceOps.reduceLeft$',38,0,0)
f(29,24,52,2,'scala/collection/IterableOnceOps.reduceLeft',38,0,0)
f(30,26,45,2,'scala/collection/IterableOnceOps$$Lambda$42.0x0000000800d2a090.apply',31,0,0)
f(31,26,45,2,'scala/collection/IterableOnceOps.$anonfun$sum$1',31,0,0)
f(32,26,45,2,'scala/math/Numeric$IntIsIntegral$.plus',31,0,0)
f(33,26,42,2,'scala/runtime/BoxesRunTime.boxToInteger',28,0,0)
f(34,46,2,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(35,46,2,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(36,46,2,4,'MemAllocator::allocate() const')
f(37,46,2,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(38,46,2,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(39,46,2,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(40,46,2,4,'MutatorAllocRegion::retire(bool)')
f(41,46,1,4,'G1CollectedHeap::retire_mutator_alloc_region(HeapRegion*, unsigned long)')
f(42,46,1,4,'G1CollectionSet::add_eden_region(HeapRegion*)')
f(43,46,1,4,'G1Policy::predict_region_non_copy_time_ms(HeapRegion*, bool) const')
f(44,46,1,4,'G1Analytics::predict_card_scan_time_ms(unsigned long, bool) const')
f(41,47,1,4,'G1CollectedHeap::used_unlocked() const')
f(34,48,20,2,'java/lang/Integer.valueOf',8,0,0)
f(35,55,13,1,'java/lang/Integer.<init>',1,0,0)
f(36,56,12,1,'java/lang/Number.<init>')
f(33,68,3,2,'scala/runtime/BoxesRunTime.unboxToInt',3,0,0)
f(30,71,5,2,'scala/collection/StrictOptimizedLinearSeqOps$$anon$1.next',5,0,0)
f(19,76,4,2,'kyo/bench/CollectAllBench$$anon$2.<init>',4,0,0)
f(20,79,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(18,80,118,1,'kyo/lists$Lists$$anon$11.apply',17,0,0)
f(19,82,15,2,'kyo/bench/CollectAllBench$$anon$1.apply',15,0,0)
f(20,82,15,2,'kyo/bench/CollectAllBench$$anon$1.apply',15,0,0)
f(21,82,15,2,'scala/runtime/BoxesRunTime.boxToInteger',15,0,0)
f(19,97,101,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(20,105,82,2,'kyo/lists$Lists$$Lambda$40.0x0000000800d0fb38.apply',82,0,0)
f(21,105,82,2,'kyo/lists$Lists.$anonfun$5',82,0,0)
f(22,107,27,2,'kyo/lists$Lists.loop$2',27,0,0)
f(23,122,12,2,'scala/collection/immutable/List.equals',12,0,0)
f(24,122,12,2,'scala/collection/immutable/List.listEq$1',12,0,0)
f(22,134,53,2,'scala/collection/mutable/ListBuffer.addOne',53,0,0)
f(23,136,9,2,'scala/collection/immutable/$colon$colon.<init>',9,0,0)
f(24,136,4,2,'scala/collection/immutable/List.<init>',4,0,0)
f(25,136,4,2,'scala/collection/immutable/AbstractSeq.<init>',4,0,0)
f(26,136,4,2,'scala/collection/AbstractSeq.<init>',4,0,0)
f(27,137,3,2,'scala/collection/AbstractIterable.<init>',3,0,0)
f(28,137,3,2,'java/lang/Object.<init>',3,0,0)
f(24,140,5,2,'scala/runtime/Statics.releaseFence',5,0,0)
f(25,140,5,2,'java/lang/invoke/LambdaForm$MH.0x0000000800ca0400.invoke_MT',5,0,0)
f(23,145,3,2,'scala/collection/immutable/$colon$colon.next_$eq',3,0,0)
f(23,148,6,2,'scala/collection/mutable/ListBuffer.ensureUnaliased',6,0,0)
f(23,154,4,2,'scala/collection/mutable/ListBuffer.first_$eq',4,0,0)
f(23,158,29,2,'scala/collection/mutable/ListBuffer.last0_$eq',29,0,0)
f(20,187,11,2,'kyo/lists$Lists$$anon$11.<init>',11,0,0)
f(21,187,11,2,'kyo/core$internal$KyoCont.<init>',11,0,0)
f(22,189,9,2,'kyo/ios$KyoIO.effect',9,0,0)
f(16,198,100,1,'kyo/bench/CollectAllBench.kyoBench')
f(17,198,1,1,'kyo/lists$Lists.collect')
f(18,198,1,1,'kyo/lists$Lists.loop$2')
f(19,198,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(20,198,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(17,199,11,2,'scala/collection/AbstractIterable.toList',9,0,0)
f(18,199,11,2,'scala/collection/IterableOnceOps.toList$',9,0,0)
f(19,199,11,2,'scala/collection/IterableOnceOps.toList',9,0,0)
f(20,199,11,2,'scala/collection/immutable/List.prependedAll',9,0,0)
f(21,199,7,2,'scala/collection/immutable/$colon$colon.<init>',7,0,0)
f(21,206,4,2,'scala/collection/immutable/NewVectorIterator.next',2,0,0)
f(22,208,2,1,'scala/collection/immutable/NewVectorIterator.advance')
f(23,208,1,1,'scala/collection/immutable/NewVectorIterator.advanceA')
f(23,209,1,1,'scala/collection/immutable/NewVectorIterator.advanceSlice')
f(17,210,64,2,'scala/collection/immutable/Range.map',63,0,0)
f(18,231,26,2,'scala/collection/SeqFactory$Delegate.newBuilder',26,0,0)
f(19,232,25,2,'scala/collection/immutable/Vector$.newBuilder',25,0,0)
f(18,257,8,2,'scala/collection/immutable/Range.iterator',8,0,0)
f(19,262,3,2,'scala/collection/immutable/RangeIterator.<init>',3,0,0)
f(20,262,3,2,'scala/collection/AbstractIterator.<init>',3,0,0)
f(21,262,3,2,'java/lang/Object.<init>',3,0,0)
f(18,265,8,2,'scala/collection/immutable/RangeIterator.next',8,0,0)
f(19,265,8,2,'scala/collection/immutable/RangeIterator.next',8,0,0)
f(18,273,1,1,'scala/collection/immutable/VectorBuilder.addOne')
f(19,273,1,1,'scala/collection/immutable/VectorBuilder.addOne')
f(20,273,1,1,'scala/collection/immutable/VectorBuilder.advance')
f(21,273,1,1,'scala/collection/immutable/VectorBuilder.advance1')
f(17,274,24,2,'scala/runtime/RichInt$.until$extension',24,0,0)
f(18,274,24,2,'scala/collection/immutable/Range$Exclusive.<init>',24,0,0)
f(19,274,24,2,'scala/collection/immutable/Range.<init>',24,0,0)
f(20,280,18,2,'scala/collection/immutable/Range.longLength',18,0,0)
f(21,281,3,2,'scala/collection/immutable/Range.gap',3,0,0)
f(21,284,14,2,'scala/collection/immutable/Range.hasStub',14,0,0)
f(22,286,12,2,'scala/collection/immutable/Range.isExact',12,0,0)
f(23,294,4,2,'scala/collection/immutable/Range.gap',4,0,0)
f(24,294,4,2,'scala/collection/immutable/Range.start',4,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 400px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(25);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,19656,3,'all')
f(1,0,19652,1,'java/lang/Thread.run')
f(2,0,19652,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,19652,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,3896,1,'java/util/concurrent/FutureTask.run')
f(5,0,3896,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,3896,1,'java/util/concurrent/FutureTask.run')
f(7,0,3896,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,3896,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,3896,1,'java/lang/reflect/Method.invoke')
f(10,0,3896,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,3896,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,3896,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,3896,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,3896,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,3896,1,'kyo/bench/Bench.forkKyo')
f(16,0,621,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,621,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,621,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,320,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,0,320,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c81350')
f(19,320,301,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c81350')
f(16,621,631,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,621,631,2,'kyo.bench.Bench$$anon$1')
f(16,1252,2281,1,'kyo/bench/Bench.runLoop$2')
f(17,1252,884,1,'kyo/bench/Bench$$anon$1.apply')
f(18,1252,250,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,1252,250,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c88000.apply')
f(20,1252,250,1,'kyo/bench/Bench.$anonfun$2')
f(21,1252,250,1,'kyo/concurrent/fibers$Fiber.block')
f(22,1252,250,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,1502,634,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,1502,634,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,1502,634,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply')
f(21,1502,634,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,1502,49,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,1551,476,2,'kyo.concurrent.scheduler.IOTask')
f(22,2027,109,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,2027,109,2,'kyo.concurrent.fibers$Fiber')
f(17,2136,1397,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,2136,1397,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,2136,1397,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,2136,1397,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,2136,550,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,2136,550,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,2136,135,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,2271,415,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,2271,415,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,2686,419,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,3105,428,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,3105,428,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,3105,428,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,3533,363,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,3533,96,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,3533,96,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,3533,96,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,3533,96,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c82aa8')
f(17,3629,187,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,3629,187,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,3816,80,1,'kyo/locals$Locals$.save')
f(18,3816,80,2,'kyo.locals$Locals$$anon$3')
f(4,3896,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ee58.run')
f(5,3896,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,3896,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,3896,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,3896,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,3896,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,3896,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,3896,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,3907,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f080.run')
f(5,3907,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,3907,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,3907,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,3907,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,3907,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,3907,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,3907,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$68+0x0000000800d4ed20')
f(4,3918,15734,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23480.run')
f(5,3918,15734,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,3918,15734,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,3918,15733,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,3918,15733,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,3918,15542,1,'kyo/bench/CountdownLatchBench$$anon$1.apply')
f(10,3918,15541,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(11,3918,15541,1,'kyo/bench/CountdownLatchBench$$Lambda$62.0x0000000800d4d100.apply')
f(12,3918,15541,1,'kyo/bench/CountdownLatchBench.$anonfun$1')
f(13,3918,15541,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(14,3918,6503,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod')
f(15,3918,6503,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial')
f(16,3918,6503,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,3918,6503,2,'kyo.bench.CountdownLatchBench$$Lambda$62+0x0000000800d4d100')
f(14,10421,9038,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(15,10421,9038,2,'kyo.bench.CountdownLatchBench$$anon$1')
f(10,19459,1,1,'kyo/concurrent/latches$$anon$4.apply')
f(11,19459,1,1,'kyo/concurrent/latches$$anon$4.apply')
f(12,19459,1,1,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete')
f(13,19459,1,1,'kyo/concurrent/fibers$Fiber$Promise.loop$23')
f(14,19459,1,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(15,19459,1,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(16,19459,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(17,19459,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(18,19459,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(19,19459,1,1,'scala/runtime/function/JProcedure1.apply')
f(20,19459,1,1,'scala/runtime/function/JProcedure1.apply')
f(21,19459,1,1,'kyo/concurrent/scheduler/IOTask$$Lambda$64.0x0000000800d4dad8.applyVoid')
f(22,19459,1,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(23,19459,1,2,'kyo.concurrent.scheduler.IOTask')
f(9,19460,3,1,'kyo/bench/CountdownLatchBench$$anon$3.apply')
f(10,19460,2,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$3')
f(11,19460,2,1,'kyo/bench/CountdownLatchBench$$Lambda$59.0x0000000800d4c6a8.apply')
f(12,19460,2,1,'kyo/bench/CountdownLatchBench.$anonfun$4')
f(13,19460,2,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$2')
f(14,19460,2,2,'kyo.bench.CountdownLatchBench$$anon$2')
f(10,19462,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,19462,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,19462,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply')
f(13,19462,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,19462,1,2,'kyo.concurrent.scheduler.IOTask')
f(9,19463,9,1,'kyo/bench/CountdownLatchBench$$anon$4.apply')
f(10,19463,6,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$4')
f(11,19463,6,1,'kyo/bench/CountdownLatchBench$$Lambda$57.0x0000000800d4b1e0.apply')
f(12,19463,6,1,'kyo/bench/CountdownLatchBench.$anonfun$2')
f(13,19463,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(14,19463,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(15,19463,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,19463,1,2,'kyo.bench.CountdownLatchBench$$Lambda$58+0x0000000800d4c3e8')
f(16,19464,1,2,'kyo.bench.CountdownLatchBench$$Lambda$59+0x0000000800d4c6a8')
f(13,19465,4,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(14,19465,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(15,19465,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(16,19465,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,19465,2,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c82aa8')
f(14,19467,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(15,19467,2,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(10,19469,3,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(11,19469,3,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(12,19469,3,1,'kyo/concurrent/latches$$anon$3.<init>')
f(13,19469,1,2,'java.util.concurrent.atomic.AtomicInteger')
f(13,19470,2,1,'kyo/concurrent/fibers$Fibers.unsafePromise')
f(14,19470,2,2,'kyo.concurrent.fibers$Fiber$Promise')
f(9,19472,178,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,19472,178,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,19472,175,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c81350.apply')
f(12,19472,175,1,'kyo/bench/Bench.$anonfun$1')
f(13,19472,175,1,'kyo/bench/CountdownLatchBench.kyoBenchFiber')
f(14,19472,175,1,'kyo/concurrent/latches$Latches$.init')
f(15,19472,175,1,'kyo/concurrent/latches$Latches$.kyo$concurrent$latches$Latches$$$_$transformLoop$1')
f(16,19472,175,1,'kyo/concurrent/latches$Latches$$$Lambda$56.0x0000000800d49f00.apply')
f(17,19472,175,1,'kyo/concurrent/latches$Latches$.$anonfun$adapted$1')
f(18,19472,175,1,'kyo/concurrent/latches$Latches$.$anonfun$1')
f(19,19472,175,2,'kyo.concurrent.latches$Latches$$anon$2')
f(11,19647,3,1,'kyo/bench/CountdownLatchBench$$Lambda$58.0x0000000800d4c3e8.apply')
f(12,19647,3,1,'kyo/bench/CountdownLatchBench.$anonfun$3')
f(13,19647,3,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(14,19647,1,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod')
f(15,19647,1,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial')
f(16,19647,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,19647,1,2,'kyo.bench.CountdownLatchBench$$Lambda$62+0x0000000800d4d100')
f(14,19648,2,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(15,19648,2,2,'kyo.bench.CountdownLatchBench$$anon$1')
f(9,19650,1,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,19650,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,19650,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,19651,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,19651,1,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,19651,1,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,19651,1,1,'scala/runtime/ObjectRef.create')
f(11,19651,1,2,'scala.runtime.ObjectRef')
f(1,19652,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,19652,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,19652,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,19652,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,19652,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,19652,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,19652,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,19652,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,19652,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,19652,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,19652,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,19652,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,19652,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,19655,1,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,19655,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,19655,1,1,'java/lang/ClassLoader.loadClass')
f(10,19655,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,19655,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,19655,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,19655,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,19655,1,1,'jdk/internal/loader/URLClassPath.getResource')
f(15,19655,1,1,'jdk/internal/loader/URLClassPath$JarLoader.getResource')
f(16,19655,1,1,'java/util/jar/JarFile.getJarEntry')
f(17,19655,1,1,'java/util/jar/JarFile.getEntry')
f(18,19655,1,1,'java/util/zip/ZipFile.getEntry')
f(19,19655,1,1,'java/util/zip/ZipFile$Source.getEntryPos')
f(20,19655,1,1,'java/util/zip/ZipCoder$UTF8ZipCoder.toString')
f(21,19655,1,1,'java/lang/System$2.newStringUTF8NoRepl')
f(22,19655,1,1,'java/lang/String.newStringUTF8NoRepl')
f(23,19655,1,1,'java/util/Arrays.copyOfRange')
f(24,19655,1,2,'byte[]')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 576px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(36);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,281,3,'all')
f(1,0,4,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,4,3,'thread_native_entry(Thread*)')
f(3,0,4,4,'Thread::call_run()')
f(4,0,4,4,'JavaThread::thread_main_inner()')
f(5,0,4,4,'CompileBroker::compiler_thread_loop()')
f(6,0,4,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,4,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,4,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,2,4,'Compile::Code_Gen()')
f(10,0,1,4,'PhaseCFG::do_global_code_motion()')
f(11,0,1,4,'PhaseCFG::estimate_block_frequency()')
f(12,0,1,4,'PhaseCFG::create_loop_tree()')
f(10,1,1,4,'PhaseChaitin::Register_Allocate()')
f(11,1,1,4,'PhaseChaitin::Simplify()')
f(12,1,1,4,'PhaseIFG::remove_node(unsigned int)')
f(13,1,1,4,'IndexSetIterator::advance_and_next()')
f(9,2,1,4,'Compile::Optimize()')
f(10,2,1,4,'PhaseIdealLoop::optimize(PhaseIterGVN&, LoopOptsMode)')
f(11,2,1,4,'PhaseIdealLoop::build_and_optimize(LoopOptsMode)')
f(12,2,1,4,'PhaseIdealLoop::Dominators()')
f(13,2,1,4,'NTarjan::DFS(NTarjan*, VectorSet&, PhaseIdealLoop*, unsigned int*)')
f(9,3,1,4,'ParseGenerator::generate(JVMState*)')
f(10,3,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(11,3,1,4,'Parse::do_all_blocks()')
f(12,3,1,4,'Parse::do_one_block()')
f(13,3,1,4,'Parse::do_call()')
f(14,3,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(15,3,1,4,'ParseGenerator::generate(JVMState*)')
f(16,3,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(17,3,1,4,'Parse::do_all_blocks()')
f(18,3,1,4,'Parse::do_one_block()')
f(19,3,1,4,'Parse::do_call()')
f(20,3,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(21,3,1,4,'ParseGenerator::generate(JVMState*)')
f(22,3,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(23,3,1,4,'Parse::do_all_blocks()')
f(24,3,1,4,'Parse::do_one_block()')
f(25,3,1,4,'Parse::do_instanceof()')
f(26,3,1,4,'GraphKit::gen_instanceof(Node*, Node*, bool)')
f(27,3,1,4,'GraphKit::null_check_oop(Node*, Node**, bool, bool, bool)')
f(28,3,1,4,'GraphKit::null_check_common(Node*, BasicType, bool, Node**, bool) [clone .part.0]')
f(29,3,1,4,'PhaseGVN::transform_no_reclaim(Node*)')
f(30,3,1,4,'NodeHash::hash_find_insert(Node*)')
f(31,3,1,4,'CmpPNode::Opcode() const')
f(1,4,1,3,'[unknown]')
f(2,4,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(1,5,276,1,'java/lang/Thread.run')
f(2,5,276,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,5,276,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,5,12,1,'java/util/concurrent/FutureTask.run')
f(5,5,12,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,5,12,1,'java/util/concurrent/FutureTask.run')
f(7,5,12,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,5,12,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,5,12,1,'java/lang/reflect/Method.invoke')
f(10,5,12,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,5,12,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,5,12,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,5,12,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,5,12,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,5,12,1,'kyo/bench/Bench.forkKyo')
f(16,5,11,1,'kyo/bench/Bench.runLoop$2')
f(17,5,5,1,'kyo/bench/Bench$$anon$1.apply')
f(18,5,5,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,5,5,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,5,4,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply')
f(21,5,4,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,5,4,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,5,4,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,5,4,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,5,4,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,5,4,1,'jdk/internal/misc/Unsafe.unpark')
f(27,5,4,3,'pthread_cond_signal')
f(28,5,4,5,'entry_SYSCALL_64_after_hwframe')
f(29,5,4,5,'do_syscall_64')
f(30,5,4,5,'__x64_sys_futex')
f(31,5,4,5,'do_futex')
f(32,5,4,5,'futex_wake')
f(33,5,4,5,'wake_up_q')
f(34,5,4,5,'_raw_spin_unlock_irqrestore')
f(20,9,1,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',1,0,0)
f(21,9,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(22,9,1,2,'kyo/ios$KyoIO.effect',1,0,0)
f(17,10,6,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,10,6,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,10,6,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,10,6,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,10,6,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,10,6,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,10,1,2,'java/lang/Thread.interrupted',1,0,0)
f(23,11,5,1,'java/util/concurrent/locks/LockSupport.park')
f(24,11,5,1,'jdk/internal/misc/Unsafe.park')
f(25,11,5,3,'[unknown]')
f(26,11,5,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,11,5,5,'entry_SYSCALL_64_after_hwframe')
f(28,11,5,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(29,15,1,5,'syscall_exit_to_user_mode')
f(30,15,1,5,'exit_to_user_mode_prepare')
f(31,15,1,5,'exit_to_user_mode_loop')
f(32,15,1,5,'__rseq_handle_notify_resume')
f(33,15,1,5,'rseq_ip_fixup')
f(34,15,1,5,'__get_user_8')
f(16,16,1,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(4,17,264,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23480.run')
f(5,17,264,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,17,264,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,17,255,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,61,211,2,'kyo/concurrent/scheduler/IOTask.eval',201,0,0)
f(9,119,125,2,'kyo/bench/CountdownLatchBench$$anon$1.apply',124,0,0)
f(10,133,66,2,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1',66,0,0)
f(11,134,65,2,'kyo/bench/CountdownLatchBench$$Lambda$62.0x0000000800d4d100.apply',65,0,0)
f(12,153,46,2,'kyo/bench/CountdownLatchBench.$anonfun$1',46,0,0)
f(13,153,46,2,'kyo/bench/CountdownLatchBench.iterate$2',46,0,0)
f(14,157,13,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod',13,0,0)
f(15,157,13,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial',13,0,0)
f(16,157,13,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',13,0,0)
f(14,170,28,2,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1',28,0,0)
f(15,176,12,2,'kyo/bench/CountdownLatchBench$$Lambda$62.0x0000000800d4d100.apply',12,0,0)
f(16,176,12,2,'kyo/bench/CountdownLatchBench.$anonfun$1',12,0,0)
f(17,176,12,2,'kyo/bench/CountdownLatchBench.iterate$2',12,0,0)
f(18,182,6,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod',6,0,0)
f(19,182,6,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial',6,0,0)
f(20,187,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(15,188,10,2,'kyo/bench/CountdownLatchBench$$anon$1.<init>',10,0,0)
f(16,197,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(17,197,1,2,'kyo/ios$KyoIO.effect',1,0,0)
f(18,197,1,2,'kyo/ios$KyoIO.effect',1,0,0)
f(14,198,1,2,'kyo/concurrent/latches$$anon$3.release',1,0,0)
f(10,199,45,2,'kyo/concurrent/latches$$anon$4.apply',44,0,0)
f(11,207,37,2,'kyo/concurrent/latches$$anon$4.apply',36,0,0)
f(12,235,6,2,'java/util/concurrent/atomic/AtomicInteger.get',6,0,0)
f(12,241,1,1,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete')
f(13,241,1,1,'kyo/concurrent/fibers$Fiber$Promise.loop$23')
f(14,241,1,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(15,241,1,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(16,241,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(17,241,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(18,241,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(19,241,1,1,'scala/runtime/function/JProcedure1.apply')
f(20,241,1,2,'scala/runtime/function/JProcedure1.apply',1,0,0)
f(21,241,1,2,'kyo/concurrent/scheduler/IOTask$$Lambda$64.0x0000000800d4dad8.applyVoid',1,0,0)
f(22,241,1,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',1,0,0)
f(23,241,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(24,241,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(25,241,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(12,242,2,2,'kyo/concurrent/latches$$anon$3.promise',2,0,0)
f(9,244,2,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',2,0,0)
f(9,246,9,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,246,9,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,246,9,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,246,9,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,246,9,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,246,9,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,246,9,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,246,9,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,246,9,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,246,9,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,246,9,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,246,9,1,'jdk/internal/misc/Unsafe.unpark')
f(21,246,9,3,'pthread_cond_signal')
f(22,247,8,5,'entry_SYSCALL_64_after_hwframe')
f(23,247,8,5,'do_syscall_64')
f(24,247,8,5,'__x64_sys_futex')
f(25,247,8,5,'do_futex')
f(26,247,8,5,'futex_wake')
f(27,247,8,5,'wake_up_q')
f(28,247,8,5,'_raw_spin_unlock_irqrestore')
f(9,255,17,2,'kyo/concurrent/scheduler/IOTask.st',17,0,0)
f(7,272,9,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,272,9,1,'kyo/concurrent/scheduler/Worker.park')
f(9,272,9,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,272,9,1,'jdk/internal/misc/Unsafe.park')
f(11,273,2,3,'Unsafe_Park')
f(12,273,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,273,2,5,'entry_SYSCALL_64_after_hwframe')
f(14,273,1,5,'__x64_sys_futex')
f(14,274,1,5,'do_syscall_64')
f(15,274,1,5,'__x64_sys_futex')
f(16,274,1,5,'do_futex')
f(17,274,1,5,'futex_wake')
f(11,275,6,3,'[unknown]')
f(12,275,6,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,275,6,5,'entry_SYSCALL_64_after_hwframe')
f(14,275,6,5,'do_syscall_64')
f(15,275,3,5,'__x64_sys_futex')
f(16,275,3,5,'do_futex')
f(17,275,3,5,'futex_wait')
f(18,275,2,5,'futex_wait_queue_me')
f(19,275,2,5,'schedule')
f(20,275,2,5,'__schedule')
f(21,275,2,5,'finish_task_switch.isra.0')
f(18,277,1,5,'hrtimer_init_sleeper')
f(19,277,1,5,'__hrtimer_init')
f(15,278,1,5,'syscall_enter_from_user_mode')
f(15,279,2,5,'syscall_exit_to_user_mode')
f(16,279,2,5,'exit_to_user_mode_prepare')
f(17,279,2,5,'exit_to_user_mode_loop')
f(18,280,1,5,'__rseq_handle_notify_resume')
f(19,280,1,5,'rseq_ip_fixup')
f(20,280,1,5,'__get_user_8')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 464px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(29);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,18002,3,'all')
f(1,0,17999,1,'java/lang/Thread.run')
f(2,0,17999,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,17999,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,2267,1,'java/util/concurrent/FutureTask.run')
f(5,0,2267,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,2267,1,'java/util/concurrent/FutureTask.run')
f(7,0,2267,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,2267,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,2267,1,'java/lang/reflect/Method.invoke')
f(10,0,2267,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,2267,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,2267,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,2267,1,'kyo/bench/jmh_generated/CountdownLatchBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,2267,1,'kyo/bench/jmh_generated/CountdownLatchBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,2267,1,'kyo/bench/Bench.syncKyo')
f(16,0,1069,1,'kyo/bench/Bench.runLoop$1')
f(17,0,508,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,508,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,508,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,508,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,310,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,310,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,137,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,137,173,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,137,173,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,310,122,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,432,76,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,432,76,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,432,76,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,508,561,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,508,543,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,508,543,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,508,543,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,508,389,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,508,389,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,508,389,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply')
f(24,508,389,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,508,87,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(25,595,254,2,'kyo.concurrent.scheduler.IOTask')
f(25,849,48,1,'kyo/concurrent/fibers$Fiber$.promise')
f(26,849,48,2,'kyo.concurrent.fibers$Fiber')
f(21,897,154,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,897,154,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c88000.apply')
f(23,897,154,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,897,154,1,'kyo/concurrent/fibers$Fiber.join')
f(25,897,154,1,'kyo/concurrent/fibers$Fibers.get')
f(26,897,154,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,897,154,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,1051,18,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,1051,18,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c88800.apply')
f(20,1051,18,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,1051,18,1,'kyo/concurrent/fibers$Fiber.block')
f(22,1051,18,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,1069,1198,1,'kyo/bench/CountdownLatchBench.kyoBench')
f(17,1069,121,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1069,121,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1069,121,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1069,54,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(21,1069,54,2,'kyo.bench.CountdownLatchBench$$Lambda$37+0x0000000800c81350')
f(20,1123,67,2,'kyo.bench.CountdownLatchBench$$Lambda$37+0x0000000800c81350')
f(17,1190,501,1,'kyo/concurrent/fibers$Fibers.block')
f(18,1190,35,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,1190,35,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,1190,35,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,1190,35,2,'kyo.concurrent.fibers$Fibers$$Lambda$40+0x0000000800c88800')
f(18,1225,59,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,1225,59,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,1284,133,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,1284,133,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,1417,274,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,1417,274,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,1691,576,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,1691,52,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,1691,52,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,1691,52,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,1691,52,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c88000')
f(18,1743,406,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,1743,135,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,1743,135,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,1743,135,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,1743,135,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c82aa8')
f(19,1878,170,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,1878,170,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(19,2048,101,1,'kyo/locals$Locals$.save')
f(20,2048,101,2,'kyo.locals$Locals$$anon$3')
f(18,2149,118,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,2149,118,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(4,2267,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f088.run')
f(5,2267,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,2267,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,2267,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,2267,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,2267,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,2267,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,2267,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,2278,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1f2b0.run')
f(5,2278,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,2278,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,2278,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,2278,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,2278,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,2278,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$70+0x0000000800d4efe0')
f(4,2289,15710,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23688.run')
f(5,2289,15710,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,2289,15710,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,2289,15708,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,2289,15708,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,2289,15566,1,'kyo/bench/CountdownLatchBench$$anon$1.apply')
f(10,2289,15565,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(11,2289,15565,1,'kyo/bench/CountdownLatchBench$$Lambda$63.0x0000000800d4d100.apply')
f(12,2289,15565,1,'kyo/bench/CountdownLatchBench.$anonfun$1')
f(13,2289,15565,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(14,2289,6831,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod')
f(15,2289,6831,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial')
f(16,2289,6831,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,2289,6831,2,'kyo.bench.CountdownLatchBench$$Lambda$63+0x0000000800d4d100')
f(14,9120,8734,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(15,9120,8734,2,'kyo.bench.CountdownLatchBench$$anon$1')
f(10,17854,1,1,'kyo/concurrent/latches$$anon$4.apply')
f(11,17854,1,1,'kyo/concurrent/latches$$anon$4.apply')
f(12,17854,1,1,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete')
f(13,17854,1,1,'kyo/concurrent/fibers$Fiber$Promise.loop$23')
f(14,17854,1,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(15,17854,1,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(16,17854,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(17,17854,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(18,17854,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(19,17854,1,1,'scala/runtime/function/JProcedure1.apply')
f(20,17854,1,1,'scala/runtime/function/JProcedure1.apply')
f(21,17854,1,1,'kyo/concurrent/scheduler/IOTask$$Lambda$65.0x0000000800d4dad8.applyVoid')
f(22,17854,1,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(23,17854,1,1,'kyo/concurrent/scheduler/IOPromise.become')
f(24,17854,1,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(25,17854,1,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(26,17854,1,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(27,17854,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(28,17854,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(9,17855,4,1,'kyo/bench/CountdownLatchBench$$anon$3.apply')
f(10,17855,2,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$3')
f(11,17855,2,1,'kyo/bench/CountdownLatchBench$$Lambda$60.0x0000000800d4c6a8.apply')
f(12,17855,2,1,'kyo/bench/CountdownLatchBench.$anonfun$4')
f(13,17855,2,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$2')
f(14,17855,2,2,'kyo.bench.CountdownLatchBench$$anon$2')
f(10,17857,2,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,17857,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,17857,2,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply')
f(13,17857,2,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,17857,2,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(9,17859,9,1,'kyo/bench/CountdownLatchBench$$anon$4.apply')
f(10,17859,6,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$4')
f(11,17859,6,1,'kyo/bench/CountdownLatchBench$$Lambda$58.0x0000000800d4ad80.apply')
f(12,17859,6,1,'kyo/bench/CountdownLatchBench.$anonfun$2')
f(13,17859,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(14,17859,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(15,17859,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,17859,1,2,'kyo.bench.CountdownLatchBench$$Lambda$59+0x0000000800d4c3e8')
f(13,17860,1,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$3')
f(14,17860,1,2,'kyo.bench.CountdownLatchBench$$anon$3')
f(13,17861,4,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(14,17861,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(15,17861,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(16,17861,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,17861,1,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c82aa8')
f(14,17862,3,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(15,17862,3,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(10,17865,3,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(11,17865,3,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(12,17865,3,1,'kyo/concurrent/latches$$anon$3.<init>')
f(13,17865,1,1,'kyo/concurrent/fibers$Fiber.join')
f(14,17865,1,1,'kyo/concurrent/fibers$Fibers.get')
f(15,17865,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(16,17865,1,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(13,17866,2,1,'kyo/concurrent/fibers$Fibers.unsafePromise')
f(14,17866,1,2,'kyo.concurrent.fibers$Fiber$Promise')
f(14,17867,1,2,'kyo.concurrent.scheduler.IOPromise')
f(9,17868,125,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,17868,125,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,17868,123,1,'kyo/bench/CountdownLatchBench$$Lambda$37.0x0000000800c81350.apply')
f(12,17868,123,1,'kyo/bench/CountdownLatchBench.kyoBench$$anonfun$1')
f(13,17868,123,1,'kyo/bench/CountdownLatchBench.kyoBenchFiber')
f(14,17868,1,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$4')
f(15,17868,1,2,'kyo.bench.CountdownLatchBench$$anon$4')
f(14,17869,122,1,'kyo/concurrent/latches$Latches$.init')
f(15,17869,122,1,'kyo/concurrent/latches$Latches$.kyo$concurrent$latches$Latches$$$_$transformLoop$1')
f(16,17869,122,1,'kyo/concurrent/latches$Latches$$$Lambda$57.0x0000000800d49cd0.apply')
f(17,17869,122,1,'kyo/concurrent/latches$Latches$.$anonfun$adapted$1')
f(18,17869,122,1,'kyo/concurrent/latches$Latches$.$anonfun$1')
f(19,17869,122,2,'kyo.concurrent.latches$Latches$$anon$2')
f(11,17991,2,1,'kyo/bench/CountdownLatchBench$$Lambda$59.0x0000000800d4c3e8.apply')
f(12,17991,2,1,'kyo/bench/CountdownLatchBench.$anonfun$3')
f(13,17991,2,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(14,17991,2,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod')
f(15,17991,2,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial')
f(16,17991,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,17991,2,2,'kyo.bench.CountdownLatchBench$$Lambda$63+0x0000000800d4d100')
f(9,17993,3,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,17993,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,17993,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,17993,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,17993,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$64+0x0000000800d4d6d0')
f(10,17994,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,17994,2,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(9,17996,1,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,17996,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,17996,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,17997,2,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,17997,2,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,17997,2,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,17997,2,1,'scala/runtime/ObjectRef.create')
f(11,17997,2,2,'scala.runtime.ObjectRef')
f(1,17999,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,17999,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,17999,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,17999,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,17999,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,17999,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,17999,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,17999,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,17999,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,17999,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,17999,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,17999,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,17999,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,271,3,'all')
f(1,0,6,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,6,3,'thread_native_entry(Thread*)')
f(3,0,6,4,'Thread::call_run()')
f(4,0,5,4,'JavaThread::thread_main_inner()')
f(5,0,5,4,'CompileBroker::compiler_thread_loop()')
f(6,0,5,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,5,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,5,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,2,4,'Compile::Code_Gen()')
f(10,0,1,4,'PhaseChaitin::Register_Allocate()')
f(11,0,1,4,'PhaseChaitin::gather_lrg_masks(bool) [clone .constprop.0]')
f(12,0,1,4,'RegMask::is_misaligned_pair() const')
f(10,1,1,4,'PhaseOutput::Output()')
f(11,1,1,4,'PhaseOutput::shorten_branches(unsigned int*)')
f(12,1,1,4,'PhaseOutput::scratch_emit_size(Node const*)')
f(13,1,1,4,'Assembler::shrq(RegisterImpl*, int)')
f(9,2,3,4,'Compile::Optimize()')
f(10,2,1,4,'PhaseIdealLoop::build_and_optimize(LoopOptsMode)')
f(11,2,1,4,'PhaseIdealLoop::Dominators()')
f(10,3,2,4,'PhaseIdealLoop::optimize(PhaseIterGVN&, LoopOptsMode)')
f(11,3,2,4,'PhaseIdealLoop::build_and_optimize(LoopOptsMode)')
f(12,3,2,4,'PhaseIdealLoop::build_loop_late(VectorSet&, Node_List&, Node_Stack&)')
f(13,4,1,4,'Node::is_CFG() const')
f(4,5,1,4,'VMThread::run()')
f(5,5,1,4,'VMThread::inner_execute(VM_Operation*)')
f(6,5,1,4,'VMThread::evaluate_operation(VM_Operation*)')
f(7,5,1,4,'VM_Operation::evaluate()')
f(8,5,1,4,'VM_G1CollectForAllocation::doit()')
f(9,5,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint(double)')
f(10,5,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint_helper(double)')
f(11,5,1,4,'G1CollectedHeap::start_new_collection_set()')
f(1,6,265,1,'java/lang/Thread.run')
f(2,6,265,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,6,265,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,6,14,1,'java/util/concurrent/FutureTask.run')
f(5,6,14,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,6,14,1,'java/util/concurrent/FutureTask.run')
f(7,6,14,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,6,14,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,6,14,1,'java/lang/reflect/Method.invoke')
f(10,6,14,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,6,14,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,6,14,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,6,14,1,'kyo/bench/jmh_generated/CountdownLatchBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,6,14,1,'kyo/bench/jmh_generated/CountdownLatchBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,6,14,1,'kyo/bench/Bench.syncKyo')
f(16,6,14,1,'kyo/bench/Bench.runLoop$1')
f(17,6,5,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,6,5,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,6,5,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,6,5,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,6,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,6,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,6,5,1,'java/util/concurrent/locks/LockSupport.park')
f(24,6,5,1,'jdk/internal/misc/Unsafe.park')
f(25,6,5,3,'[unknown]')
f(26,6,5,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,6,5,5,'entry_SYSCALL_64_after_hwframe')
f(28,6,5,5,'do_syscall_64')
f(29,6,4,5,'__x64_sys_futex')
f(30,6,4,5,'do_futex')
f(31,6,4,5,'futex_wait')
f(32,6,4,5,'futex_wait_queue_me')
f(33,6,4,5,'schedule')
f(34,6,4,5,'__schedule')
f(35,6,4,5,'finish_task_switch.isra.0')
f(29,10,1,5,'syscall_exit_to_user_mode')
f(30,10,1,5,'exit_to_user_mode_prepare')
f(31,10,1,5,'exit_to_user_mode_loop')
f(32,10,1,5,'__rseq_handle_notify_resume')
f(17,11,9,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,11,8,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply',1,0,0)
f(19,11,8,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1',1,0,0)
f(20,11,8,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply',1,0,0)
f(21,12,7,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,12,7,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,12,7,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply')
f(24,12,7,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,12,7,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,12,7,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,12,6,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(28,12,6,1,'java/util/concurrent/locks/LockSupport.unpark')
f(29,12,6,1,'jdk/internal/misc/Unsafe.unpark')
f(30,12,1,3,'Unsafe_Unpark')
f(31,12,1,4,'ThreadsListHandle::cv_internal_thread_to_JavaThread(_jobject*, JavaThread**, oopDesc**)')
f(30,13,5,3,'pthread_cond_signal')
f(31,13,5,5,'entry_SYSCALL_64_after_hwframe')
f(32,13,5,5,'do_syscall_64')
f(33,13,5,5,'__x64_sys_futex')
f(34,13,5,5,'do_futex')
f(35,13,5,5,'futex_wake')
f(36,14,4,5,'wake_up_q')
f(37,14,4,5,'_raw_spin_unlock_irqrestore')
f(27,18,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.poll')
f(18,19,1,2,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26',1,0,0)
f(19,19,1,2,'kyo/concurrent/fibers$Fibers$$anon$117.<init>',1,0,0)
f(20,19,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(4,20,251,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23688.run')
f(5,20,251,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,20,251,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,20,243,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,50,213,2,'kyo/concurrent/scheduler/IOTask.eval',203,0,0)
f(9,146,93,2,'kyo/bench/CountdownLatchBench$$anon$1.apply',91,0,0)
f(10,150,41,2,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1',41,0,0)
f(11,153,38,2,'kyo/bench/CountdownLatchBench$$Lambda$63.0x0000000800d4d100.apply',38,0,0)
f(12,154,37,2,'kyo/bench/CountdownLatchBench.$anonfun$1',37,0,0)
f(13,154,37,2,'kyo/bench/CountdownLatchBench.iterate$2',37,0,0)
f(14,166,7,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod',7,0,0)
f(15,166,7,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial',7,0,0)
f(16,166,7,2,'kyo/bench/CountdownLatchBench$$Lambda$63.0x0000000800d4d100.<init>',7,0,0)
f(14,173,18,2,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1',18,0,0)
f(15,173,18,2,'kyo/bench/CountdownLatchBench$$anon$1.<init>',18,0,0)
f(16,177,14,2,'kyo/core$internal$KyoCont.<init>',14,0,0)
f(17,177,11,2,'kyo/core$internal$Kyo.<init>',11,0,0)
f(18,185,3,2,'java/lang/Object.<init>',3,0,0)
f(17,188,3,2,'kyo/ios$KyoIO.value',3,0,0)
f(10,191,32,2,'kyo/concurrent/latches$$anon$4.apply',30,0,0)
f(11,201,22,2,'kyo/concurrent/latches$$anon$4.apply',20,0,0)
f(12,215,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(13,215,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(14,215,1,4,'MemAllocator::allocate() const')
f(15,215,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(16,215,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(17,215,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(18,215,1,4,'G1AllocRegion::new_alloc_region_and_allocate(unsigned long, bool)')
f(19,215,1,4,'G1CollectedHeap::new_mutator_alloc_region(unsigned long, bool, unsigned int)')
f(12,216,6,2,'java/util/concurrent/atomic/AtomicInteger.decrementAndGet',6,0,0)
f(12,222,1,1,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete')
f(13,222,1,1,'kyo/concurrent/fibers$Fiber$Promise.loop$23')
f(14,222,1,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(15,222,1,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(16,222,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(17,222,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(18,222,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(19,222,1,1,'scala/runtime/function/JProcedure1.apply')
f(20,222,1,2,'scala/runtime/function/JProcedure1.apply',1,0,0)
f(21,222,1,2,'kyo/concurrent/scheduler/IOTask$$Lambda$65.0x0000000800d4dad8.applyVoid',1,0,0)
f(22,222,1,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',1,0,0)
f(23,222,1,2,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1',1,0,0)
f(24,222,1,2,'kyo/concurrent/scheduler/IOTask$$Lambda$66.0x0000000800d4dee0.apply',1,0,0)
f(25,222,1,2,'kyo/concurrent/scheduler/IOTask.$anonfun$1',1,0,0)
f(26,222,1,2,'kyo/bench/CountdownLatchBench$$anon$2.apply',1,0,0)
f(27,222,1,2,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$2',1,0,0)
f(28,222,1,2,'kyo/bench/CountdownLatchBench$$Lambda$61.0x0000000800d4ca78.apply',1,0,0)
f(29,222,1,2,'kyo/bench/CountdownLatchBench.$anonfun$5',1,0,0)
f(30,222,1,2,'scala/runtime/BoxesRunTime.boxToInteger',1,0,0)
f(10,223,16,2,'kyo/concurrent/scheduler/IOTask.apply',16,0,0)
f(9,239,1,1,'kyo/bench/CountdownLatchBench$$anon$3.apply')
f(10,239,1,2,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$3',1,0,0)
f(11,239,1,2,'kyo/bench/CountdownLatchBench$$Lambda$60.0x0000000800d4c6a8.apply',1,0,0)
f(12,239,1,2,'kyo/bench/CountdownLatchBench.$anonfun$4',1,0,0)
f(13,239,1,2,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$2',1,0,0)
f(14,239,1,2,'kyo/bench/CountdownLatchBench$$Lambda$61.0x0000000800d4ca78.apply',1,0,0)
f(15,239,1,2,'kyo/bench/CountdownLatchBench.$anonfun$5',1,0,0)
f(16,239,1,2,'scala/runtime/BoxesRunTime.boxToInteger',1,0,0)
f(9,240,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(9,241,16,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',16,0,0)
f(9,257,1,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,257,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(11,257,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(12,257,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(9,258,5,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,258,5,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,258,5,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,258,5,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,258,5,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,258,5,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,258,5,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,258,5,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,258,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,258,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,258,5,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,258,5,1,'jdk/internal/misc/Unsafe.unpark')
f(21,258,2,3,'Unsafe_Unpark')
f(22,258,1,4,'SafeThreadsListPtr::release_stable_list()')
f(22,259,1,4,'ThreadsListHandle::cv_internal_thread_to_JavaThread(_jobject*, JavaThread**, oopDesc**)')
f(21,260,3,3,'pthread_cond_signal')
f(22,260,3,5,'entry_SYSCALL_64_after_hwframe')
f(23,260,1,5,'__x64_sys_futex')
f(23,261,2,5,'do_syscall_64')
f(24,262,1,5,'__x64_sys_futex')
f(25,262,1,5,'do_futex')
f(26,262,1,5,'futex_wake')
f(27,262,1,5,'wake_up_q')
f(28,262,1,5,'_raw_spin_unlock_irqrestore')
f(7,263,1,2,'kyo/concurrent/scheduler/Queue.poll',1,0,0)
f(8,263,1,2,'kyo/concurrent/scheduler/Queue.modify',1,0,0)
f(9,263,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(10,263,1,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',1,0,0)
f(11,263,1,2,'java/lang/invoke/VarHandle.isDirect',1,0,0)
f(7,264,7,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,264,1,1,'java/util/AbstractQueue.add')
f(9,264,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.offer')
f(10,264,1,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.producerChunkForIndex',1,0,0)
f(8,265,6,1,'kyo/concurrent/scheduler/Worker.park')
f(9,265,6,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,265,6,1,'jdk/internal/misc/Unsafe.park')
f(11,265,1,3,'Unsafe_Park')
f(12,265,1,3,'clock_gettime')
f(13,265,1,3,'[vdso]')
f(11,266,5,3,'[unknown]')
f(12,266,5,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,266,5,5,'entry_SYSCALL_64_after_hwframe')
f(14,266,5,5,'do_syscall_64')
f(15,266,5,5,'__x64_sys_futex')
f(16,267,4,5,'do_futex')
f(17,267,4,5,'futex_wait')
f(18,267,4,5,'futex_wait_queue_me')
f(19,267,4,5,'schedule')
f(20,267,4,5,'__schedule')
f(21,267,4,5,'finish_task_switch.isra.0')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 400px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(25);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,11231,3,'all')
f(1,0,11226,1,'java/lang/Thread.run')
f(2,0,11226,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,11226,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,1570,1,'java/util/concurrent/FutureTask.run')
f(5,0,1570,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,1570,1,'java/util/concurrent/FutureTask.run')
f(7,0,1570,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,1570,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1570,1,'java/lang/reflect/Method.invoke')
f(10,0,1570,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,1570,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,1570,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,1570,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,1570,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,1570,1,'kyo/bench/Bench.forkKyo')
f(16,0,108,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,108,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,108,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,108,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3e760')
f(16,108,147,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,108,147,2,'kyo.bench.Bench$$anon$1')
f(16,255,987,1,'kyo/bench/Bench.runLoop$2')
f(17,255,473,1,'kyo/bench/Bench$$anon$1.apply')
f(18,255,28,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,255,28,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c82ba8.apply')
f(20,255,28,1,'kyo/bench/Bench.$anonfun$2')
f(21,255,28,1,'kyo/concurrent/fibers$Fiber.block')
f(22,255,28,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,283,445,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,283,445,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,283,445,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply')
f(21,283,445,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,283,37,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,320,261,2,'kyo.concurrent.scheduler.IOTask')
f(22,581,147,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,581,147,2,'kyo.concurrent.fibers$Fiber')
f(17,728,514,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,728,514,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,728,514,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,728,514,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,728,233,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,728,233,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,728,70,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,798,163,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,798,163,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,961,136,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,1097,145,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,1097,145,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,1097,145,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,1242,328,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,1242,124,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1242,124,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1242,124,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1242,124,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84000')
f(17,1366,104,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,1366,104,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,1470,100,1,'kyo/locals$Locals$.save')
f(18,1470,100,2,'kyo.locals$Locals$$anon$3')
f(4,1570,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,1570,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,1570,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,1570,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,1570,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,1570,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,1570,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,1570,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,1581,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e5f8.run')
f(5,1581,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,1581,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,1581,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,1581,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,1581,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,1581,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,1581,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$58+0x0000000800d4c850')
f(4,1592,9634,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,1592,9634,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,1592,9634,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,1592,9632,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,1592,9632,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,1592,9583,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(10,1592,9583,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(11,1592,9583,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(12,1592,9583,2,'kyo.bench.DeepBindBench$$anon$1')
f(9,11175,49,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,11175,49,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,11175,49,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e760.apply')
f(12,11175,49,1,'kyo/bench/Bench.$anonfun$1')
f(13,11175,49,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,11175,49,1,'kyo/bench/DeepBindBench.kyoBench')
f(15,11175,49,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(16,11175,49,2,'kyo.bench.DeepBindBench$$anon$1')
f(7,11224,2,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,11224,2,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,11224,2,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,11224,2,1,'scala/runtime/ObjectRef.create')
f(11,11224,2,2,'scala.runtime.ObjectRef')
f(1,11226,5,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,11226,5,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,11226,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,11226,5,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,11226,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,11226,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,11226,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,11226,1,2,'org.openjdk.jmh.runner.InfraControl')
f(8,11227,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,11227,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,11227,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,11227,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,11227,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,11227,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,11230,1,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,11230,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,11230,1,1,'java/lang/ClassLoader.loadClass')
f(10,11230,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,11230,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,11230,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,11230,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,11230,1,1,'jdk/internal/loader/URLClassPath.getResource')
f(15,11230,1,1,'jdk/internal/loader/URLClassPath$JarLoader.getResource')
f(16,11230,1,1,'java/util/jar/JarFile.getJarEntry')
f(17,11230,1,1,'java/util/jar/JarFile.getEntry')
f(18,11230,1,1,'java/util/zip/ZipFile.getEntry')
f(19,11230,1,1,'java/util/zip/ZipFile$Source.getEntryPos')
f(20,11230,1,1,'java/util/zip/ZipCoder$UTF8ZipCoder.toString')
f(21,11230,1,1,'java/lang/System$2.newStringUTF8NoRepl')
f(22,11230,1,1,'java/lang/String.newStringUTF8NoRepl')
f(23,11230,1,1,'java/util/Arrays.copyOfRange')
f(24,11230,1,2,'byte[]')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 576px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(36);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,259,3,'all')
f(1,0,4,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,4,3,'thread_native_entry(Thread*)')
f(3,0,4,4,'Thread::call_run()')
f(4,0,3,4,'JavaThread::thread_main_inner()')
f(5,0,3,4,'CompileBroker::compiler_thread_loop()')
f(6,0,3,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,3,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,3,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,2,4,'Compile::Code_Gen()')
f(10,0,1,4,'PhaseCFG::do_global_code_motion()')
f(11,0,1,4,'PhaseCFG::global_code_motion()')
f(12,0,1,4,'loadPNode::oper_input_base() const')
f(10,1,1,4,'PhaseChaitin::Register_Allocate()')
f(11,1,1,4,'PhaseChaitin::post_allocate_copy_removal()')
f(12,1,1,4,'PhaseChaitin::elide_copy(Node*, int, Block*, Node_List&, Node_List&, bool)')
f(9,2,1,4,'Compile::Optimize()')
f(10,2,1,4,'PhaseRenumberLive::PhaseRenumberLive(PhaseGVN*, Unique_Node_List*, Unique_Node_List*, Phase::PhaseNumber)')
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::pre_evacuate_collection_set(G1EvacuationInfo&, G1ParScanThreadStateSet*)')
f(12,3,1,4,'WorkGang::run_task(AbstractGangTask*, unsigned int, bool)')
f(13,3,1,3,'sem_post')
f(14,3,1,5,'entry_SYSCALL_64_after_hwframe')
f(15,3,1,5,'do_syscall_64')
f(16,3,1,5,'__x64_sys_futex')
f(17,3,1,5,'do_futex')
f(18,3,1,5,'futex_wake')
f(19,3,1,5,'wake_up_q')
f(20,3,1,5,'_raw_spin_unlock_irqrestore')
f(1,4,255,1,'java/lang/Thread.run')
f(2,4,255,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,4,255,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,4,27,1,'java/util/concurrent/FutureTask.run')
f(5,4,27,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,4,27,1,'java/util/concurrent/FutureTask.run')
f(7,4,27,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,4,27,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,4,27,1,'java/lang/reflect/Method.invoke')
f(10,4,27,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,4,27,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,4,27,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,4,27,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,4,27,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,4,27,1,'kyo/bench/Bench.forkKyo',1,0,0)
f(16,4,27,1,'kyo/bench/Bench.runLoop$2',1,0,0)
f(17,4,13,1,'kyo/bench/Bench$$anon$1.apply')
f(18,4,13,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,4,13,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,5,12,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply')
f(21,5,12,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,5,12,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,5,12,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,5,12,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,5,12,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,5,12,1,'jdk/internal/misc/Unsafe.unpark')
f(27,5,12,3,'pthread_cond_signal')
f(28,6,11,5,'entry_SYSCALL_64_after_hwframe')
f(29,6,11,5,'do_syscall_64')
f(30,6,11,5,'__x64_sys_futex')
f(31,6,11,5,'do_futex')
f(32,7,10,5,'futex_wake')
f(33,7,1,5,'mark_wake_futex')
f(33,8,9,5,'wake_up_q')
f(34,8,9,5,'_raw_spin_unlock_irqrestore')
f(17,17,14,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply',1,0,0)
f(18,17,14,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply',1,0,0)
f(19,17,14,1,'kyo/concurrent/scheduler/IOPromise.block',1,0,0)
f(20,17,14,1,'kyo/concurrent/scheduler/IOPromise.loop$4',1,0,0)
f(21,17,13,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,17,13,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,17,1,2,'java/lang/Thread.interrupted',1,0,0)
f(23,18,12,1,'java/util/concurrent/locks/LockSupport.park')
f(24,18,12,1,'jdk/internal/misc/Unsafe.park')
f(25,18,1,3,'Unsafe_Park')
f(25,19,11,3,'[unknown]')
f(26,19,10,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,19,10,5,'entry_SYSCALL_64_after_hwframe')
f(28,19,10,5,'do_syscall_64')
f(29,19,10,5,'__x64_sys_futex')
f(30,19,10,5,'do_futex')
f(31,19,10,5,'futex_wait')
f(32,20,9,5,'futex_wait_queue_me')
f(33,20,9,5,'schedule')
f(34,20,9,5,'__schedule')
f(35,20,9,5,'finish_task_switch.isra.0')
f(26,29,1,3,'pthread_cond_wait')
f(21,30,1,2,'kyo/concurrent/scheduler/IOPromise.loop$5',1,0,0)
f(22,30,1,2,'kyo/concurrent/scheduler/IOPromise$Pending.add',1,0,0)
f(4,31,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,31,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,31,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,31,1,1,'java/lang/Thread.sleep')
f(8,31,1,3,'[unknown]')
f(9,31,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,31,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,31,1,5,'do_syscall_64')
f(12,31,1,5,'__x64_sys_futex')
f(13,31,1,5,'do_futex')
f(14,31,1,5,'futex_wait')
f(15,31,1,5,'hrtimer_init_sleeper')
f(16,31,1,5,'__hrtimer_init')
f(4,32,227,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,32,227,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,32,227,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,32,35,2,'kyo/concurrent/scheduler/IOTask.run',20,0,0)
f(8,41,7,2,'kyo/concurrent/scheduler/IOTask.curr_$eq',7,0,0)
f(8,48,16,1,'kyo/concurrent/scheduler/IOTask.eval',1,0,0)
f(9,49,15,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,49,15,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,49,15,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,49,15,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,49,15,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,49,15,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,49,15,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,49,15,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,49,15,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,49,15,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,49,15,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,49,15,1,'jdk/internal/misc/Unsafe.unpark')
f(21,49,1,4,'ThreadsListHandle::~ThreadsListHandle()')
f(21,50,14,3,'pthread_cond_signal')
f(22,50,14,5,'entry_SYSCALL_64_after_hwframe')
f(23,50,14,5,'do_syscall_64')
f(24,50,13,5,'__x64_sys_futex')
f(25,50,13,5,'do_futex')
f(26,51,12,5,'futex_wake')
f(27,51,1,5,'mark_wake_futex')
f(27,52,11,5,'wake_up_q')
f(28,52,11,5,'_raw_spin_unlock_irqrestore')
f(24,63,1,5,'syscall_enter_from_user_mode')
f(8,64,3,2,'scala/runtime/BoxesRunTime.equals',3,0,0)
f(7,67,177,2,'kyo/concurrent/scheduler/Queue.poll',175,0,0)
f(8,68,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(9,68,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(8,69,175,2,'kyo/concurrent/scheduler/Queue.modify',173,0,0)
f(9,90,154,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47378.apply',152,0,0)
f(10,103,141,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',139,0,0)
f(11,138,89,2,'kyo/concurrent/scheduler/Queue.isEmpty',89,0,0)
f(12,213,14,2,'kyo/concurrent/scheduler/Queue.items',14,0,0)
f(11,227,17,2,'scala/collection/mutable/PriorityQueue.dequeue',15,0,0)
f(12,242,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(13,242,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(14,242,1,4,'MemAllocator::allocate() const')
f(15,242,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(16,242,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(17,242,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(18,242,1,4,'G1AllocRegion::new_alloc_region_and_allocate(unsigned long, bool)')
f(19,242,1,4,'G1CollectedHeap::new_mutator_alloc_region(unsigned long, bool, unsigned int)')
f(20,242,1,4,'G1CollectedHeap::new_region(unsigned long, HeapRegionType, bool, unsigned int)')
f(21,242,1,4,'HeapRegionManager::allocate_free_region(HeapRegionType, unsigned int)')
f(12,243,1,3,'[unknown]')
f(13,243,1,3,'pthread_mutex_trylock')
f(7,244,15,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,244,15,1,'kyo/concurrent/scheduler/Worker.park')
f(9,244,15,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,244,15,1,'jdk/internal/misc/Unsafe.park')
f(11,245,14,3,'[unknown]')
f(12,245,14,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,246,13,5,'entry_SYSCALL_64_after_hwframe')
f(14,246,13,5,'do_syscall_64')
f(15,246,13,5,'__x64_sys_futex')
f(16,246,13,5,'do_futex')
f(17,246,13,5,'futex_wait')
f(18,246,12,5,'futex_wait_queue_me')
f(19,246,1,5,'hrtimer_sleeper_start_expires')
f(20,246,1,5,'_raw_spin_unlock_irqrestore')
f(19,247,11,5,'schedule')
f(20,247,11,5,'__schedule')
f(21,248,10,5,'finish_task_switch.isra.0')
f(18,258,1,5,'hrtimer_cancel')
f(19,258,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: 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,20039,3,'all')
f(1,0,20035,1,'java/lang/Thread.run')
f(2,0,20035,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,20035,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,20035,1,'java/util/concurrent/FutureTask.run')
f(5,0,20035,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,20035,1,'java/util/concurrent/FutureTask.run')
f(7,0,20035,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,20035,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,20035,1,'java/lang/reflect/Method.invoke')
f(10,0,20035,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,20035,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,20035,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,20035,1,'kyo/bench/jmh_generated/DeepBindBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,20035,1,'kyo/bench/jmh_generated/DeepBindBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,20035,1,'kyo/bench/Bench.syncKyo')
f(16,0,20032,1,'kyo/bench/Bench.runLoop$1')
f(17,0,20032,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(18,0,20032,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(19,0,20032,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(20,0,20032,2,'kyo.bench.DeepBindBench$$anon$1')
f(16,20032,3,1,'kyo/bench/DeepBindBench.kyoBench')
f(17,20032,3,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(18,20032,3,2,'kyo.bench.DeepBindBench$$anon$1')
f(1,20035,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,20035,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,20035,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,20035,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,20035,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,20035,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,20035,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,20035,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,20035,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,20035,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,20035,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,20035,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,20035,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,20038,1,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,20038,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,20038,1,1,'java/lang/ClassLoader.loadClass')
f(10,20038,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,20038,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,20038,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,20038,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,20038,1,1,'jdk/internal/loader/URLClassPath.getResource')
f(15,20038,1,1,'jdk/internal/loader/URLClassPath$JarLoader.getResource')
f(16,20038,1,1,'java/util/jar/JarFile.getJarEntry')
f(17,20038,1,1,'java/util/jar/JarFile.getEntry')
f(18,20038,1,1,'java/util/zip/ZipFile.getEntry')
f(19,20038,1,1,'java/util/zip/ZipFile.getZipEntry')
f(20,20038,1,1,'java/util/jar/JavaUtilJarAccessImpl.entryFor')
f(21,20038,1,1,'java/util/jar/JarFile.entryFor')
f(22,20038,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: 352px}
</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(22);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,298,3,'all')
f(1,0,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,1,3,'thread_native_entry(Thread*)')
f(3,0,1,4,'Thread::call_run()')
f(4,0,1,4,'VMThread::run()')
f(5,0,1,4,'VMThread::inner_execute(VM_Operation*)')
f(6,0,1,4,'VMThread::evaluate_operation(VM_Operation*)')
f(7,0,1,4,'VM_Operation::evaluate()')
f(8,0,1,4,'VM_G1CollectForAllocation::doit()')
f(9,0,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint(double)')
f(10,0,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint_helper(double)')
f(11,0,1,4,'G1CollectedHeap::evacuate_initial_collection_set(G1ParScanThreadStateSet*, bool)')
f(12,0,1,4,'G1RemSet::merge_heap_roots(bool)')
f(13,0,1,4,'WorkGang::run_task(AbstractGangTask*, unsigned int, bool)')
f(14,0,1,3,'sem_post')
f(15,0,1,5,'entry_SYSCALL_64_after_hwframe')
f(16,0,1,5,'do_syscall_64')
f(17,0,1,5,'__x64_sys_futex')
f(18,0,1,5,'do_futex')
f(19,0,1,5,'futex_wake')
f(20,0,1,5,'wake_up_q')
f(21,0,1,5,'_raw_spin_unlock_irqrestore')
f(1,1,297,1,'java/lang/Thread.run')
f(2,1,297,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,1,297,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,1,297,1,'java/util/concurrent/FutureTask.run')
f(5,1,297,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,1,297,1,'java/util/concurrent/FutureTask.run')
f(7,1,297,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,1,297,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,1,297,1,'java/lang/reflect/Method.invoke')
f(10,1,297,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,1,297,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,1,297,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,1,297,1,'kyo/bench/jmh_generated/DeepBindBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,1,297,1,'kyo/bench/jmh_generated/DeepBindBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,1,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(16,1,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(17,1,1,4,'MemAllocator::allocate() const')
f(18,1,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(19,1,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(20,1,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(15,2,162,2,'kyo/bench/Bench.syncKyo',162,0,0)
f(16,2,162,2,'kyo/bench/Bench.runLoop$1',162,0,0)
f(17,112,52,2,'kyo/bench/DeepBindBench$$anon$1.apply',52,0,0)
f(18,112,52,2,'kyo/bench/DeepBindBench$$anon$1.apply',52,0,0)
f(19,141,23,2,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1',23,0,0)
f(15,164,134,2,'org/openjdk/jmh/infra/Blackhole.consume',134,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,12323,3,'all')
f(1,0,12319,1,'java/lang/Thread.run')
f(2,0,12319,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,12319,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,757,1,'java/util/concurrent/FutureTask.run')
f(5,0,757,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,757,1,'java/util/concurrent/FutureTask.run')
f(7,0,757,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,757,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,757,1,'java/lang/reflect/Method.invoke')
f(10,0,757,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,757,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,757,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,757,1,'kyo/bench/jmh_generated/DeepBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,757,1,'kyo/bench/jmh_generated/DeepBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,757,1,'kyo/bench/Bench.forkKyo')
f(16,0,38,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,38,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,38,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,38,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3e730')
f(16,38,71,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,38,71,2,'kyo.bench.Bench$$anon$1')
f(16,109,468,1,'kyo/bench/Bench.runLoop$2')
f(17,109,250,1,'kyo/bench/Bench$$anon$1.apply')
f(18,109,74,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,109,74,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c82ba8.apply')
f(20,109,74,1,'kyo/bench/Bench.$anonfun$2')
f(21,109,74,1,'kyo/concurrent/fibers$Fiber.block')
f(22,109,74,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,183,176,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,183,176,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,183,176,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply')
f(21,183,176,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,183,175,2,'kyo.concurrent.scheduler.IOTask')
f(22,358,1,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,358,1,2,'kyo.concurrent.fibers$Fiber')
f(17,359,218,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,359,218,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,359,218,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,359,218,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,359,72,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,359,72,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,359,1,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,360,71,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,360,71,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,431,2,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,433,144,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,433,144,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,433,144,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,577,180,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,577,179,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,577,179,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,577,179,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,577,179,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84000')
f(17,756,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,756,1,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(4,757,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,757,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,757,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,757,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,757,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,757,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,757,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,757,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,768,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e5f8.run')
f(5,768,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,768,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,768,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,768,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,768,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,768,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$67+0x0000000800d4e3d0')
f(4,779,11540,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,779,11540,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,779,11540,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,779,11540,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,779,11540,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,779,11061,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(10,779,11061,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(11,779,515,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(12,779,515,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(13,779,515,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(14,779,515,2,'kyo.bench.DeepBindMapBench$$anon$1$$Lambda$66+0x0000000800d4e000')
f(11,1294,332,2,'kyo.bench.DeepBindMapBench$$anon$1$$anon$2')
f(11,1626,1037,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(12,1626,1037,2,'kyo.bench.DeepBindMapBench$$anon$3')
f(11,2663,930,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$transformLoop$2')
f(12,2663,930,2,'kyo.bench.DeepBindMapBench$$anon$4')
f(11,3593,1108,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$transformLoop$3')
f(12,3593,1108,2,'kyo.bench.DeepBindMapBench$$anon$5')
f(11,4701,697,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$transformLoop$4')
f(12,4701,697,2,'kyo.bench.DeepBindMapBench$$anon$6')
f(11,5398,770,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$transformLoop$5')
f(12,5398,770,2,'kyo.bench.DeepBindMapBench$$anon$7')
f(11,6168,1077,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$transformLoop$6')
f(12,6168,1077,2,'kyo.bench.DeepBindMapBench$$anon$8')
f(11,7245,762,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$transformLoop$7')
f(12,7245,762,2,'kyo.bench.DeepBindMapBench$$anon$9')
f(11,8007,1033,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$transformLoop$8')
f(12,8007,1033,2,'kyo.bench.DeepBindMapBench$$anon$10')
f(11,9040,865,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$transformLoop$9')
f(12,9040,865,2,'kyo.bench.DeepBindMapBench$$anon$11')
f(11,9905,1198,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$transformLoop$10')
f(12,9905,1198,2,'kyo.bench.DeepBindMapBench$$anon$12')
f(11,11103,737,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(12,11103,737,2,'kyo.bench.DeepBindMapBench$$anon$13')
f(9,11840,370,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(10,11840,370,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(11,11840,370,1,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$66.0x0000000800d4e000.apply')
f(12,11840,370,1,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$$anonfun$adapted$11')
f(13,11840,370,1,'kyo/bench/DeepBindMapBench.$anonfun$11')
f(14,11840,370,1,'kyo/bench/DeepBindMapBench.loop$1')
f(15,11840,370,2,'kyo.bench.DeepBindMapBench$$anon$1')
f(9,12210,109,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,12210,109,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,12210,109,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e730.apply')
f(12,12210,109,1,'kyo/bench/Bench.$anonfun$1')
f(13,12210,109,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,12210,109,1,'kyo/bench/DeepBindMapBench.kyoBench')
f(15,12210,109,1,'kyo/bench/DeepBindMapBench.loop$1')
f(16,12210,109,2,'kyo.bench.DeepBindMapBench$$anon$1')
f(1,12319,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,12319,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,12319,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,12319,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,12319,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,12319,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,12319,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,12319,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,12319,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,12319,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,12319,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,12319,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,12319,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,12322,1,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,12322,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,12322,1,1,'java/lang/ClassLoader.loadClass')
f(10,12322,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,12322,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,12322,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,12322,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,12322,1,1,'jdk/internal/loader/URLClassPath.getResource')
f(15,12322,1,1,'jdk/internal/loader/URLClassPath$JarLoader.getResource')
f(16,12322,1,1,'java/util/jar/JarFile.getJarEntry')
f(17,12322,1,1,'java/util/jar/JarFile.getEntry')
f(18,12322,1,1,'java/util/zip/ZipFile.getEntry')
f(19,12322,1,1,'java/util/zip/ZipFile$Source.getEntryPos')
f(20,12322,1,1,'java/util/zip/ZipCoder$UTF8ZipCoder.toString')
f(21,12322,1,1,'java/lang/System$2.newStringUTF8NoRepl')
f(22,12322,1,1,'java/lang/String.newStringUTF8NoRepl')
f(23,12322,1,1,'java/util/Arrays.copyOfRange')
f(24,12322,1,2,'byte[]')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 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,295,3,'all')
f(1,0,3,3,'[unknown_Java]')
f(2,0,2,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(2,2,1,1,'kyo/ios$KyoIO.effect')
f(1,3,292,1,'java/lang/Thread.run')
f(2,3,292,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,3,292,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/DeepBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,3,2,0,'kyo/bench/jmh_generated/DeepBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub',0,0,1)
f(15,4,1,1,'kyo/bench/Bench.forkKyo')
f(16,4,1,1,'kyo/bench/Bench.runLoop$2')
f(17,4,1,1,'kyo/bench/Bench$$anon$1.apply')
f(18,4,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,4,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,4,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply')
f(21,4,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,4,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,4,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,4,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,4,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,4,1,1,'jdk/internal/misc/Unsafe.unpark')
f(27,4,1,3,'pthread_cond_signal')
f(28,4,1,5,'entry_SYSCALL_64_after_hwframe')
f(29,4,1,5,'do_syscall_64')
f(4,5,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.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/lang/Thread.sleep')
f(8,5,1,3,'[unknown]')
f(9,5,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,5,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,5,1,5,'do_syscall_64')
f(12,5,1,5,'__x64_sys_futex')
f(13,5,1,5,'do_futex')
f(14,5,1,5,'futex_wait')
f(15,5,1,5,'futex_wait_queue_me')
f(16,5,1,5,'schedule')
f(17,5,1,5,'__schedule')
f(4,6,289,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,6,289,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,6,289,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,6,289,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,6,289,1,'kyo/concurrent/scheduler/IOTask.eval',30,0,0)
f(9,24,154,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(10,24,154,2,'kyo/bench/DeepBindMapBench$$anon$1.apply',154,0,0)
f(11,33,12,2,'kyo/bench/DeepBindMapBench$$anon$1$$anon$2.<init>',12,0,0)
f(12,33,12,2,'kyo/ios$KyoIO.<init>',12,0,0)
f(11,45,71,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1',71,0,0)
f(12,48,68,2,'kyo/bench/DeepBindMapBench$$anon$3.<init>',68,0,0)
f(13,69,47,2,'kyo/core$internal$KyoCont.<init>',47,0,0)
f(14,77,34,2,'kyo/core$internal$Kyo.<init>',34,0,0)
f(15,101,10,2,'java/lang/Object.<init>',10,0,0)
f(14,111,5,2,'kyo/ios$KyoIO.effect',5,0,0)
f(15,115,1,2,'kyo/ios$KyoIO.effect',1,0,0)
f(11,116,62,2,'scala/runtime/BoxesRunTime.boxToInteger',62,0,0)
f(12,177,1,5,'asm_sysvec_hyperv_stimer0')
f(13,177,1,5,'sysvec_hyperv_stimer0')
f(14,177,1,5,'irq_exit_rcu')
f(15,177,1,5,'__irq_exit_rcu')
f(16,177,1,5,'__softirqentry_text_start')
f(9,178,93,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(10,181,1,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11',1,0,0)
f(11,181,1,2,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$66.0x0000000800d4e000.apply',1,0,0)
f(12,181,1,2,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$$anonfun$adapted$11',1,0,0)
f(13,181,1,2,'kyo/bench/DeepBindMapBench.$anonfun$11',1,0,0)
f(14,181,1,2,'kyo/bench/DeepBindMapBench.loop$1',1,0,0)
f(10,182,89,1,'kyo/bench/DeepBindMapBench$$anon$12.apply',10,0,0)
f(11,182,10,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$transformLoop$10',10,0,0)
f(12,182,9,2,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$65.0x0000000800d4bc38.apply',9,0,0)
f(13,182,9,2,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$$anonfun$adapted$10',9,0,0)
f(14,182,9,2,'kyo/bench/DeepBindMapBench.$anonfun$10',9,0,0)
f(15,182,9,2,'scala/runtime/BoxesRunTime.boxToInteger',9,0,0)
f(16,190,1,2,'java/lang/Integer.valueOf',1,0,0)
f(12,191,1,2,'scala/runtime/BoxesRunTime.unboxToInt',1,0,0)
f(11,192,79,1,'kyo/bench/DeepBindMapBench$$anon$11.apply')
f(12,193,64,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$transformLoop$9',64,0,0)
f(13,193,64,2,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$64.0x0000000800d4b870.apply',64,0,0)
f(14,193,64,2,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$$anonfun$adapted$9',64,0,0)
f(15,193,64,2,'kyo/bench/DeepBindMapBench.$anonfun$9',64,0,0)
f(16,193,64,2,'scala/runtime/BoxesRunTime.boxToInteger',64,0,0)
f(12,257,14,2,'kyo/bench/DeepBindMapBench$$anon$10.apply',14,0,0)
f(13,258,13,2,'kyo/bench/DeepBindMapBench$$anon$9.apply',13,0,0)
f(14,258,13,2,'kyo/bench/DeepBindMapBench$$anon$8.apply',13,0,0)
f(15,265,6,2,'kyo/bench/DeepBindMapBench$$anon$7.apply',6,0,0)
f(9,271,3,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',3,0,0)
f(9,274,3,2,'kyo/concurrent/scheduler/IOTask.st',3,0,0)
f(9,277,8,6,'kyo/core$internal$KyoCont.effect',0,8,0)
f(9,285,4,1,'kyo/ios$KyoIO.effect')
f(9,289,6,3,'vtable stub')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 416px}
</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(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,13719,3,'all')
f(1,0,13716,1,'java/lang/Thread.run')
f(2,0,13716,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,13716,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,13716,1,'java/util/concurrent/FutureTask.run')
f(5,0,13716,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,13716,1,'java/util/concurrent/FutureTask.run')
f(7,0,13716,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,13716,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,13716,1,'java/lang/reflect/Method.invoke')
f(10,0,13716,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,13716,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,13716,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,13716,1,'kyo/bench/jmh_generated/DeepBindMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,13716,1,'kyo/bench/jmh_generated/DeepBindMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,13716,1,'kyo/bench/Bench.syncKyo')
f(16,0,13716,1,'kyo/bench/Bench.runLoop$1')
f(17,0,12053,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(18,0,12053,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(19,0,479,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,0,479,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,0,479,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,0,479,2,'kyo.bench.DeepBindMapBench$$anon$1$$Lambda$49+0x0000000800d07778')
f(19,479,39,2,'kyo.bench.DeepBindMapBench$$anon$1$$anon$2')
f(19,518,1032,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(20,518,1032,2,'kyo.bench.DeepBindMapBench$$anon$3')
f(19,1550,1146,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$transformLoop$2')
f(20,1550,1146,2,'kyo.bench.DeepBindMapBench$$anon$4')
f(19,2696,1105,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$transformLoop$3')
f(20,2696,1105,2,'kyo.bench.DeepBindMapBench$$anon$5')
f(19,3801,855,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$transformLoop$4')
f(20,3801,855,2,'kyo.bench.DeepBindMapBench$$anon$6')
f(19,4656,799,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$transformLoop$5')
f(20,4656,799,2,'kyo.bench.DeepBindMapBench$$anon$7')
f(19,5455,1119,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$transformLoop$6')
f(20,5455,1119,2,'kyo.bench.DeepBindMapBench$$anon$8')
f(19,6574,832,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$transformLoop$7')
f(20,6574,832,2,'kyo.bench.DeepBindMapBench$$anon$9')
f(19,7406,1367,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$transformLoop$8')
f(20,7406,1367,2,'kyo.bench.DeepBindMapBench$$anon$10')
f(19,8773,1014,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$transformLoop$9')
f(20,8773,1014,2,'kyo.bench.DeepBindMapBench$$anon$11')
f(19,9787,1235,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$transformLoop$10')
f(20,9787,1235,2,'kyo.bench.DeepBindMapBench$$anon$12')
f(19,11022,1031,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(20,11022,1031,2,'kyo.bench.DeepBindMapBench$$anon$13')
f(17,12053,1663,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(18,12053,1651,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(19,12053,1651,1,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$49.0x0000000800d07778.apply')
f(20,12053,1651,1,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$$anonfun$adapted$11')
f(21,12053,1651,1,'kyo/bench/DeepBindMapBench.$anonfun$11')
f(22,12053,1651,1,'kyo/bench/DeepBindMapBench.loop$1')
f(23,12053,1651,2,'kyo.bench.DeepBindMapBench$$anon$1')
f(18,13704,12,1,'kyo/bench/DeepBindMapBench$$anon$12.apply')
f(19,13704,12,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$transformLoop$10')
f(20,13704,12,1,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$48.0x0000000800d073b0.apply')
f(21,13704,12,1,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$$anonfun$adapted$10')
f(22,13704,12,1,'kyo/bench/DeepBindMapBench.$anonfun$10')
f(23,13704,12,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(24,13704,12,1,'java/lang/Integer.valueOf')
f(25,13704,12,2,'java.lang.Integer')
f(1,13716,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,13716,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,13716,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,13716,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,13716,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,13716,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,13716,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,13716,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,13716,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,13716,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,13716,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,13716,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,13716,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,298,1,'java/lang/Thread.run')
f(2,0,298,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,298,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,298,1,'java/util/concurrent/FutureTask.run')
f(5,0,298,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,298,1,'java/util/concurrent/FutureTask.run')
f(7,0,298,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,298,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,298,1,'java/lang/reflect/Method.invoke')
f(10,0,298,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,298,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,298,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,298,1,'kyo/bench/jmh_generated/DeepBindMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,298,1,'kyo/bench/jmh_generated/DeepBindMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,298,1,'kyo/bench/Bench.syncKyo')
f(16,0,298,1,'kyo/bench/Bench.runLoop$1')
f(17,6,172,2,'kyo/bench/DeepBindMapBench$$anon$1.apply',171,0,0)
f(18,14,164,2,'kyo/bench/DeepBindMapBench$$anon$1.apply',163,0,0)
f(19,58,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(19,60,64,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1',64,0,0)
f(20,106,18,2,'kyo/bench/DeepBindMapBench$$anon$3.<init>',18,0,0)
f(21,106,18,2,'kyo/core$internal$KyoCont.<init>',18,0,0)
f(19,124,54,2,'scala/runtime/BoxesRunTime.boxToInteger',53,0,0)
f(20,177,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(21,177,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(22,177,1,4,'MemAllocator::allocate() const')
f(23,177,1,4,'JfrAllocationTracer::JfrAllocationTracer(Klass const*, HeapWordImpl**, unsigned long, bool, JavaThread*)')
f(17,178,120,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(18,181,117,2,'kyo/bench/DeepBindMapBench$$anon$12.apply',117,0,0)
f(19,181,117,2,'kyo/bench/DeepBindMapBench$$anon$11.apply',117,0,0)
f(20,181,117,2,'kyo/bench/DeepBindMapBench$$anon$10.apply',117,0,0)
f(21,181,117,2,'kyo/bench/DeepBindMapBench$$anon$9.apply',117,0,0)
f(22,189,109,2,'kyo/bench/DeepBindMapBench$$anon$8.apply',109,0,0)
f(23,190,108,2,'kyo/bench/DeepBindMapBench$$anon$7.apply',108,0,0)
f(24,214,84,2,'kyo/bench/DeepBindMapBench$$anon$6.apply',84,0,0)
f(25,285,13,2,'kyo/bench/DeepBindMapBench$$anon$5.apply',13,0,0)
f(26,292,6,2,'kyo/bench/DeepBindMapBench$$anon$4.apply',6,0,0)
f(27,296,2,2,'kyo/bench/DeepBindMapBench$$anon$3.apply',2,0,0)
f(28,297,1,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1',1,0,0)
f(29,297,1,2,'scala/runtime/BoxesRunTime.boxToInteger',1,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 400px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(25);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,14817,3,'all')
f(1,0,14813,1,'java/lang/Thread.run')
f(2,0,14813,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,14813,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,958,1,'java/util/concurrent/FutureTask.run')
f(5,0,958,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,958,1,'java/util/concurrent/FutureTask.run')
f(7,0,958,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,958,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,958,1,'java/lang/reflect/Method.invoke')
f(10,0,958,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,958,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,958,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,958,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,958,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,958,1,'kyo/bench/Bench.forkKyo')
f(16,0,54,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,54,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,54,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,54,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c81148')
f(16,54,157,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,54,157,2,'kyo.bench.Bench$$anon$1')
f(16,211,580,1,'kyo/bench/Bench.runLoop$2')
f(17,211,296,1,'kyo/bench/Bench$$anon$1.apply')
f(18,211,137,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,211,137,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c88000.apply')
f(20,211,137,1,'kyo/bench/Bench.$anonfun$2')
f(21,211,137,1,'kyo/concurrent/fibers$Fiber.block')
f(22,211,137,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,348,159,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,348,159,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,348,159,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(21,348,159,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,348,159,2,'kyo.concurrent.scheduler.IOTask')
f(17,507,284,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,507,284,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,507,284,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,507,284,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,507,141,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,507,141,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,507,12,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,519,129,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,519,129,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,648,14,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,662,129,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,662,129,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,662,129,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,791,167,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,791,164,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,791,164,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,791,164,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,791,164,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c828a0')
f(17,955,3,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,955,3,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(4,958,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ea20.run')
f(5,958,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,958,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,958,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,958,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,958,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,958,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,958,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,969,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec48.run')
f(5,969,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,969,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,969,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,969,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,969,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,969,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$64+0x0000000800d55100')
f(4,980,13833,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d230f8.run')
f(5,980,13833,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,980,13833,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,980,13833,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,980,13833,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,980,7383,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,980,7383,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(11,980,7383,1,'kyo/bench/EnqueueDequeueBench$$Lambda$62.0x0000000800d54a70.apply')
f(12,980,7383,1,'kyo/bench/EnqueueDequeueBench.$anonfun$2')
f(13,980,7383,1,'kyo/bench/EnqueueDequeueBench.loop$2')
f(14,980,1382,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(15,980,1382,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(16,980,1382,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,980,1382,2,'kyo.bench.EnqueueDequeueBench$$Lambda$60+0x0000000800d54000')
f(14,2362,1973,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(15,2362,1973,2,'kyo.bench.EnqueueDequeueBench$$anon$2')
f(14,4335,4028,1,'kyo/concurrent/channels$Channels$$anon$14.put')
f(15,4335,4028,1,'kyo/concurrent/channels$Channels$Blocking.put$')
f(16,4335,4028,1,'kyo/concurrent/channels$Channels$Blocking.put')
f(17,4335,1131,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,4335,1131,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,4335,1131,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,4335,1131,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$59+0x0000000800d4f8c0')
f(17,5466,1038,1,'kyo/concurrent/channels$Channels$$anon$14.putFiber')
f(18,5466,1038,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$_$transformLoop$10')
f(19,5466,1038,1,'kyo/concurrent/channels$Channels$$anon$14$$Lambda$58.0x0000000800d4f4f0.apply')
f(20,5466,1038,1,'kyo/concurrent/channels$Channels$$anon$14.$anonfun$11')
f(21,5466,1038,2,'kyo.concurrent.channels$$anon$19')
f(17,6504,1859,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1')
f(18,6504,1859,2,'kyo.concurrent.channels$Channels$Blocking$$anon$1')
f(9,8363,6267,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,8363,6267,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(11,8363,6267,1,'kyo/bench/EnqueueDequeueBench$$Lambda$60.0x0000000800d54000.apply')
f(12,8363,6267,1,'kyo/bench/EnqueueDequeueBench.$anonfun$1')
f(13,8363,1516,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(14,8363,1516,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(15,8363,1516,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,8363,1516,2,'kyo.bench.EnqueueDequeueBench$$Lambda$62+0x0000000800d54a70')
f(13,9879,2170,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(14,9879,2170,2,'kyo.bench.EnqueueDequeueBench$$anon$1')
f(13,12049,2581,1,'kyo/concurrent/channels$Channels$$anon$14.take')
f(14,12049,2581,1,'kyo/concurrent/channels$Channels$Blocking.take$')
f(15,12049,2581,1,'kyo/concurrent/channels$Channels$Blocking.take')
f(16,12049,792,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,12049,792,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,12049,792,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,12049,792,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$61+0x0000000800d546a0')
f(16,12841,1789,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2')
f(17,12841,1789,2,'kyo.concurrent.channels$Channels$Blocking$$anon$2')
f(9,14630,52,1,'kyo/bench/EnqueueDequeueBench$$anon$3.apply')
f(10,14630,52,1,'kyo/concurrent/channels$Channels$$anon$21.apply')
f(11,14630,52,1,'kyo/concurrent/channels$Channels$.kyo$concurrent$channels$Channels$$$_$transformLoop$11')
f(12,14630,52,1,'kyo/concurrent/channels$Channels$$$Lambda$56.0x0000000800d4c028.apply')
f(13,14630,52,1,'kyo/concurrent/channels$Channels$.$anonfun$9')
f(14,14630,52,1,'kyo/concurrent/channels$Channels$$anon$14.<init>')
f(15,14630,11,2,'org.jctools.queues.MpmcUnboundedXaddArrayQueue')
f(15,14641,41,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(16,14641,41,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(17,14641,41,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.<init>')
f(18,14641,12,2,'org.jctools.queues.SpscArrayQueue')
f(18,14653,29,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(19,14653,29,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(20,14653,3,2,'org.jctools.queues.MpmcUnboundedXaddChunk')
f(20,14656,26,1,'org/jctools/queues/MpmcUnboundedXaddChunk.<init>')
f(21,14656,2,1,'org/jctools/queues/MpUnboundedXaddChunk.<init>')
f(22,14656,2,1,'org/jctools/util/UnsafeRefArrayAccess.allocateRefArray')
f(23,14656,2,2,'java.lang.Object[]')
f(21,14658,24,1,'org/jctools/util/UnsafeLongArrayAccess.allocateLongArray')
f(22,14658,24,2,'long[]')
f(9,14682,131,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,14682,131,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,14682,131,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c81148.apply')
f(12,14682,131,1,'kyo/bench/Bench.$anonfun$1')
f(13,14682,131,1,'kyo/bench/EnqueueDequeueBench.kyoBenchFiber')
f(14,14682,1,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$3')
f(15,14682,1,2,'kyo.bench.EnqueueDequeueBench$$anon$3')
f(14,14683,130,1,'kyo/concurrent/channels$Channels$.blocking')
f(15,14683,1,1,'kyo/concurrent/channels$Channels$.kyo$concurrent$channels$Channels$$$_$transformLoop$11')
f(16,14683,1,2,'kyo.concurrent.channels$Channels$$anon$21')
f(15,14684,129,1,'kyo/concurrent/queues$Queues$.bounded')
f(16,14684,129,2,'kyo.concurrent.queues$Queues$$anon$11')
f(1,14813,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,14813,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,14813,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,14813,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,14813,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,14813,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,14813,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,14813,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,14813,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,14813,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,14813,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,14813,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,14813,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,14816,1,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,14816,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,14816,1,1,'java/lang/ClassLoader.loadClass')
f(10,14816,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,14816,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,14816,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,14816,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,14816,1,1,'jdk/internal/loader/BuiltinClassLoader.defineClass')
f(15,14816,1,1,'jdk/internal/loader/Resource.getByteBuffer')
f(16,14816,1,1,'jdk/internal/loader/Resource.cachedInputStream')
f(17,14816,1,1,'jdk/internal/loader/URLClassPath$JarLoader$2.getInputStream')
f(18,14816,1,1,'java/util/jar/JarFile.getInputStream')
f(19,14816,1,1,'java/util/zip/ZipFile.getInputStream')
f(20,14816,1,1,'java/util/zip/ZipFile$ZipFileInflaterInputStream.<init>')
f(21,14816,1,1,'java/util/zip/ZipFile$ZipFileInflaterInputStream.<init>')
f(22,14816,1,1,'java/util/zip/InflaterInputStream.<init>')
f(23,14816,1,2,'byte[]')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 560px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(35);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,293,3,'all')
f(1,0,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,1,3,'thread_native_entry(Thread*)')
f(3,0,1,4,'Thread::call_run()')
f(4,0,1,4,'VMThread::run()')
f(5,0,1,4,'VMThread::inner_execute(VM_Operation*)')
f(6,0,1,4,'VMThread::evaluate_operation(VM_Operation*)')
f(7,0,1,4,'VM_Operation::evaluate()')
f(8,0,1,4,'VM_G1CollectForAllocation::doit()')
f(9,0,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint(double)')
f(10,0,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint_helper(double)')
f(11,0,1,4,'G1CollectedHeap::trace_heap(GCWhen::Type, GCTracer const*)')
f(12,0,1,4,'GCTracer::send_gc_heap_summary_event(GCWhen::Type, GCHeapSummary const&) const')
f(13,0,1,4,'GCHeapSummaryEventSender::visit(G1HeapSummary const*) const')
f(1,1,3,3,'[unknown_Java]')
f(2,1,1,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(2,2,2,6,'kyo/core$internal$KyoCont.effect',0,2,0)
f(1,4,289,1,'java/lang/Thread.run')
f(2,4,289,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,4,289,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,4,2,1,'java/util/concurrent/FutureTask.run')
f(5,4,2,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,4,2,1,'java/util/concurrent/FutureTask.run')
f(7,4,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,4,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,4,2,1,'java/lang/reflect/Method.invoke')
f(10,4,2,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,4,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,4,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,4,2,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,4,2,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,4,2,1,'kyo/bench/Bench.forkKyo')
f(16,4,2,1,'kyo/bench/Bench.runLoop$2')
f(17,4,1,1,'kyo/bench/Bench$$anon$1.apply')
f(18,4,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,4,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,4,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(21,4,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,4,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,4,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,4,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,4,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,4,1,1,'jdk/internal/misc/Unsafe.unpark')
f(27,4,1,3,'pthread_cond_signal')
f(28,4,1,5,'entry_SYSCALL_64_after_hwframe')
f(29,4,1,5,'do_syscall_64')
f(30,4,1,5,'__x64_sys_futex')
f(31,4,1,5,'do_futex')
f(32,4,1,5,'futex_wake')
f(33,4,1,5,'wake_up_q')
f(34,4,1,5,'_raw_spin_unlock_irqrestore')
f(17,5,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,5,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,5,1,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,5,1,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,5,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,5,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,5,1,1,'java/util/concurrent/locks/LockSupport.park')
f(24,5,1,1,'jdk/internal/misc/Unsafe.park')
f(25,5,1,3,'[unknown]')
f(26,5,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,5,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,5,1,5,'do_syscall_64')
f(29,5,1,5,'__x64_sys_futex')
f(30,5,1,5,'do_futex')
f(31,5,1,5,'futex_wait')
f(4,6,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ea20.run')
f(5,6,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,6,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,6,1,1,'java/lang/Thread.sleep')
f(4,7,286,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d230f8.run')
f(5,7,286,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,7,286,1,'kyo/concurrent/scheduler/Worker.runWorker',0,0,1)
f(7,8,282,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,8,282,1,'kyo/concurrent/scheduler/IOTask.eval',38,0,0)
f(9,34,115,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,43,106,2,'kyo/concurrent/channels$Channels$Blocking$$anon$2.apply',99,0,0)
f(11,50,94,2,'kyo/concurrent/channels$$anon$16.apply',87,0,0)
f(12,68,76,2,'kyo/concurrent/channels$$anon$16.apply',69,0,0)
f(13,89,7,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(14,93,2,2,'kyo/concurrent/channels$Channels$$anon$14.q',2,0,0)
f(14,95,1,2,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.isEmpty',1,0,0)
f(15,95,1,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.isEmpty',1,0,0)
f(16,95,1,2,'org/jctools/queues/IndexedQueueSizeUtil.isEmpty',1,0,0)
f(13,96,11,2,'kyo/concurrent/fibers$Fibers.value',11,0,0)
f(14,96,11,2,'kyo/concurrent/fibers$Fiber$.done',11,0,0)
f(15,96,11,2,'kyo/concurrent/fibers$Fiber.<init>',11,0,0)
f(13,107,36,2,'kyo/concurrent/queues$$anon$12.poll',36,0,0)
f(14,115,26,2,'java/util/concurrent/atomic/AtomicReference.getAndSet',26,0,0)
f(15,115,26,2,'java/lang/invoke/VarHandleGuards.guard_LL_L',26,0,0)
f(16,119,3,2,'java/lang/invoke/VarForm.getMemberName',3,0,0)
f(16,122,1,2,'java/lang/invoke/VarHandle.checkExactAccessMode',1,0,0)
f(16,123,18,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.getAndSet',18,0,0)
f(14,141,2,2,'scala/Option$.apply',2,0,0)
f(15,141,2,2,'scala/Some.<init>',2,0,0)
f(16,141,2,2,'scala/Option.<init>',2,0,0)
f(17,141,2,2,'java/lang/Object.<init>',2,0,0)
f(13,143,1,2,'scala/Some.value',1,0,0)
f(11,144,5,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2',5,0,0)
f(12,148,1,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$61.0x0000000800d546a0.apply',1,0,0)
f(13,148,1,2,'kyo/concurrent/channels$Channels$Blocking.$anonfun$2',1,0,0)
f(14,148,1,2,'kyo/concurrent/fibers$Fiber.join',1,0,0)
f(9,149,101,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,159,23,2,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2',23,0,0)
f(11,166,8,2,'kyo/bench/EnqueueDequeueBench$$Lambda$60.0x0000000800d54000.apply',8,0,0)
f(12,167,7,2,'kyo/bench/EnqueueDequeueBench.$anonfun$1',7,0,0)
f(13,170,4,2,'kyo/concurrent/channels$Channels$$anon$14.take',4,0,0)
f(14,170,4,2,'kyo/concurrent/channels$Channels$Blocking.take$',4,0,0)
f(15,171,3,2,'kyo/concurrent/channels$Channels$Blocking.take',3,0,0)
f(11,174,8,2,'kyo/bench/EnqueueDequeueBench$$anon$2.<init>',8,0,0)
f(12,177,5,2,'kyo/core$internal$KyoCont.<init>',5,0,0)
f(10,182,68,2,'kyo/concurrent/channels$Channels$Blocking$$anon$1.apply',61,0,0)
f(11,190,37,2,'kyo/concurrent/channels$$anon$19.apply',30,0,0)
f(12,190,37,2,'kyo/concurrent/channels$$anon$19.apply',30,0,0)
f(13,193,6,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(14,197,1,2,'kyo/concurrent/channels$Channels$$anon$14.q',1,0,0)
f(14,198,1,2,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.isEmpty',1,0,0)
f(15,198,1,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.isEmpty',1,0,0)
f(16,198,1,2,'org/jctools/queues/IndexedQueueSizeUtil.isEmpty',1,0,0)
f(13,199,3,2,'kyo/concurrent/channels$Channels$$anon$14.q',3,0,0)
f(13,202,1,2,'kyo/concurrent/fibers$Fibers.value',1,0,0)
f(13,203,24,2,'kyo/concurrent/queues$$anon$12.offer',23,0,0)
f(14,203,24,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',23,0,0)
f(15,205,22,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',21,0,0)
f(16,219,4,2,'java/lang/invoke/VarForm.getMemberName',4,0,0)
f(16,223,4,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',3,0,0)
f(17,226,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(18,226,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(19,226,1,4,'MemAllocator::allocate() const')
f(20,226,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(21,226,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(22,226,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(23,226,1,4,'MutatorAllocRegion::retire(bool)')
f(24,226,1,4,'G1MonitoringSupport::update_eden_size()')
f(11,227,23,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1',23,0,0)
f(12,227,23,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$59.0x0000000800d4f8c0.apply',23,0,0)
f(13,245,5,2,'kyo/concurrent/channels$Channels$Blocking.$anonfun$1',5,0,0)
f(9,250,2,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',2,0,0)
f(9,252,2,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,252,2,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,252,2,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,252,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,252,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,252,2,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,252,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,252,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,252,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,252,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,252,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,252,2,1,'jdk/internal/misc/Unsafe.unpark')
f(21,252,2,3,'pthread_cond_signal')
f(22,253,1,5,'entry_SYSCALL_64_after_hwframe')
f(23,253,1,5,'do_syscall_64')
f(24,253,1,5,'__x64_sys_futex')
f(25,253,1,5,'do_futex')
f(26,253,1,5,'futex_wake')
f(27,253,1,5,'wake_up_q')
f(28,253,1,5,'_raw_spin_unlock_irqrestore')
f(9,254,2,2,'kyo/concurrent/scheduler/IOTask.st',2,0,0)
f(9,256,26,6,'kyo/core$internal$KyoCont.effect',0,26,0)
f(9,282,8,3,'vtable stub')
f(7,290,3,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,290,3,1,'kyo/concurrent/scheduler/Worker.park')
f(9,290,3,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,290,3,1,'jdk/internal/misc/Unsafe.park')
f(11,290,3,3,'[unknown]')
f(12,290,3,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,290,3,5,'entry_SYSCALL_64_after_hwframe')
f(14,290,3,5,'do_syscall_64')
f(15,290,3,5,'__x64_sys_futex')
f(16,290,3,5,'do_futex')
f(17,290,3,5,'futex_wait')
f(18,290,3,5,'futex_wait_queue_me')
f(19,290,1,5,'hrtimer_sleeper_start_expires')
f(20,290,1,5,'_raw_spin_unlock_irqrestore')
f(19,291,2,5,'schedule')
f(20,291,2,5,'__schedule')
f(21,291,2,5,'finish_task_switch.isra.0')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 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,14443,3,'all')
f(1,0,14439,1,'java/lang/Thread.run')
f(2,0,14439,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,14439,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,1286,1,'java/util/concurrent/FutureTask.run')
f(5,0,1286,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,1286,1,'java/util/concurrent/FutureTask.run')
f(7,0,1286,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,1286,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1286,1,'java/lang/reflect/Method.invoke')
f(10,0,1286,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,1286,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,1286,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,1286,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,1286,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,1286,1,'kyo/bench/Bench.syncKyo')
f(16,0,609,1,'kyo/bench/Bench.runLoop$1')
f(17,0,359,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,359,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,359,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,359,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,203,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,203,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,133,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,133,70,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,133,70,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,203,130,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,333,26,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,333,26,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,333,26,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,359,250,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,359,236,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,359,236,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,359,236,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,359,168,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,359,168,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,359,168,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(24,359,168,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,359,168,2,'kyo.concurrent.scheduler.IOTask')
f(21,527,68,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,527,68,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c88000.apply')
f(23,527,68,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,527,68,1,'kyo/concurrent/fibers$Fiber.join')
f(25,527,68,1,'kyo/concurrent/fibers$Fibers.get')
f(26,527,68,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,527,68,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,595,14,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,595,14,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c885f8.apply')
f(20,595,14,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,595,14,1,'kyo/concurrent/fibers$Fiber.block')
f(22,595,14,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,609,677,1,'kyo/bench/EnqueueDequeueBench.kyoBench')
f(17,609,57,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,609,57,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,609,57,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,609,57,2,'kyo.bench.EnqueueDequeueBench$$Lambda$37+0x0000000800c81148')
f(17,666,295,1,'kyo/concurrent/fibers$Fibers.block')
f(18,666,61,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,666,61,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,727,73,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,727,73,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,800,161,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,800,161,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,961,325,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,961,114,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,961,114,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,961,114,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,961,114,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c88000')
f(18,1075,152,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,1075,99,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,1075,99,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,1075,99,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,1075,99,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c828a0')
f(19,1174,53,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,1174,53,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(18,1227,59,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,1227,59,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(4,1286,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec30.run')
f(5,1286,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,1286,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,1286,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,1286,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,1286,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,1286,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,1286,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,1297,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1ee58.run')
f(5,1297,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,1297,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,1297,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,1297,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,1297,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,1297,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$64+0x0000000800d55210')
f(4,1308,13131,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23480.run')
f(5,1308,13131,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,1308,13131,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,1308,13131,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,1308,13131,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,1308,7130,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,1308,6171,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(11,1308,6171,1,'kyo/bench/EnqueueDequeueBench$$Lambda$63.0x0000000800d54e40.apply')
f(12,1308,6171,1,'kyo/bench/EnqueueDequeueBench.$anonfun$2')
f(13,1308,6171,1,'kyo/bench/EnqueueDequeueBench.loop$2')
f(14,1308,1218,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(15,1308,1218,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(16,1308,1218,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,1308,1218,2,'kyo.bench.EnqueueDequeueBench$$Lambda$61+0x0000000800d543d0')
f(14,2526,1491,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(15,2526,1491,2,'kyo.bench.EnqueueDequeueBench$$anon$2')
f(14,4017,3462,1,'kyo/concurrent/channels$Channels$$anon$14.put')
f(15,4017,3462,1,'kyo/concurrent/channels$Channels$Blocking.put$')
f(16,4017,3462,1,'kyo/concurrent/channels$Channels$Blocking.put')
f(17,4017,825,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,4017,825,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,4017,825,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,4017,825,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$60+0x0000000800d54000')
f(17,4842,1076,1,'kyo/concurrent/channels$Channels$$anon$14.putFiber')
f(18,4842,1076,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$_$transformLoop$10')
f(19,4842,1076,1,'kyo/concurrent/channels$Channels$$anon$14$$Lambda$59.0x0000000800d4f950.apply')
f(20,4842,1076,1,'kyo/concurrent/channels$Channels$$anon$14.$anonfun$11')
f(21,4842,1076,2,'kyo.concurrent.channels$$anon$19')
f(17,5918,1561,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1')
f(18,5918,1561,2,'kyo.concurrent.channels$Channels$Blocking$$anon$1')
f(10,7479,959,1,'kyo/concurrent/channels$Channels$Blocking$$anon$2.apply')
f(11,7479,959,1,'kyo/concurrent/channels$$anon$16.apply')
f(12,7479,959,1,'kyo/concurrent/channels$$anon$16.apply')
f(13,7479,959,1,'kyo/concurrent/fibers$Fibers.value')
f(14,7479,959,1,'kyo/concurrent/fibers$Fiber$.done')
f(15,7479,959,2,'kyo.concurrent.fibers$Fiber')
f(9,8438,5875,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,8438,5074,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(11,8438,5074,1,'kyo/bench/EnqueueDequeueBench$$Lambda$61.0x0000000800d543d0.apply')
f(12,8438,5074,1,'kyo/bench/EnqueueDequeueBench.$anonfun$1')
f(13,8438,1232,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(14,8438,1232,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(15,8438,1232,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,8438,1232,2,'kyo.bench.EnqueueDequeueBench$$Lambda$63+0x0000000800d54e40')
f(13,9670,1490,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(14,9670,1490,2,'kyo.bench.EnqueueDequeueBench$$anon$1')
f(13,11160,2352,1,'kyo/concurrent/channels$Channels$$anon$14.take')
f(14,11160,2352,1,'kyo/concurrent/channels$Channels$Blocking.take$')
f(15,11160,2352,1,'kyo/concurrent/channels$Channels$Blocking.take')
f(16,11160,931,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,11160,931,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,11160,931,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,11160,931,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$62+0x0000000800d54a70')
f(16,12091,1421,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2')
f(17,12091,1421,2,'kyo.concurrent.channels$Channels$Blocking$$anon$2')
f(10,13512,801,1,'kyo/concurrent/channels$Channels$Blocking$$anon$1.apply')
f(11,13512,801,1,'kyo/concurrent/channels$$anon$19.apply')
f(12,13512,801,1,'kyo/concurrent/channels$$anon$19.apply')
f(13,13512,801,1,'kyo/concurrent/fibers$Fibers.value')
f(14,13512,801,1,'kyo/concurrent/fibers$Fiber$.done')
f(15,13512,801,2,'kyo.concurrent.fibers$Fiber')
f(9,14313,13,1,'kyo/bench/EnqueueDequeueBench$$anon$3.apply')
f(10,14313,13,1,'kyo/concurrent/channels$Channels$$anon$21.apply')
f(11,14313,13,1,'kyo/concurrent/channels$Channels$.kyo$concurrent$channels$Channels$$$_$transformLoop$11')
f(12,14313,13,1,'kyo/concurrent/channels$Channels$$$Lambda$57.0x0000000800d4c488.apply')
f(13,14313,13,1,'kyo/concurrent/channels$Channels$.$anonfun$9')
f(14,14313,13,1,'kyo/concurrent/channels$Channels$$anon$14.<init>')
f(15,14313,1,2,'kyo.concurrent.channels$$anon$16')
f(15,14314,4,2,'org.jctools.queues.MpmcUnboundedXaddArrayQueue')
f(15,14318,8,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(16,14318,8,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(17,14318,8,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.<init>')
f(18,14318,2,2,'org.jctools.queues.SpscArrayQueue')
f(18,14320,5,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(19,14320,5,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(20,14320,5,1,'org/jctools/queues/MpmcUnboundedXaddChunk.<init>')
f(21,14320,2,1,'org/jctools/queues/MpUnboundedXaddChunk.<init>')
f(22,14320,2,1,'org/jctools/util/UnsafeRefArrayAccess.allocateRefArray')
f(23,14320,2,2,'java.lang.Object[]')
f(21,14322,3,1,'org/jctools/util/UnsafeLongArrayAccess.allocateLongArray')
f(22,14322,3,2,'long[]')
f(18,14325,1,1,'org/jctools/queues/SpscArrayQueue.<init>')
f(19,14325,1,1,'org/jctools/queues/SpscArrayQueueL3Pad.<init>')
f(20,14325,1,1,'org/jctools/queues/SpscArrayQueueConsumerIndexField.<init>')
f(21,14325,1,1,'org/jctools/queues/SpscArrayQueueL2Pad.<init>')
f(22,14325,1,1,'org/jctools/queues/SpscArrayQueueProducerIndexFields.<init>')
f(23,14325,1,1,'org/jctools/queues/SpscArrayQueueL1Pad.<init>')
f(24,14325,1,1,'org/jctools/queues/SpscArrayQueueColdField.<init>')
f(25,14325,1,1,'org/jctools/queues/ConcurrentCircularArrayQueue.<init>')
f(26,14325,1,1,'org/jctools/util/UnsafeRefArrayAccess.allocateRefArray')
f(27,14325,1,2,'java.lang.Object[]')
f(9,14326,113,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,14326,113,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,14326,113,1,'kyo/bench/EnqueueDequeueBench$$Lambda$37.0x0000000800c81148.apply')
f(12,14326,113,1,'kyo/bench/EnqueueDequeueBench.kyoBench$$anonfun$1')
f(13,14326,113,1,'kyo/bench/EnqueueDequeueBench.kyoBenchFiber')
f(14,14326,1,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$3')
f(15,14326,1,2,'kyo.bench.EnqueueDequeueBench$$anon$3')
f(14,14327,112,1,'kyo/concurrent/channels$Channels$.blocking')
f(15,14327,112,1,'kyo/concurrent/queues$Queues$.bounded')
f(16,14327,112,2,'kyo.concurrent.queues$Queues$$anon$11')
f(1,14439,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,14439,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,14439,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,14439,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,14439,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,14439,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,14439,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,14439,1,2,'org.openjdk.jmh.runner.InfraControl')
f(8,14440,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,14440,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,14440,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,14440,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,14440,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,14440,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,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,'PhaseOutput::Output()')
f(11,0,1,4,'PhaseOutput::shorten_branches(unsigned int*)')
f(12,0,1,4,'PhaseOutput::scratch_emit_size(Node const*)')
f(13,0,1,4,'Assembler::movl(RegisterImpl*, int)')
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::post_evacuate_collection_set(G1EvacuationInfo&, G1RedirtyCardsQueueSet*, G1ParScanThreadStateSet*)')
f(12,1,1,4,'G1CollectedHeap::post_evacuate_cleanup_2(PreservedMarksSet*, G1RedirtyCardsQueueSet*, G1EvacuationInfo*, unsigned long const*)')
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,3,1,'java/util/concurrent/FutureTask.run')
f(5,2,3,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,2,3,1,'java/util/concurrent/FutureTask.run')
f(7,2,3,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,2,3,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,2,3,1,'java/lang/reflect/Method.invoke')
f(10,2,3,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,2,3,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,2,3,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,2,3,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,2,3,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,2,3,1,'kyo/bench/Bench.syncKyo')
f(16,2,2,1,'kyo/bench/Bench.runLoop$1')
f(17,2,2,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,2,2,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,2,2,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,2,2,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,2,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,2,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,2,2,1,'java/util/concurrent/locks/LockSupport.park')
f(24,2,2,1,'jdk/internal/misc/Unsafe.park')
f(25,2,1,3,'Unsafe_Park')
f(26,2,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,2,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,2,1,5,'do_syscall_64')
f(29,2,1,5,'__x64_sys_futex')
f(30,2,1,5,'do_futex')
f(31,2,1,5,'futex_wake')
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(16,4,1,2,'kyo/bench/EnqueueDequeueBench.kyoBench',1,0,0)
f(17,4,1,2,'kyo/concurrent/fibers$Fibers.block',1,0,0)
f(18,4,1,2,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1',1,0,0)
f(4,5,289,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23480.run')
f(5,5,289,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,5,289,1,'kyo/concurrent/scheduler/Worker.runWorker',0,0,2)
f(7,6,1,1,'I2C/C2I adapters')
f(7,7,283,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,7,283,1,'kyo/concurrent/scheduler/IOTask.eval',40,0,0)
f(9,34,132,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,39,127,2,'kyo/concurrent/channels$Channels$Blocking$$anon$2.apply',121,0,0)
f(11,51,111,2,'kyo/concurrent/channels$$anon$16.apply',105,0,0)
f(12,72,90,2,'kyo/concurrent/channels$$anon$16.apply',84,0,0)
f(13,121,5,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(14,124,2,2,'kyo/concurrent/channels$Channels$$anon$14.q',2,0,0)
f(13,126,2,2,'kyo/concurrent/fibers$.Fibers',2,0,0)
f(13,128,19,2,'kyo/concurrent/fibers$Fibers.value',19,0,0)
f(14,128,19,2,'kyo/concurrent/fibers$Fiber$.done',19,0,0)
f(15,128,19,2,'kyo/concurrent/fibers$Fiber.<init>',19,0,0)
f(16,128,19,2,'java/lang/Object.<init>',19,0,0)
f(13,147,15,2,'kyo/concurrent/queues$$anon$12.poll',14,0,0)
f(14,152,10,2,'java/util/concurrent/atomic/AtomicReference.getAndSet',9,0,0)
f(15,155,7,2,'java/lang/invoke/VarHandleGuards.guard_LL_L',6,0,0)
f(16,157,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(17,157,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(18,157,1,4,'MemAllocator::allocate() const')
f(19,157,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(20,157,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(21,157,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(22,157,1,4,'MutatorAllocRegion::retire(bool)')
f(23,157,1,4,'G1CollectedHeap::retire_mutator_alloc_region(HeapRegion*, unsigned long)')
f(24,157,1,4,'G1CollectionSet::add_eden_region(HeapRegion*)')
f(25,157,1,4,'G1Policy::predict_region_non_copy_time_ms(HeapRegion*, bool) const')
f(26,157,1,4,'AbsSeq::davg() const')
f(16,158,2,2,'java/lang/invoke/VarForm.getMemberName',2,0,0)
f(17,159,1,2,'java/lang/invoke/VarForm.getMemberNameOrNull',1,0,0)
f(16,160,2,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.getAndSet',2,0,0)
f(11,162,4,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2',4,0,0)
f(12,162,4,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$62.0x0000000800d54a70.apply',4,0,0)
f(9,166,93,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,178,10,2,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2',9,0,0)
f(11,178,9,2,'kyo/bench/EnqueueDequeueBench$$Lambda$61.0x0000000800d543d0.apply',8,0,0)
f(12,182,5,2,'kyo/bench/EnqueueDequeueBench.$anonfun$1',4,0,0)
f(13,182,5,2,'kyo/concurrent/channels$Channels$$anon$14.take',4,0,0)
f(14,182,5,2,'kyo/concurrent/channels$Channels$Blocking.take$',4,0,0)
f(15,182,5,2,'kyo/concurrent/channels$Channels$Blocking.take',4,0,0)
f(16,182,4,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',4,0,0)
f(16,186,1,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2')
f(17,186,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(18,186,1,4,'CardTableBarrierSet::on_slowpath_allocation_exit(JavaThread*, oopDesc*)')
f(11,187,1,2,'kyo/bench/EnqueueDequeueBench$$anon$2.<init>',1,0,0)
f(12,187,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(10,188,71,2,'kyo/concurrent/channels$Channels$Blocking$$anon$1.apply',66,0,0)
f(11,188,46,2,'kyo/concurrent/channels$$anon$19.apply',41,0,0)
f(12,188,46,2,'kyo/concurrent/channels$$anon$19.apply',41,0,0)
f(13,195,5,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(14,196,1,2,'kyo/concurrent/queues$$anon$12.isFull',1,0,0)
f(15,196,1,2,'java/util/concurrent/atomic/AtomicReference.get',1,0,0)
f(14,197,3,2,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.isEmpty',3,0,0)
f(15,197,3,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.isEmpty',3,0,0)
f(16,197,3,2,'org/jctools/queues/IndexedQueueSizeUtil.isEmpty',3,0,0)
f(17,197,3,2,'org/jctools/queues/MpUnboundedXaddArrayQueueProducerFields.lvProducerIndex',3,0,0)
f(13,200,4,2,'kyo/concurrent/channels$Channels$$anon$14.q',4,0,0)
f(13,204,4,2,'kyo/concurrent/fibers$Fibers.value',4,0,0)
f(14,207,1,2,'kyo/concurrent/fibers$Fiber$.done',1,0,0)
f(13,208,26,2,'kyo/concurrent/queues$$anon$12.offer',26,0,0)
f(14,208,26,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',26,0,0)
f(15,208,26,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',26,0,0)
f(16,225,9,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',9,0,0)
f(17,232,2,2,'java/util/Objects.requireNonNull',2,0,0)
f(11,234,25,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1',25,0,0)
f(12,237,22,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$60.0x0000000800d54000.apply',22,0,0)
f(13,244,15,2,'kyo/concurrent/channels$Channels$Blocking.$anonfun$1',15,0,0)
f(14,244,15,2,'kyo/concurrent/fibers$Fiber.join',15,0,0)
f(9,259,3,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,259,3,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,259,3,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,259,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,259,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,259,3,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,259,3,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,259,3,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,259,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,259,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,259,3,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,259,3,1,'jdk/internal/misc/Unsafe.unpark')
f(21,259,3,3,'pthread_cond_signal')
f(22,259,3,5,'entry_SYSCALL_64_after_hwframe')
f(23,259,3,5,'do_syscall_64')
f(24,259,3,5,'__x64_sys_futex')
f(25,259,3,5,'do_futex')
f(26,259,3,5,'futex_wake')
f(27,259,3,5,'wake_up_q')
f(28,259,3,5,'_raw_spin_unlock_irqrestore')
f(9,262,2,2,'kyo/concurrent/scheduler/IOTask.st',2,0,0)
f(9,264,15,6,'kyo/core$internal$KyoCont.effect',0,15,0)
f(9,279,11,3,'vtable stub')
f(7,290,4,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,290,1,2,'java/util/AbstractQueue.add',1,0,0)
f(9,290,1,2,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.offer',1,0,0)
f(10,290,1,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.producerChunkForIndex',1,0,0)
f(8,291,3,1,'kyo/concurrent/scheduler/Worker.park')
f(9,291,3,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,291,3,1,'jdk/internal/misc/Unsafe.park')
f(11,291,3,3,'[unknown]')
f(12,291,3,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,291,3,5,'entry_SYSCALL_64_after_hwframe')
f(14,291,3,5,'do_syscall_64')
f(15,291,3,5,'__x64_sys_futex')
f(16,291,3,5,'do_futex')
f(17,291,3,5,'futex_wait')
f(18,291,3,5,'futex_wait_queue_me')
f(19,291,3,5,'schedule')
f(20,291,3,5,'__schedule')
f(21,291,3,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: 784px}
</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(49);
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,22543,3,'all')
f(1,0,1,2,'java.lang.Class')
f(1,1,22539,1,'java/lang/Thread.run')
f(2,1,22539,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,1,22539,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,1,277,1,'java/util/concurrent/FutureTask.run')
f(5,1,277,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,1,277,1,'java/util/concurrent/FutureTask.run')
f(7,1,277,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,1,277,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,1,277,1,'java/lang/reflect/Method.invoke')
f(10,1,277,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,1,277,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,1,277,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,1,277,1,'kyo/bench/jmh_generated/ForkManyBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,1,277,1,'kyo/bench/jmh_generated/ForkManyBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,1,277,1,'kyo/bench/Bench.forkKyo')
f(16,1,13,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,1,13,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,1,13,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,1,2,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,1,2,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3f718')
f(19,3,11,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3f718')
f(16,14,45,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,14,45,2,'kyo.bench.Bench$$anon$1')
f(16,59,169,1,'kyo/bench/Bench.runLoop$2')
f(17,59,82,1,'kyo/bench/Bench$$anon$1.apply')
f(18,59,41,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,59,41,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c83b00.apply')
f(20,59,41,1,'kyo/bench/Bench.$anonfun$2')
f(21,59,41,1,'kyo/concurrent/fibers$Fiber.block')
f(22,59,41,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,100,41,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,100,41,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,100,41,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(21,100,41,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,100,41,2,'kyo.concurrent.scheduler.IOTask')
f(17,141,87,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,141,87,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,141,87,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,141,87,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,141,43,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,141,43,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,141,4,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,145,39,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,145,39,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,184,4,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,188,40,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,188,40,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,188,40,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,228,50,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,228,50,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,228,50,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,228,50,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,228,50,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c85068')
f(4,278,10,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f2b8.run')
f(5,278,10,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,278,10,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,278,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,278,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,278,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,278,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,278,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,288,10,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f4e0.run')
f(5,288,10,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,288,10,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,288,10,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,288,10,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,288,10,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,288,10,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$71+0x0000000800d4fd90')
f(4,298,22242,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fda8.run')
f(5,298,22242,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,298,22242,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,298,10,1,'java/util/concurrent/CopyOnWriteArrayList.add')
f(8,298,10,1,'java/util/Arrays.copyOf')
f(9,298,10,1,'java/util/Arrays.copyOf')
f(10,298,10,2,'java.lang.Object[]')
f(7,308,19893,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,308,19893,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,308,19890,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,308,16144,1,'kyo/bench/ForkManyBench$$anon$1.apply')
f(11,308,6561,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(12,308,6561,1,'kyo/bench/ForkManyBench$$Lambda$61.0x0000000800d4b2f0.apply')
f(13,308,6561,1,'kyo/bench/ForkManyBench.$anonfun$2')
f(14,308,6561,1,'kyo/bench/ForkManyBench.repeat$2')
f(15,308,2891,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4cc00.linkToTargetMethod')
f(16,308,2891,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c400.newInvokeSpecial')
f(17,308,2891,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,308,2891,2,'kyo.bench.ForkManyBench$$Lambda$61+0x0000000800d4b2f0')
f(15,3199,3670,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(16,3199,3670,2,'kyo.bench.ForkManyBench$$anon$1')
f(11,6869,9583,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,6869,9583,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,6869,9583,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(14,6869,9583,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,6869,1232,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,8101,6534,2,'kyo.concurrent.scheduler.IOTask')
f(15,14635,1808,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,14635,1808,2,'kyo.concurrent.fibers$Fiber')
f(15,16443,9,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(16,16443,9,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(17,16443,9,1,'kyo/concurrent/scheduler/Queue.offer')
f(18,16443,9,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(19,16443,9,1,'scala/Function0.apply$mcZ$sp')
f(20,16443,9,1,'kyo/concurrent/scheduler/Queue$$Lambda$54.0x0000000800d474b0.apply')
f(21,16443,9,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1')
f(22,16443,9,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,16443,9,1,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize')
f(24,16443,9,1,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize')
f(25,16443,9,1,'scala/collection/mutable/ArrayBuffer$.scala$collection$mutable$ArrayBuffer$$ensureSize')
f(26,16443,9,5,'java.lang.Object[]')
f(10,16452,3745,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5')
f(11,16452,3745,2,'kyo.bench.ForkManyBench$$anon$6')
f(10,20197,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,20197,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,20197,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(13,20197,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,20197,1,2,'kyo.concurrent.scheduler.IOTask')
f(9,20198,1,1,'kyo/bench/ForkManyBench$$anon$7.apply')
f(10,20198,1,1,'kyo/bench/ForkManyBench$$anon$4.apply')
f(11,20198,1,1,'kyo/concurrent/atomics$Atomics$$anon$1.apply')
f(12,20198,1,1,'kyo/concurrent/atomics$Atomics$$anon$1.apply')
f(13,20198,1,2,'java.util.concurrent.atomic.AtomicInteger')
f(9,20199,1,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(10,20199,1,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(11,20199,1,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$Promise$$anon$26$$_$loop$22')
f(12,20199,1,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(13,20199,1,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(14,20199,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(15,20199,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(16,20199,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(17,20199,1,1,'scala/runtime/function/JProcedure1.apply')
f(18,20199,1,1,'scala/runtime/function/JProcedure1.apply')
f(19,20199,1,1,'kyo/concurrent/scheduler/IOTask$$Lambda$66.0x0000000800d4ebe0.applyVoid')
f(20,20199,1,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(21,20199,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(22,20199,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(23,20199,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(24,20199,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$68+0x0000000800d4f4d0')
f(9,20200,1,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,20200,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,20200,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,20201,2338,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,20201,2338,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,20201,2338,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,20201,2338,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,20201,2338,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d45000')
f(7,22539,1,1,'kyo/concurrent/scheduler/Worker.flush')
f(8,22539,1,1,'kyo/concurrent/scheduler/Queue.drain')
f(9,22539,1,1,'kyo/concurrent/scheduler/Queue.modify')
f(10,22539,1,1,'kyo/concurrent/scheduler/Queue$$Lambda$77.0x0000000800d568a8.apply')
f(11,22539,1,1,'kyo/concurrent/scheduler/Queue.drain$$anonfun$adapted$1')
f(12,22539,1,1,'kyo/concurrent/scheduler/Queue.drain$$anonfun$1')
f(13,22539,1,1,'scala/collection/AbstractIterable.foreach')
f(14,22539,1,1,'scala/collection/IterableOnceOps.foreach$')
f(15,22539,1,1,'scala/collection/IterableOnceOps.foreach')
f(16,22539,1,1,'scala/collection/mutable/PriorityQueue.iterator')
f(17,22539,1,1,'scala/collection/mutable/ArrayBuffer.iterator')
f(18,22539,1,1,'scala/collection/IndexedSeqOps.iterator$')
f(19,22539,1,1,'scala/collection/IndexedSeqOps.iterator')
f(20,22539,1,1,'scala/collection/mutable/ArrayBuffer.view')
f(21,22539,1,1,'scala/collection/mutable/ArrayBuffer.view')
f(22,22539,1,1,'java/lang/ClassLoader.loadClass')
f(23,22539,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(24,22539,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(25,22539,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(26,22539,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(27,22539,1,1,'jdk/internal/loader/BuiltinClassLoader.defineClass')
f(28,22539,1,1,'java/security/SecureClassLoader.defineClass')
f(29,22539,1,1,'java/lang/ClassLoader.defineClass')
f(30,22539,1,1,'java/lang/ClassLoader.defineClass1')
f(31,22539,1,1,'java/lang/ClassLoader.loadClass')
f(32,22539,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(33,22539,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(34,22539,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(35,22539,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(36,22539,1,1,'jdk/internal/loader/BuiltinClassLoader.defineClass')
f(37,22539,1,1,'java/security/SecureClassLoader.defineClass')
f(38,22539,1,1,'java/lang/ClassLoader.defineClass')
f(39,22539,1,1,'java/lang/ClassLoader.defineClass1')
f(40,22539,1,1,'java/lang/ClassLoader.loadClass')
f(41,22539,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(42,22539,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(43,22539,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(44,22539,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(45,22539,1,1,'jdk/internal/loader/BuiltinClassLoader.defineClass')
f(46,22539,1,1,'jdk/internal/loader/Resource.getBytes')
f(47,22539,1,1,'java/util/Arrays.copyOf')
f(48,22539,1,2,'byte[]')
f(1,22540,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,22540,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,22540,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,22540,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,22540,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,22540,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,22540,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,22540,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,22540,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,22540,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,22540,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,22540,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,22540,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,274,3,'all')
f(1,0,274,1,'java/lang/Thread.run')
f(2,0,274,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,274,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,1,1,'java/util/concurrent/FutureTask.run')
f(5,0,1,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,1,1,'java/util/concurrent/FutureTask.run')
f(7,0,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1,1,'java/lang/reflect/Method.invoke')
f(10,0,1,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,1,1,'kyo/bench/jmh_generated/ForkManyBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,1,1,'kyo/bench/jmh_generated/ForkManyBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,1,1,'kyo/bench/Bench.forkKyo')
f(16,0,1,1,'kyo/bench/Bench.runLoop$2')
f(17,0,1,1,'kyo/bench/Bench$$anon$1.apply')
f(18,0,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,0,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,0,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(21,0,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,0,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,0,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,0,1,2,'kyo/concurrent/scheduler/Worker.enqueue',1,0,0)
f(25,0,1,2,'kyo/concurrent/scheduler/Queue.offer',1,0,0)
f(26,0,1,2,'kyo/concurrent/scheduler/Queue.tryModify',1,0,0)
f(27,0,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(28,0,1,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',1,0,0)
f(29,0,1,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(4,1,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f2b8.run')
f(5,1,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,1,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,1,1,1,'java/lang/Thread.sleep')
f(8,1,1,3,'[unknown]')
f(9,1,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,1,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,1,1,5,'do_syscall_64')
f(12,1,1,5,'__x64_sys_futex')
f(13,1,1,5,'do_futex')
f(14,1,1,5,'futex_wait')
f(15,1,1,5,'futex_wait_queue_me')
f(16,1,1,5,'schedule')
f(17,1,1,5,'__schedule')
f(18,1,1,5,'finish_task_switch.isra.0')
f(4,2,272,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fda8.run')
f(5,2,272,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,2,272,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,14,231,1,'kyo/concurrent/scheduler/IOTask.run',29,0,0)
f(8,17,228,1,'kyo/concurrent/scheduler/IOTask.eval',26,0,0)
f(9,42,3,1,'kyo/bench/ForkManyBench$$anon$3.apply')
f(10,42,3,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$2',3,0,0)
f(11,42,3,2,'kyo/bench/ForkManyBench$$Lambda$59.0x0000000800d4ac60.apply',3,0,0)
f(12,42,3,2,'kyo/bench/ForkManyBench.$anonfun$adapted$2',3,0,0)
f(13,42,3,2,'kyo/bench/ForkManyBench.$anonfun$5',3,0,0)
f(14,42,3,2,'scala/runtime/BoxesRunTime.boxToBoolean',3,0,0)
f(9,45,189,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,46,183,1,'kyo/bench/ForkManyBench$$anon$1.apply',56,0,0)
f(11,46,183,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',56,0,0)
f(12,47,174,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',47,0,0)
f(13,69,151,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply',24,0,0)
f(14,69,151,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',24,0,0)
f(15,75,12,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',12,0,0)
f(16,76,11,2,'kyo/ios$KyoIO.<init>',11,0,0)
f(17,83,4,2,'kyo/core$internal$Kyo.<init>',4,0,0)
f(15,87,3,2,'kyo/concurrent/scheduler/IOTask.<init>',3,0,0)
f(15,90,130,1,'kyo/concurrent/scheduler/Scheduler$.schedule',3,0,0)
f(16,90,130,1,'kyo/concurrent/scheduler/Worker.enqueueLocal',3,0,0)
f(17,90,130,1,'kyo/concurrent/scheduler/Queue.offer',3,0,0)
f(18,90,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(19,90,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(20,90,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(18,91,129,1,'kyo/concurrent/scheduler/Queue.tryModify',2,0,0)
f(19,91,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(20,91,1,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',1,0,0)
f(21,91,1,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(19,92,128,1,'scala/Function0.apply$mcZ$sp',1,0,0)
f(20,93,127,1,'kyo/concurrent/scheduler/Queue$$Lambda$54.0x0000000800d474b0.apply')
f(21,93,127,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1')
f(22,93,127,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,96,39,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize',39,0,0)
f(24,96,39,2,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize',39,0,0)
f(25,97,38,2,'scala/collection/mutable/ArrayBuffer.array_$eq',38,0,0)
f(23,135,85,2,'scala/collection/mutable/PriorityQueue.fixUp',85,0,0)
f(24,155,20,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',20,0,0)
f(25,168,7,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',7,0,0)
f(24,175,44,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_swap',44,0,0)
f(25,218,1,2,'scala/collection/mutable/ArrayBuffer.array',1,0,0)
f(24,219,1,2,'scala/collection/mutable/PriorityQueue.ord',1,0,0)
f(13,220,1,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',1,0,0)
f(14,220,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(15,220,1,2,'kyo/ios$KyoIO.effect',1,0,0)
f(16,220,1,2,'kyo/ios$KyoIO.effect',1,0,0)
f(12,221,8,2,'kyo/locals$Locals$$anon$3.apply',8,0,0)
f(10,229,5,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5',1,0,0)
f(11,229,5,1,'kyo/bench/ForkManyBench$$anon$6.<init>',1,0,0)
f(12,229,5,1,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(13,229,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(13,230,3,6,'kyo/core$internal$KyoCont.value',0,3,0)
f(13,233,1,3,'vtable stub')
f(9,234,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(9,235,3,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',1,0,0)
f(9,238,3,6,'kyo/core$internal$KyoCont.effect',0,3,0)
f(9,241,1,1,'kyo/ios$KyoIO.effect')
f(9,242,3,3,'vtable stub')
f(7,245,27,1,'kyo/concurrent/scheduler/Queue.poll',6,0,0)
f(8,247,5,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',4,0,0)
f(9,247,5,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',4,0,0)
f(10,251,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(8,252,20,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,253,2,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',2,0,0)
f(10,253,2,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',2,0,0)
f(11,254,1,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(9,255,17,2,'kyo/concurrent/scheduler/Queue$$Lambda$63.0x0000000800d4ba90.apply',17,0,0)
f(10,260,12,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',12,0,0)
f(11,267,2,2,'kyo/concurrent/scheduler/Queue.isEmpty',2,0,0)
f(11,269,3,2,'scala/collection/mutable/PriorityQueue.dequeue',3,0,0)
f(7,272,1,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,272,1,1,'kyo/concurrent/scheduler/Worker.park')
f(9,272,1,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,272,1,1,'jdk/internal/misc/Unsafe.park')
f(11,272,1,3,'[unknown]')
f(12,272,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(7,273,1,2,'kyo/concurrent/scheduler/Worker.queue',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,22909,3,'all')
f(1,0,22906,1,'java/lang/Thread.run')
f(2,0,22906,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,22906,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,410,1,'java/util/concurrent/FutureTask.run')
f(5,0,409,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,409,1,'java/util/concurrent/FutureTask.run')
f(7,0,409,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,409,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1,2,'java.lang.Object[]')
f(9,1,408,1,'java/lang/reflect/Method.invoke')
f(10,1,408,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,1,408,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,1,408,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,1,408,1,'kyo/bench/jmh_generated/ForkManyBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,1,408,1,'kyo/bench/jmh_generated/ForkManyBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,1,408,1,'kyo/bench/Bench.syncKyo')
f(16,1,193,1,'kyo/bench/Bench.runLoop$1')
f(17,1,113,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,1,113,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,1,113,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,1,113,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,1,74,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,1,74,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,1,44,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,45,30,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,45,30,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,75,38,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,113,1,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,113,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,113,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,114,80,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,114,79,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,114,79,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,114,79,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,114,48,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,114,48,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,114,48,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(24,114,48,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,114,48,2,'kyo.concurrent.scheduler.IOTask')
f(21,162,31,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,162,31,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c83b00.apply')
f(23,162,31,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,162,31,1,'kyo/concurrent/fibers$Fiber.join')
f(25,162,31,1,'kyo/concurrent/fibers$Fibers.get')
f(26,162,31,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,162,31,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,193,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,193,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c81430.apply')
f(20,193,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,193,1,1,'kyo/concurrent/fibers$Fiber.block')
f(22,193,1,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,194,215,1,'kyo/bench/ForkManyBench.kyoBench')
f(17,194,12,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,194,12,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,194,12,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,194,12,2,'kyo.bench.ForkManyBench$$Lambda$37+0x0000000800c3f718')
f(17,206,92,1,'kyo/concurrent/fibers$Fibers.block')
f(18,206,16,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,206,16,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,222,35,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,222,35,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,257,41,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,257,41,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,298,111,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,298,40,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,298,40,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,298,40,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,298,40,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c83b00')
f(18,338,40,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,338,37,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,338,37,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,338,37,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,338,37,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c85068')
f(19,375,3,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,375,3,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(18,378,31,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,378,31,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(5,409,1,1,'java/util/concurrent/FutureTask.set')
f(6,409,1,1,'java/util/concurrent/FutureTask.finishCompletion')
f(7,409,1,1,'java/util/concurrent/ExecutorCompletionService$QueueingFuture.done')
f(8,409,1,1,'java/util/AbstractQueue.add')
f(9,409,1,1,'java/util/concurrent/LinkedBlockingQueue.offer')
f(10,409,1,2,'java.util.concurrent.LinkedBlockingQueue$Node')
f(4,410,10,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f4b8.run')
f(5,410,10,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,410,10,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,410,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,410,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,410,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,410,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,410,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,420,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1f6e0.run')
f(5,420,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,420,1,1,'kyo/concurrent/scheduler/Scheduler$.addWorker')
f(7,420,1,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers')
f(8,420,1,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(9,420,1,1,'java/util/concurrent/ThreadPoolExecutor.addWorker')
f(10,420,1,1,'java/util/concurrent/ThreadPoolExecutor$Worker.<init>')
f(11,420,1,1,'kyo/concurrent/scheduler/Threads$$anon$1.newThread')
f(12,420,1,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23ff0.apply')
f(13,420,1,1,'kyo/concurrent/scheduler/Scheduler$.$init$$$anonfun$1')
f(14,420,1,1,'kyo/concurrent/scheduler/Worker.<init>')
f(15,420,1,1,'java/lang/Thread.<init>')
f(16,420,1,1,'java/lang/Thread.<init>')
f(17,420,1,1,'java/lang/Thread.<init>')
f(18,420,1,1,'java/security/AccessController.getContext')
f(19,420,1,1,'java/security/AccessControlContext.optimize')
f(20,420,1,1,'java/security/AccessControlContext.combine')
f(21,420,1,2,'java.security.ProtectionDomain[]')
f(6,421,10,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,421,10,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,421,10,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,421,10,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,421,10,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$70+0x0000000800d4d800')
f(4,431,22475,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d243c0.run')
f(5,431,22475,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,431,22475,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,431,11,1,'java/util/concurrent/CopyOnWriteArrayList.add')
f(8,431,11,1,'java/util/Arrays.copyOf')
f(9,431,11,1,'java/util/Arrays.copyOf')
f(10,431,11,2,'java.lang.Object[]')
f(7,442,20159,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,442,20159,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,442,1,1,'kyo/bench/ForkManyBench$$anon$3.apply')
f(10,442,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$2')
f(11,442,1,1,'kyo/bench/ForkManyBench$$Lambda$60.0x0000000800d4ae90.apply')
f(12,442,1,1,'kyo/bench/ForkManyBench.$anonfun$adapted$2')
f(13,442,1,1,'kyo/bench/ForkManyBench.$anonfun$5')
f(14,442,1,1,'kyo/concurrent/fibers$Fiber$Promise.complete')
f(15,442,1,2,'kyo.concurrent.fibers$Fiber$Promise$$anon$26')
f(9,443,20152,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,443,16593,1,'kyo/bench/ForkManyBench$$anon$1.apply')
f(11,443,6930,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(12,443,6930,1,'kyo/bench/ForkManyBench$$Lambda$62.0x0000000800d4b520.apply')
f(13,443,6930,1,'kyo/bench/ForkManyBench.$anonfun$2')
f(14,443,6930,1,'kyo/bench/ForkManyBench.repeat$2')
f(15,443,3050,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4cc00.linkToTargetMethod')
f(16,443,3050,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c400.newInvokeSpecial')
f(17,443,3050,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,443,3050,2,'kyo.bench.ForkManyBench$$Lambda$62+0x0000000800d4b520')
f(15,3493,3880,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(16,3493,3880,2,'kyo.bench.ForkManyBench$$anon$1')
f(11,7373,9663,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,7373,9663,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,7373,9663,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(14,7373,9663,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,7373,1408,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,8781,6467,2,'kyo.concurrent.scheduler.IOTask')
f(15,15248,1780,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,15248,1780,2,'kyo.concurrent.fibers$Fiber')
f(15,17028,8,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(16,17028,8,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(17,17028,8,1,'kyo/concurrent/scheduler/Queue.offer')
f(18,17028,8,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(19,17028,8,1,'scala/Function0.apply$mcZ$sp')
f(20,17028,8,1,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d476b8.apply')
f(21,17028,8,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1')
f(22,17028,8,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,17028,8,1,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize')
f(24,17028,8,1,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize')
f(25,17028,8,1,'scala/collection/mutable/ArrayBuffer$.scala$collection$mutable$ArrayBuffer$$ensureSize')
f(26,17028,8,5,'java.lang.Object[]')
f(10,17036,3557,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5')
f(11,17036,3557,2,'kyo.bench.ForkManyBench$$anon$6')
f(10,20593,2,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,20593,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,20593,2,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(13,20593,2,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,20593,2,2,'kyo.concurrent.scheduler.IOTask')
f(9,20595,2,1,'kyo/bench/ForkManyBench$$anon$7.apply')
f(10,20595,2,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$6')
f(11,20595,2,1,'kyo/bench/ForkManyBench$$Lambda$59.0x0000000800d4a8b0.apply')
f(12,20595,2,1,'kyo/bench/ForkManyBench.$anonfun$6')
f(13,20595,2,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(14,20595,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(15,20595,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(16,20595,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,20595,1,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c85068')
f(14,20596,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(15,20596,1,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(9,20597,2,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(10,20597,2,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(11,20597,2,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$Promise$$anon$26$$_$loop$22')
f(12,20597,2,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(13,20597,2,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(14,20597,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(15,20597,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(16,20597,2,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(17,20597,2,1,'scala/runtime/function/JProcedure1.apply')
f(18,20597,2,1,'scala/runtime/function/JProcedure1.apply')
f(19,20597,2,1,'kyo/concurrent/scheduler/IOTask$$Lambda$67.0x0000000800d4ede8.applyVoid')
f(20,20597,2,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(21,20597,2,2,'kyo.concurrent.scheduler.IOTask')
f(9,20599,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,20599,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,20599,1,1,'kyo/bench/ForkManyBench$$Lambda$37.0x0000000800c3f718.apply')
f(12,20599,1,1,'kyo/bench/ForkManyBench.kyoBench$$anonfun$1')
f(13,20599,1,1,'kyo/bench/ForkManyBench.kyoBenchFiber')
f(14,20599,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$7')
f(15,20599,1,2,'kyo.bench.ForkManyBench$$anon$8')
f(9,20600,1,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,20600,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,20600,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,20600,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,20600,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$67+0x0000000800d4ede8')
f(7,20601,2305,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,20601,2305,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,20601,2305,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,20601,2305,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,20601,2305,2,'kyo.concurrent.scheduler.Queue$$Lambda$56+0x0000000800d45230')
f(1,22906,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,22906,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,22906,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,22906,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,22906,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,22906,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,22906,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,22906,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,22906,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,22906,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,22906,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,22906,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,22906,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,283,3,'all')
f(1,0,6,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,6,3,'thread_native_entry(Thread*)')
f(3,0,6,4,'Thread::call_run()')
f(4,0,6,4,'JavaThread::thread_main_inner()')
f(5,0,6,4,'CompileBroker::compiler_thread_loop()')
f(6,0,6,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,6,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,6,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,3,4,'Compile::Code_Gen()')
f(10,0,3,4,'PhaseChaitin::Register_Allocate()')
f(11,0,1,4,'PhaseAggressiveCoalesce::insert_copies(Matcher&)')
f(12,0,1,4,'loadConP0Node::size_of() const')
f(11,1,1,4,'PhaseChaitin::build_ifg_physical(ResourceArea*)')
f(12,1,1,4,'PhaseChaitin::interfere_with_live(unsigned int, IndexSet*) [clone .part.0]')
f(11,2,1,4,'PhaseChaitin::merge_multidefs()')
f(9,3,2,4,'Compile::Optimize()')
f(10,3,1,4,'PhaseIdealLoop::optimize(PhaseIterGVN&, LoopOptsMode)')
f(11,3,1,4,'PhaseIdealLoop::build_and_optimize(LoopOptsMode)')
f(12,3,1,4,'StartNode::pinned() const')
f(10,4,1,4,'PhaseIterGVN::optimize()')
f(11,4,1,4,'PhaseIterGVN::transform_old(Node*)')
f(12,4,1,4,'StoreNode::Ideal(PhaseGVN*, bool)')
f(13,4,1,4,'InitializeNode::can_capture_store(StoreNode*, PhaseGVN*, bool) [clone .part.0]')
f(14,4,1,4,'InitializeNode::detect_init_independence(Node*, PhaseGVN*)')
f(15,4,1,4,'MemNode::all_controls_dominate(Node*, Node*) [clone .part.0]')
f(16,4,1,4,'Node::dominates(Node*, Node_List&)')
f(9,5,1,4,'ParseGenerator::generate(JVMState*)')
f(10,5,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(11,5,1,4,'Parse::do_all_blocks()')
f(12,5,1,4,'Parse::do_one_block()')
f(13,5,1,4,'Parse::do_call()')
f(14,5,1,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,'PredictedCallGenerator::generate(JVMState*)')
f(26,5,1,4,'ParseGenerator::generate(JVMState*)')
f(27,5,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(28,5,1,4,'Parse::do_all_blocks()')
f(29,5,1,4,'Parse::do_one_block()')
f(30,5,1,4,'Parse::do_field_access(bool, bool)')
f(31,5,1,4,'Parse::do_get_xxx(Node*, ciField*, bool)')
f(32,5,1,4,'GraphKit::access_load_at(Node*, Node*, TypePtr const*, Type const*, BasicType, unsigned long)')
f(33,5,1,4,'BarrierSetC2::load_at(C2Access&, Type const*) const')
f(34,5,1,4,'GraphKit::insert_mem_bar(int, Node*)')
f(35,5,1,4,'Node::out_grow(unsigned int)')
f(36,5,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(1,6,277,1,'java/lang/Thread.run')
f(2,6,277,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,6,277,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,6,1,1,'java/util/concurrent/FutureTask.run')
f(5,6,1,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,6,1,1,'java/util/concurrent/FutureTask.run')
f(7,6,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,6,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,6,1,1,'java/lang/reflect/Method.invoke')
f(10,6,1,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,6,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,6,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,6,1,1,'kyo/bench/jmh_generated/ForkManyBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,6,1,1,'kyo/bench/jmh_generated/ForkManyBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,6,1,1,'kyo/bench/Bench.syncKyo')
f(16,6,1,1,'kyo/bench/Bench.runLoop$1')
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,'Unsafe_Park')
f(26,6,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,6,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,6,1,5,'do_syscall_64')
f(4,7,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f4b8.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,275,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d243c0.run')
f(5,8,275,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,8,275,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,13,230,1,'kyo/concurrent/scheduler/IOTask.run',3,0,0)
f(8,15,228,1,'kyo/concurrent/scheduler/IOTask.eval',1,0,0)
f(9,32,2,1,'kyo/bench/ForkManyBench$$anon$3.apply')
f(10,33,1,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$2',1,0,0)
f(9,34,191,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,35,178,1,'kyo/bench/ForkManyBench$$anon$1.apply')
f(11,35,178,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',36,0,0)
f(12,48,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(13,48,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',2,0,0)
f(12,50,163,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',21,0,0)
f(13,51,147,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply',5,0,0)
f(14,51,147,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',5,0,0)
f(15,51,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(16,51,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(17,51,1,4,'MemAllocator::allocate() const')
f(18,51,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(19,51,1,4,'G1Allocator::unsafe_max_tlab_alloc()')
f(15,52,3,2,'kyo/concurrent/scheduler/IOTask.<init>',3,0,0)
f(15,55,143,1,'kyo/concurrent/scheduler/Scheduler$.schedule',2,0,0)
f(16,55,143,1,'kyo/concurrent/scheduler/Worker.enqueueLocal',2,0,0)
f(17,55,143,1,'kyo/concurrent/scheduler/Queue.offer',2,0,0)
f(18,55,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(19,55,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',2,0,0)
f(18,57,141,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(19,57,141,1,'scala/Function0.apply$mcZ$sp')
f(20,57,141,1,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d476b8.apply')
f(21,57,141,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1')
f(22,57,141,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,64,27,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize',27,0,0)
f(24,64,27,2,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize',27,0,0)
f(25,65,26,2,'scala/collection/mutable/ArrayBuffer.array_$eq',26,0,0)
f(23,91,107,2,'scala/collection/mutable/PriorityQueue.fixUp',107,0,0)
f(24,111,13,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',13,0,0)
f(25,119,5,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',5,0,0)
f(24,124,70,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_swap',70,0,0)
f(25,179,15,2,'scala/collection/mutable/ArrayBuffer.array',15,0,0)
f(24,194,1,2,'scala/collection/mutable/PriorityQueue.ord',1,0,0)
f(24,195,3,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',3,0,0)
f(13,198,15,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',15,0,0)
f(14,204,9,2,'kyo/core$internal$KyoCont.<init>',9,0,0)
f(15,204,4,2,'kyo/ios$KyoIO.effect',4,0,0)
f(15,208,5,2,'kyo/ios$KyoIO.value',5,0,0)
f(10,213,12,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5',9,0,0)
f(11,213,12,2,'kyo/bench/ForkManyBench$$anon$6.<init>',9,0,0)
f(12,213,12,2,'kyo/core$internal$KyoCont.<init>',9,0,0)
f(13,217,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(13,218,2,6,'kyo/core$internal$KyoCont.value',0,2,0)
f(13,220,5,3,'vtable stub')
f(9,225,2,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,226,1,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',1,0,0)
f(9,227,7,1,'kyo/concurrent/scheduler/IOTask.loop$8',1,0,0)
f(10,227,7,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',1,0,0)
f(11,227,7,1,'kyo/concurrent/scheduler/IOPromise.complete',1,0,0)
f(12,228,5,1,'java/util/concurrent/atomic/AtomicReference.compareAndSet')
f(13,228,5,1,'java/lang/invoke/VarHandleGuards.guard_LLL_Z')
f(14,232,1,1,'java/lang/invoke/VarForm.getMemberName')
f(12,233,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,233,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,233,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,233,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,233,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,233,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,233,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,233,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,233,1,1,'jdk/internal/misc/Unsafe.unpark')
f(21,233,1,4,'ThreadsListHandle::~ThreadsListHandle()')
f(9,234,2,1,'kyo/concurrent/scheduler/IOTask.st')
f(9,236,3,6,'kyo/core$internal$KyoCont.effect',0,3,0)
f(9,239,2,1,'kyo/ios$KyoIO.effect')
f(9,241,2,3,'vtable stub')
f(7,243,22,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,245,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,246,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,246,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,246,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(12,246,1,3,'Unsafe_AllocateInstance')
f(13,246,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(14,246,1,4,'MemAllocator::allocate() const')
f(8,247,18,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,247,3,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',3,0,0)
f(10,247,3,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',3,0,0)
f(11,249,1,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(9,250,15,2,'kyo/concurrent/scheduler/Queue$$Lambda$64.0x0000000800d4bcc0.apply',15,0,0)
f(10,252,13,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',13,0,0)
f(11,255,4,2,'kyo/concurrent/scheduler/Queue.isEmpty',4,0,0)
f(11,259,6,2,'scala/collection/mutable/PriorityQueue.dequeue',6,0,0)
f(12,263,2,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',2,0,0)
f(7,265,11,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,265,11,1,'kyo/concurrent/scheduler/Worker.park',1,0,0)
f(9,265,11,1,'java/util/concurrent/locks/LockSupport.parkNanos',1,0,0)
f(10,266,10,1,'jdk/internal/misc/Unsafe.park')
f(11,267,1,3,'Unsafe_Park')
f(12,267,1,3,'clock_gettime')
f(13,267,1,3,'[vdso]')
f(11,268,7,3,'[unknown]')
f(12,268,7,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,269,6,5,'entry_SYSCALL_64_after_hwframe')
f(14,269,6,5,'do_syscall_64')
f(15,269,5,5,'__x64_sys_futex')
f(16,269,5,5,'do_futex')
f(17,269,5,5,'futex_wait')
f(18,269,4,5,'futex_wait_queue_me')
f(19,269,1,5,'hrtimer_sleeper_start_expires')
f(20,269,1,5,'_raw_spin_unlock_irqrestore')
f(19,270,3,5,'schedule')
f(20,270,3,5,'__schedule')
f(21,270,3,5,'finish_task_switch.isra.0')
f(18,273,1,5,'hash_futex')
f(15,274,1,5,'syscall_exit_to_user_mode')
f(16,274,1,5,'exit_to_user_mode_prepare')
f(17,274,1,5,'exit_to_user_mode_loop')
f(18,274,1,5,'mem_cgroup_handle_over_high')
f(11,275,1,4,'java_lang_Thread::set_thread_status(oopDesc*, JavaThreadStatus)')
f(7,276,3,1,'kyo/concurrent/scheduler/Worker.flush')
f(8,276,3,1,'kyo/concurrent/scheduler/Queue.drain')
f(9,276,3,1,'kyo/concurrent/scheduler/Queue.modify')
f(10,276,3,1,'kyo/concurrent/scheduler/Queue$$Lambda$77.0x0000000800d567e8.apply')
f(11,276,3,1,'kyo/concurrent/scheduler/Queue.drain$$anonfun$adapted$1')
f(12,276,3,1,'kyo/concurrent/scheduler/Queue.drain$$anonfun$1')
f(13,276,3,1,'scala/collection/AbstractIterable.foreach')
f(14,276,3,1,'scala/collection/IterableOnceOps.foreach$')
f(15,276,3,1,'scala/collection/IterableOnceOps.foreach')
f(16,276,3,1,'scala/runtime/function/JProcedure1.apply')
f(17,276,3,1,'scala/runtime/function/JProcedure1.apply')
f(18,276,3,1,'kyo/concurrent/scheduler/Worker$$Lambda$76.0x0000000800d563e8.applyVoid')
f(19,276,3,1,'kyo/concurrent/scheduler/Worker.flush$$anonfun$1')
f(20,276,3,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(21,276,2,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(22,276,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(23,276,2,1,'jdk/internal/misc/Unsafe.unpark')
f(24,276,2,3,'pthread_cond_signal')
f(25,276,2,5,'entry_SYSCALL_64_after_hwframe')
f(26,276,2,5,'do_syscall_64')
f(27,276,2,5,'__x64_sys_futex')
f(28,276,2,5,'do_futex')
f(29,276,2,5,'futex_wake')
f(30,276,1,5,'wake_q_add_safe')
f(30,277,1,5,'wake_up_q')
f(31,277,1,5,'_raw_spin_unlock_irqrestore')
f(21,278,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.poll')
f(22,278,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.switchToNextConsumerChunkAndPoll')
f(23,278,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.moveToNextConsumerChunk')
f(24,278,1,6,'org/jctools/queues/SpscArrayQueue.offer',0,1,0)
f(7,279,4,1,'kyo/concurrent/scheduler/Worker.stop$1')
f(8,279,4,1,'kyo/concurrent/scheduler/Scheduler$.stopWorker')
f(9,279,4,1,'java/util/concurrent/atomic/AtomicInteger.get')
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,11022,3,'all')
f(1,0,11018,1,'java/lang/Thread.run')
f(2,0,11018,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,11018,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,2164,1,'java/util/concurrent/FutureTask.run')
f(5,0,2164,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,2164,1,'java/util/concurrent/FutureTask.run')
f(7,0,2164,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,2164,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,2164,1,'java/lang/reflect/Method.invoke')
f(10,0,2164,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,2164,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,2164,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,2164,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,2164,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,2164,1,'kyo/bench/Bench.forkKyo')
f(16,0,212,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,212,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,212,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,212,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3e9f8')
f(16,212,83,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,212,83,2,'kyo.bench.Bench$$anon$1')
f(16,295,1385,1,'kyo/bench/Bench.runLoop$2')
f(17,295,704,1,'kyo/bench/Bench$$anon$1.apply')
f(18,295,53,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,295,53,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c82da8.apply')
f(20,295,53,1,'kyo/bench/Bench.$anonfun$2')
f(21,295,53,1,'kyo/concurrent/fibers$Fiber.block')
f(22,295,53,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,348,651,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,348,651,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,348,651,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(21,348,651,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,348,97,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,445,358,2,'kyo.concurrent.scheduler.IOTask')
f(22,803,195,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,803,195,2,'kyo.concurrent.fibers$Fiber')
f(22,998,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,998,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,998,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.poll')
f(25,998,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.switchToNextConsumerChunkAndPoll')
f(26,998,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.moveToNextConsumerChunk')
f(27,998,1,1,'org/jctools/queues/SpscArrayQueue.offer')
f(28,998,1,2,'java.lang.String')
f(17,999,681,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,999,681,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,999,681,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,999,681,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,999,324,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,999,324,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,999,95,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,1094,229,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,1094,229,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,1323,122,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,1445,235,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,1445,235,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,1445,235,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,1680,484,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,1680,132,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1680,132,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1680,132,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1680,132,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(17,1812,220,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,1812,220,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,2032,132,1,'kyo/locals$Locals$.save')
f(18,2032,132,2,'kyo.locals$Locals$$anon$3')
f(4,2164,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,2164,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,2164,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,2164,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,2164,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,2164,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,2164,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,2164,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,2175,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e5f8.run')
f(5,2175,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,2175,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,2175,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,2175,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,2175,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,2175,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,2175,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$70+0x0000000800d4bd48')
f(4,2186,8832,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,2186,8832,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,2186,8832,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,2186,8395,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,2186,8395,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,2186,4269,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,2186,1136,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,2186,187,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(12,2186,187,1,'kyo/bench/InterruptBench$$Lambda$57.0x0000000800d45690.apply')
f(13,2186,187,1,'kyo/bench/InterruptBench.$anonfun$2')
f(14,2186,187,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(15,2186,187,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(16,2186,187,2,'kyo.concurrent.fibers$Fiber$$anon$11')
f(11,2373,949,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,2373,949,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,2373,949,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(14,2373,949,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,2373,189,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,2562,534,2,'kyo.concurrent.scheduler.IOTask')
f(15,3096,226,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,3096,226,2,'kyo.concurrent.fibers$Fiber')
f(10,3322,1150,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(11,3322,1150,2,'kyo.bench.InterruptBench$$anon$3')
f(10,4472,658,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,4472,479,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(12,4472,479,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$61.0x0000000800d49660.apply')
f(13,4472,479,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$_$$anonfun$adapted$1')
f(14,4472,479,1,'kyo/concurrent/fibers$.$anonfun$3')
f(15,4472,239,2,'kyo.concurrent.fibers$Fiber')
f(15,4711,240,1,'kyo/concurrent/fibers$Fiber.join')
f(16,4711,240,1,'kyo/concurrent/fibers$Fibers.get')
f(17,4711,240,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(18,4711,240,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(11,4951,179,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(12,4951,179,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(13,4951,179,1,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10')
f(14,4951,179,2,'kyo.concurrent.fibers$Fiber$$anon$13$$anon$14')
f(10,5130,1325,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,5130,1325,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(12,5130,323,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(13,5130,323,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(14,5130,323,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(15,5130,181,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$60+0x0000000800d49150')
f(15,5311,142,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$61+0x0000000800d49660')
f(12,5453,308,2,'kyo.concurrent.scheduler.IOPromise')
f(12,5761,370,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(13,5761,370,2,'kyo.concurrent.fibers$$anon$12')
f(12,6131,324,1,'kyo/concurrent/fibers$Fiber.interrupt')
f(13,6131,324,2,'kyo.concurrent.fibers$Fiber$$anon$13')
f(9,6455,3,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,6455,3,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,6455,3,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e9f8.apply')
f(12,6455,3,1,'kyo/bench/Bench.$anonfun$1')
f(13,6455,3,1,'kyo/bench/InterruptBench.kyoBenchFiber')
f(14,6455,3,1,'kyo/bench/InterruptBench.iterate$2')
f(15,6455,1,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(16,6455,1,2,'kyo.bench.InterruptBench$$anon$2')
f(15,6456,2,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(16,6456,2,2,'kyo.bench.InterruptBench$$anon$3')
f(9,6458,3147,1,'kyo/concurrent/scheduler/IOTask.finalize$1')
f(10,6458,3147,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$60.0x0000000800d49150.apply$mcV$sp')
f(11,6458,3147,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1')
f(12,6458,3147,1,'kyo/concurrent/fibers$.loop$9')
f(13,6458,3147,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(14,6458,3147,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(15,6458,3147,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,6458,3147,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,6458,3147,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,6458,3147,1,'scala/runtime/function/JProcedure1.apply')
f(19,6458,3147,1,'scala/runtime/function/JProcedure1.apply')
f(20,6458,3147,1,'kyo/concurrent/scheduler/IOTask$$Lambda$68.0x0000000800d4b940.applyVoid')
f(21,6458,3147,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(22,6458,527,2,'kyo.concurrent.scheduler.IOTask')
f(22,6985,546,1,'kyo/concurrent/scheduler/IOPromise.become')
f(23,6985,546,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(24,6985,163,1,'kyo/concurrent/scheduler/IOPromise$Linked$.apply')
f(25,6985,163,2,'kyo.concurrent.scheduler.IOPromise$Linked')
f(24,7148,383,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(25,7148,383,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(26,7148,383,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(27,7148,383,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(22,7531,2074,1,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1')
f(23,7531,2074,1,'kyo/concurrent/scheduler/IOTask$$Lambda$69.0x0000000800d4e000.apply')
f(24,7531,2074,1,'kyo/concurrent/scheduler/IOTask.$anonfun$1')
f(25,7531,2074,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(26,7531,2074,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(27,7531,2074,1,'kyo/bench/InterruptBench$$Lambda$58.0x0000000800d48000.apply')
f(28,7531,2074,1,'kyo/bench/InterruptBench.$anonfun$adapted$1')
f(29,7531,2074,1,'kyo/bench/InterruptBench.$anonfun$3')
f(30,7531,2074,1,'kyo/bench/InterruptBench.iterate$2')
f(31,7531,466,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(32,7531,211,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(33,7531,211,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,7531,211,2,'kyo.bench.InterruptBench$$Lambda$56+0x0000000800d47cc8')
f(32,7742,255,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(33,7742,255,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,7742,255,2,'kyo.bench.InterruptBench$$Lambda$58+0x0000000800d48000')
f(31,7997,431,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(32,7997,431,2,'kyo.bench.InterruptBench$$anon$2')
f(31,8428,355,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(32,8428,355,2,'kyo.bench.InterruptBench$$anon$3')
f(31,8783,822,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(32,8783,218,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(33,8783,218,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(34,8783,218,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(35,8783,218,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(32,9001,385,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(33,9001,385,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(32,9386,219,1,'kyo/locals$Locals$.save')
f(33,9386,219,2,'kyo.locals$Locals$$anon$3')
f(9,9605,449,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,9605,170,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,9605,170,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,9605,170,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,9605,170,2,'kyo.concurrent.scheduler.IOTask$$Lambda$62+0x0000000800d4a448')
f(10,9775,279,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,9775,279,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(9,10054,527,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,10054,240,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,10054,240,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,10054,240,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,10054,240,2,'kyo.concurrent.scheduler.IOTask$$Lambda$68+0x0000000800d4b940')
f(10,10294,287,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,10294,287,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,10581,436,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,10581,436,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,10581,436,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,10581,436,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,10581,436,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d47148')
f(7,11017,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,11017,1,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,11017,1,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,11017,1,1,'scala/runtime/ObjectRef.create')
f(11,11017,1,2,'scala.runtime.ObjectRef')
f(1,11018,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,11018,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,11018,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,11018,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,11018,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,11018,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,11018,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,11018,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,11018,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,11018,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,11018,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,11018,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,11018,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,11021,1,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,11021,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,11021,1,1,'java/lang/ClassLoader.loadClass')
f(10,11021,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,11021,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,11021,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,11021,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,11021,1,1,'jdk/internal/loader/URLClassPath.getResource')
f(15,11021,1,1,'jdk/internal/loader/URLClassPath$JarLoader.getResource')
f(16,11021,1,1,'java/util/jar/JarFile.getJarEntry')
f(17,11021,1,1,'java/util/jar/JarFile.getEntry')
f(18,11021,1,1,'java/util/zip/ZipFile.getEntry')
f(19,11021,1,1,'java/util/zip/ZipFile$Source.getEntryPos')
f(20,11021,1,1,'java/util/zip/ZipCoder$UTF8ZipCoder.toString')
f(21,11021,1,1,'java/lang/System$2.newStringUTF8NoRepl')
f(22,11021,1,1,'java/lang/String.newStringUTF8NoRepl')
f(23,11021,1,1,'java/util/Arrays.copyOfRange')
f(24,11021,1,2,'byte[]')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 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,291,3,'all')
f(1,0,4,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,4,3,'thread_native_entry(Thread*)')
f(3,0,4,4,'Thread::call_run()')
f(4,0,4,4,'JavaThread::thread_main_inner()')
f(5,0,4,4,'CompileBroker::compiler_thread_loop()')
f(6,0,4,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,4,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,4,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,3,4,'Compile::Code_Gen()')
f(10,0,3,4,'PhaseChaitin::Register_Allocate()')
f(11,1,1,4,'PhaseChaitin::post_allocate_copy_removal()')
f(12,1,1,4,'PhaseChaitin::elide_copy(Node*, int, Block*, Node_List&, Node_List&, bool)')
f(11,2,1,4,'PhaseLive::compute(unsigned int)')
f(9,3,1,4,'Compile::Optimize()')
f(10,3,1,4,'PhaseIterGVN::optimize()')
f(11,3,1,4,'PhaseIterGVN::transform_old(Node*)')
f(12,3,1,4,'RegionNode::Ideal(PhaseGVN*, bool)')
f(13,3,1,4,'PhaseIterGVN::subsume_node(Node*, Node*)')
f(14,3,1,4,'PhaseIterGVN::remove_globally_dead_node(Node*)')
f(15,3,1,4,'Node::replace_edge(Node*, Node*, PhaseGVN*)')
f(16,3,1,4,'Node::set_req_X(unsigned int, Node*, PhaseIterGVN*)')
f(1,4,2,3,'[unknown_Java]')
f(2,4,1,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(2,5,1,1,'kyo/ios$KyoIO.effect')
f(1,6,285,1,'java/lang/Thread.run')
f(2,6,285,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,6,285,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,6,6,1,'java/util/concurrent/FutureTask.run')
f(5,6,6,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,6,6,1,'java/util/concurrent/FutureTask.run')
f(7,6,6,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,6,6,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,6,6,1,'java/lang/reflect/Method.invoke')
f(10,6,6,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,6,6,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,6,6,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,6,6,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,6,6,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub',0,0,1)
f(15,7,5,1,'kyo/bench/Bench.forkKyo')
f(16,7,5,1,'kyo/bench/Bench.runLoop$2')
f(17,7,2,1,'kyo/bench/Bench$$anon$1.apply')
f(18,7,2,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,7,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,7,2,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(21,7,2,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,7,2,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,7,2,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,7,2,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,7,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,7,2,1,'jdk/internal/misc/Unsafe.unpark')
f(27,7,2,3,'pthread_cond_signal')
f(28,7,2,5,'entry_SYSCALL_64_after_hwframe')
f(29,7,2,5,'do_syscall_64')
f(30,7,2,5,'__x64_sys_futex')
f(31,7,2,5,'do_futex')
f(32,7,2,5,'futex_wake')
f(33,7,2,5,'wake_up_q')
f(34,7,2,5,'_raw_spin_unlock_irqrestore')
f(17,9,3,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,9,3,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,9,3,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,9,3,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,9,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,9,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,9,3,1,'java/util/concurrent/locks/LockSupport.park')
f(24,9,3,1,'jdk/internal/misc/Unsafe.park')
f(25,10,2,3,'[unknown]')
f(26,10,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,10,2,5,'entry_SYSCALL_64_after_hwframe')
f(28,10,2,5,'do_syscall_64')
f(29,10,2,5,'__x64_sys_futex')
f(30,10,2,5,'do_futex')
f(31,10,2,5,'futex_wait')
f(32,10,2,5,'futex_wait_queue_me')
f(33,10,2,5,'schedule')
f(34,10,2,5,'__schedule')
f(35,10,2,5,'finish_task_switch.isra.0')
f(4,12,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.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,278,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,13,278,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,13,278,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,21,4,2,'kyo/concurrent/scheduler/IOTask.reenqueue',4,0,0)
f(8,21,4,2,'kyo/concurrent/scheduler/IOTask.curr',4,0,0)
f(7,25,220,1,'kyo/concurrent/scheduler/IOTask.run',12,0,0)
f(8,28,7,2,'kyo/concurrent/scheduler/Coordinator$.tick',7,0,0)
f(8,35,2,2,'kyo/concurrent/scheduler/IOTask.curr',2,0,0)
f(8,37,208,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,46,99,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,55,34,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,56,3,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1',3,0,0)
f(12,57,2,2,'kyo/bench/InterruptBench$$Lambda$57.0x0000000800d45460.apply',2,0,0)
f(13,57,2,2,'kyo/bench/InterruptBench.$anonfun$2',2,0,0)
f(14,57,2,2,'kyo/concurrent/fibers$Fiber.interruptAwait',2,0,0)
f(15,57,2,2,'kyo/concurrent/fibers$Fiber.interruptAwait',2,0,0)
f(11,59,30,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',2,0,0)
f(12,61,28,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,64,20,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply',20,0,0)
f(14,64,20,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',20,0,0)
f(15,68,1,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',1,0,0)
f(16,68,1,2,'kyo/ios$KyoIO.<init>',1,0,0)
f(15,69,11,2,'kyo/concurrent/scheduler/IOTask.<init>',11,0,0)
f(16,71,1,2,'kyo/concurrent/scheduler/Coordinator$.tick',1,0,0)
f(16,72,8,2,'kyo/concurrent/scheduler/IOPromise.<init>',8,0,0)
f(17,72,8,2,'kyo/concurrent/scheduler/IOPromise.<init>',8,0,0)
f(18,74,6,2,'java/util/concurrent/atomic/AtomicReference.<init>',6,0,0)
f(15,80,4,2,'kyo/concurrent/scheduler/Scheduler$.schedule',4,0,0)
f(13,84,5,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',5,0,0)
f(14,88,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(15,88,1,2,'kyo/ios$KyoIO.value',1,0,0)
f(10,89,21,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',17,0,0)
f(11,95,15,2,'kyo/bench/InterruptBench$$anon$3.<init>',11,0,0)
f(12,96,14,2,'kyo/core$internal$KyoCont.<init>',10,0,0)
f(13,102,2,6,'kyo/core$internal$KyoCont.effect',0,2,0)
f(13,104,1,6,'kyo/core$internal$KyoCont.value',0,1,0)
f(13,105,1,6,'kyo/core$internal$KyoRoot.effect',0,1,0)
f(13,106,4,3,'vtable stub')
f(10,110,20,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,114,4,2,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1',4,0,0)
f(12,114,4,2,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$61.0x0000000800d494e8.apply',4,0,0)
f(13,114,4,2,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$_$$anonfun$adapted$1',4,0,0)
f(14,114,4,2,'kyo/concurrent/fibers$.$anonfun$3',4,0,0)
f(15,114,4,2,'kyo/concurrent/fibers$Fiber.join',4,0,0)
f(16,114,1,2,'kyo/concurrent/fibers$Fiber.state',1,0,0)
f(16,115,3,2,'kyo/concurrent/fibers$Fibers.get',3,0,0)
f(17,115,3,2,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1',3,0,0)
f(11,118,12,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',12,0,0)
f(12,118,12,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',12,0,0)
f(13,119,11,2,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10',11,0,0)
f(14,119,11,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',11,0,0)
f(15,119,11,2,'kyo/concurrent/scheduler/IOPromise.complete',11,0,0)
f(16,119,9,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',9,0,0)
f(17,119,9,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',9,0,0)
f(18,119,9,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',9,0,0)
f(16,128,2,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',2,0,0)
f(17,128,2,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',2,0,0)
f(10,130,13,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,130,13,2,'kyo/concurrent/fibers$Fiber$$anon$11.apply',12,0,0)
f(12,134,1,2,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1',1,0,0)
f(13,134,1,2,'kyo/concurrent/fibers$$anon$12.<init>',1,0,0)
f(14,134,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(12,135,6,2,'kyo/concurrent/scheduler/IOPromise.<init>',6,0,0)
f(13,135,6,2,'kyo/concurrent/scheduler/IOPromise.<init>',6,0,0)
f(14,135,6,2,'java/util/concurrent/atomic/AtomicReference.<init>',6,0,0)
f(12,141,2,2,'kyo/concurrent/scheduler/IOTask.ensure',1,0,0)
f(13,141,1,2,'kyo/concurrent/scheduler/IOTask.curr',1,0,0)
f(13,142,1,1,'scala/runtime/BoxesRunTime.equals')
f(14,142,1,1,'scala/runtime/BoxesRunTime.equals2')
f(15,142,1,1,'java/lang/Object.equals')
f(10,143,2,3,'vtable stub')
f(9,145,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,145,1,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',1,0,0)
f(11,145,1,2,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e9f8.apply',1,0,0)
f(12,145,1,2,'kyo/bench/Bench.$anonfun$1',1,0,0)
f(13,145,1,2,'kyo/bench/InterruptBench.kyoBenchFiber',1,0,0)
f(14,145,1,2,'kyo/bench/InterruptBench.iterate$2',1,0,0)
f(15,145,1,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',1,0,0)
f(16,145,1,2,'kyo/bench/InterruptBench$$anon$3.<init>',1,0,0)
f(17,145,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(9,146,67,1,'kyo/concurrent/scheduler/IOTask.finalize$1',7,0,0)
f(10,146,66,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$60.0x0000000800d48fd8.apply$mcV$sp',6,0,0)
f(11,146,66,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1',6,0,0)
f(12,146,66,1,'kyo/concurrent/fibers$.loop$9',6,0,0)
f(13,146,62,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',2,0,0)
f(14,146,62,1,'kyo/concurrent/scheduler/IOPromise.complete',2,0,0)
f(15,146,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(16,146,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(17,146,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(15,147,61,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush',1,0,0)
f(16,147,61,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',1,0,0)
f(17,148,60,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,148,60,1,'scala/runtime/function/JProcedure1.apply')
f(19,148,60,1,'scala/runtime/function/JProcedure1.apply')
f(20,148,60,2,'kyo/concurrent/scheduler/IOTask$$Lambda$66.0x0000000800d4b248.applyVoid',37,0,0)
f(21,149,59,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',36,0,0)
f(22,152,6,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',6,0,0)
f(23,152,6,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',6,0,0)
f(24,152,5,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',5,0,0)
f(24,157,1,2,'kyo/concurrent/scheduler/IOTask$$Lambda$67.0x0000000800d4b650.<init>',1,0,0)
f(22,158,2,2,'kyo/concurrent/scheduler/IOTask.<init>',2,0,0)
f(23,159,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(22,160,47,2,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1',24,0,0)
f(23,160,47,2,'kyo/concurrent/scheduler/IOTask$$Lambda$67.0x0000000800d4b650.apply',24,0,0)
f(24,160,47,2,'kyo/concurrent/scheduler/IOTask.$anonfun$1',24,0,0)
f(25,160,47,2,'kyo/bench/InterruptBench$$anon$3.apply',24,0,0)
f(26,160,45,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',22,0,0)
f(27,161,23,1,'kyo/bench/InterruptBench$$Lambda$58.0x0000000800d44a30.apply')
f(28,161,23,1,'kyo/bench/InterruptBench.$anonfun$adapted$1')
f(29,161,23,1,'kyo/bench/InterruptBench.$anonfun$3')
f(30,161,23,1,'kyo/bench/InterruptBench.iterate$2')
f(31,161,6,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1',6,0,0)
f(31,167,11,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',9,0,0)
f(32,172,6,2,'kyo/bench/InterruptBench$$anon$3.<init>',4,0,0)
f(33,172,6,2,'kyo/core$internal$KyoCont.<init>',4,0,0)
f(34,176,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(34,177,1,6,'kyo/core$internal$KyoCont.value',0,1,0)
f(31,178,6,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(32,178,6,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(33,180,4,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply',4,0,0)
f(34,180,4,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',4,0,0)
f(35,182,1,2,'kyo/concurrent/scheduler/IOTask.<init>',1,0,0)
f(36,182,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(37,182,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(38,182,1,2,'java/util/concurrent/atomic/AtomicReference.<init>',1,0,0)
f(35,183,1,2,'kyo/concurrent/scheduler/Scheduler$.schedule',1,0,0)
f(36,183,1,2,'kyo/concurrent/scheduler/Worker$.apply',1,0,0)
f(27,184,20,2,'kyo/bench/InterruptBench$$anon$3.<init>',20,0,0)
f(28,190,14,2,'kyo/core$internal$KyoCont.<init>',14,0,0)
f(27,204,1,2,'scala/runtime/BoxesRunTime.unboxToBoolean',1,0,0)
f(26,205,2,2,'kyo/concurrent/scheduler/IOTask.apply',2,0,0)
f(22,207,1,2,'kyo/concurrent/scheduler/Scheduler$.schedule',1,0,0)
f(23,207,1,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',1,0,0)
f(24,207,1,2,'kyo/concurrent/scheduler/Queue.offer',1,0,0)
f(25,207,1,2,'kyo/concurrent/scheduler/Queue.tryModify',1,0,0)
f(26,207,1,2,'scala/Function0.apply$mcZ$sp',1,0,0)
f(27,207,1,2,'kyo/concurrent/scheduler/Queue$$Lambda$54.0x0000000800d43cd0.apply',1,0,0)
f(28,207,1,2,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1',1,0,0)
f(29,207,1,2,'kyo/concurrent/scheduler/Queue.items_$eq',1,0,0)
f(13,208,4,2,'scala/runtime/BoxesRunTime.boxToBoolean',4,0,0)
f(10,212,1,2,'kyo/concurrent/scheduler/IOTask.ensures_$eq',1,0,0)
f(9,213,3,2,'kyo/concurrent/scheduler/IOTask.loop$2',3,0,0)
f(10,213,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(11,213,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(12,213,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(10,214,2,2,'kyo/concurrent/scheduler/IOPromise$Pending.add',2,0,0)
f(9,216,9,1,'kyo/concurrent/scheduler/IOTask.loop$5',1,0,0)
f(10,219,4,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',4,0,0)
f(11,219,4,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',4,0,0)
f(12,219,4,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',4,0,0)
f(10,223,2,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',2,0,0)
f(11,223,2,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',2,0,0)
f(12,223,2,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',2,0,0)
f(9,225,17,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,225,17,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',9,0,0)
f(11,225,17,2,'kyo/concurrent/scheduler/IOPromise.complete',9,0,0)
f(12,225,17,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',9,0,0)
f(13,225,17,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',9,0,0)
f(14,232,10,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run',2,0,0)
f(15,232,2,3,'itable stub')
f(15,234,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,234,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,234,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,234,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,234,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,234,2,1,'jdk/internal/misc/Unsafe.unpark')
f(21,234,2,3,'pthread_cond_signal')
f(22,234,2,5,'entry_SYSCALL_64_after_hwframe')
f(23,234,2,5,'do_syscall_64')
f(24,234,2,5,'__x64_sys_futex')
f(25,234,2,5,'do_futex')
f(26,234,2,5,'futex_wake')
f(27,235,1,5,'wake_up_q')
f(28,235,1,5,'_raw_spin_unlock_irqrestore')
f(15,236,6,1,'scala/runtime/function/JProcedure1.apply')
f(16,241,1,1,'scala/runtime/function/JProcedure1.apply')
f(17,241,1,2,'kyo/concurrent/scheduler/IOTask$$Lambda$66.0x0000000800d4b248.applyVoid',1,0,0)
f(18,241,1,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',1,0,0)
f(19,241,1,2,'kyo/concurrent/scheduler/Scheduler$.schedule',1,0,0)
f(20,241,1,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',1,0,0)
f(21,241,1,2,'kyo/concurrent/scheduler/Queue.offer',1,0,0)
f(22,241,1,2,'kyo/concurrent/scheduler/Queue.tryModify',1,0,0)
f(23,241,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(9,242,2,6,'kyo/core$internal$KyoCont.effect',0,2,0)
f(9,244,1,3,'vtable stub')
f(7,245,39,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,245,39,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,245,25,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',25,0,0)
f(10,256,14,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',14,0,0)
f(11,260,10,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',10,0,0)
f(12,262,8,2,'java/util/Objects.requireNonNull',8,0,0)
f(9,270,14,2,'kyo/concurrent/scheduler/Queue$$Lambda$59.0x0000000800d48d18.apply',14,0,0)
f(10,270,14,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',14,0,0)
f(11,271,13,2,'scala/collection/mutable/PriorityQueue.dequeue',13,0,0)
f(12,281,2,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',2,0,0)
f(12,283,1,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',1,0,0)
f(7,284,5,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,284,1,1,'java/util/AbstractQueue.add')
f(9,284,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.offer')
f(10,284,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.producerChunkForIndex')
f(11,284,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.appendNextChunks')
f(12,284,1,4,'SharedRuntime::handle_wrong_method(JavaThread*)')
f(13,284,1,4,'SharedRuntime::reresolve_call_site(JavaThread*)')
f(14,284,1,4,'SharedRuntime::find_callee_method(JavaThread*)')
f(15,284,1,4,'SharedRuntime::find_callee_info_helper(vframeStream&, Bytecodes::Code&, CallInfo&, JavaThread*)')
f(8,285,4,1,'kyo/concurrent/scheduler/Worker.park')
f(9,285,4,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,285,4,1,'jdk/internal/misc/Unsafe.park')
f(11,285,1,3,'Unsafe_Park')
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(11,286,3,3,'[unknown]')
f(12,286,3,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,286,3,5,'entry_SYSCALL_64_after_hwframe')
f(14,286,3,5,'do_syscall_64')
f(15,286,3,5,'__x64_sys_futex')
f(16,286,3,5,'do_futex')
f(17,286,3,5,'futex_wait')
f(18,286,2,5,'futex_wait_queue_me')
f(19,286,2,5,'schedule')
f(20,286,2,5,'__schedule')
f(21,286,2,5,'finish_task_switch.isra.0')
f(18,288,1,5,'futex_wait_setup')
f(7,289,2,2,'kyo/concurrent/scheduler/Worker.queue',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: 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,10384,3,'all')
f(1,0,10380,1,'java/lang/Thread.run')
f(2,0,10380,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,10380,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,2039,1,'java/util/concurrent/FutureTask.run')
f(5,0,2039,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,2039,1,'java/util/concurrent/FutureTask.run')
f(7,0,2039,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,2039,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,2039,1,'java/lang/reflect/Method.invoke')
f(10,0,2039,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,2039,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,2039,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,2039,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,2038,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,2038,1,'kyo/bench/Bench.syncKyo')
f(16,0,989,1,'kyo/bench/Bench.runLoop$1')
f(17,0,520,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,520,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,520,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,520,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,283,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,283,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,128,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,128,155,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,128,155,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,283,159,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,442,78,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,442,78,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,442,78,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,520,469,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,520,346,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,520,346,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,520,346,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,520,278,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,520,278,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,520,278,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(24,520,278,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,520,1,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(25,521,251,2,'kyo.concurrent.scheduler.IOTask')
f(25,772,26,1,'kyo/concurrent/fibers$Fiber$.promise')
f(26,772,26,2,'kyo.concurrent.fibers$Fiber')
f(21,798,68,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,798,68,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c82da8.apply')
f(23,798,68,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,798,68,1,'kyo/concurrent/fibers$Fiber.join')
f(25,798,68,1,'kyo/concurrent/fibers$Fibers.get')
f(26,798,68,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,798,68,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,866,123,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,866,123,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c835a8.apply')
f(20,866,123,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,866,123,1,'kyo/concurrent/fibers$Fiber.block')
f(22,866,123,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,989,1049,1,'kyo/bench/InterruptBench.kyoBench')
f(17,989,105,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,989,105,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,989,105,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,989,105,2,'kyo.bench.InterruptBench$$Lambda$37+0x0000000800c3e9f8')
f(17,1094,486,1,'kyo/concurrent/fibers$Fibers.block')
f(18,1094,28,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,1094,28,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,1094,28,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,1094,28,2,'kyo.concurrent.fibers$Fibers$$Lambda$40+0x0000000800c835a8')
f(18,1122,47,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,1122,47,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,1169,291,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,1169,291,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,1460,120,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,1460,120,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,1580,458,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,1580,75,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,1580,75,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,1580,75,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,1580,75,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c82da8')
f(18,1655,296,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,1655,44,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,1655,44,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,1655,44,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,1655,44,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(19,1699,226,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,1699,226,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(19,1925,26,1,'kyo/locals$Locals$.save')
f(20,1925,26,2,'kyo.locals$Locals$$anon$3')
f(18,1951,87,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,1951,87,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(14,2038,1,1,'org/openjdk/jmh/results/ThroughputResult.<init>')
f(15,2038,1,1,'java/lang/StringBuilder.toString')
f(16,2038,1,1,'java/lang/StringLatin1.newString')
f(17,2038,1,2,'java.lang.String')
f(4,2039,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec28.run')
f(5,2039,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,2039,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,2039,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,2039,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,2039,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,2039,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,2039,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,2050,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1ee50.run')
f(5,2050,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,2050,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,2050,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,2050,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,2050,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,2050,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$69+0x0000000800d4e7d8')
f(4,2061,8319,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23cb0.run')
f(5,2061,8319,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,2061,8319,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,2061,7935,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,2061,7935,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,2061,4017,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,2061,1155,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,2061,293,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(12,2061,293,1,'kyo/bench/InterruptBench$$Lambda$58.0x0000000800d44400.apply')
f(13,2061,293,1,'kyo/bench/InterruptBench.$anonfun$2')
f(14,2061,293,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(15,2061,293,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(16,2061,293,2,'kyo.concurrent.fibers$Fiber$$anon$11')
f(11,2354,862,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,2354,862,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,2354,862,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(14,2354,862,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,2354,214,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,2568,508,2,'kyo.concurrent.scheduler.IOTask')
f(15,3076,140,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,3076,140,2,'kyo.concurrent.fibers$Fiber')
f(10,3216,984,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(11,3216,984,2,'kyo.bench.InterruptBench$$anon$3')
f(10,4200,630,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,4200,467,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(12,4200,467,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$62.0x0000000800d4a140.apply')
f(13,4200,467,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$_$$anonfun$adapted$1')
f(14,4200,467,1,'kyo/concurrent/fibers$.$anonfun$3')
f(15,4200,209,2,'kyo.concurrent.fibers$Fiber')
f(15,4409,258,1,'kyo/concurrent/fibers$Fiber.join')
f(16,4409,258,1,'kyo/concurrent/fibers$Fibers.get')
f(17,4409,258,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(18,4409,258,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(11,4667,163,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(12,4667,163,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(13,4667,163,1,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10')
f(14,4667,163,2,'kyo.concurrent.fibers$Fiber$$anon$13$$anon$14')
f(10,4830,1248,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,4830,1248,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(12,4830,419,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(13,4830,419,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(14,4830,419,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(15,4830,207,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$61+0x0000000800d49c30')
f(15,5037,212,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$62+0x0000000800d4a140')
f(12,5249,270,2,'kyo.concurrent.scheduler.IOPromise')
f(12,5519,345,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(13,5519,345,2,'kyo.concurrent.fibers$$anon$12')
f(12,5864,214,1,'kyo/concurrent/fibers$Fiber.interrupt')
f(13,5864,214,2,'kyo.concurrent.fibers$Fiber$$anon$13')
f(9,6078,2,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,6078,2,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,6078,2,1,'kyo/bench/InterruptBench$$Lambda$37.0x0000000800c3e9f8.apply')
f(12,6078,2,1,'kyo/bench/InterruptBench.kyoBench$$anonfun$1')
f(13,6078,2,1,'kyo/bench/InterruptBench.kyoBenchFiber')
f(14,6078,2,1,'kyo/bench/InterruptBench.iterate$2')
f(15,6078,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,6078,1,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(17,6078,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,6078,1,2,'kyo.bench.InterruptBench$$Lambda$59+0x0000000800d488b0')
f(15,6079,1,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(16,6079,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(17,6079,1,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(9,6080,2952,1,'kyo/concurrent/scheduler/IOTask.finalize$1')
f(10,6080,2952,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$61.0x0000000800d49c30.apply$mcV$sp')
f(11,6080,2952,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1')
f(12,6080,2952,1,'kyo/concurrent/fibers$.loop$9')
f(13,6080,2952,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(14,6080,2952,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(15,6080,2952,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,6080,2952,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,6080,2952,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,6080,2952,1,'scala/runtime/function/JProcedure1.apply')
f(19,6080,2952,1,'scala/runtime/function/JProcedure1.apply')
f(20,6080,2952,1,'kyo/concurrent/scheduler/IOTask$$Lambda$67.0x0000000800d4e000.applyVoid')
f(21,6080,2952,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(22,6080,262,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(23,6080,262,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(24,6080,262,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(25,6080,262,2,'kyo.concurrent.scheduler.IOTask$$Lambda$68+0x0000000800d4e408')
f(22,6342,512,2,'kyo.concurrent.scheduler.IOTask')
f(22,6854,387,1,'kyo/concurrent/scheduler/IOPromise.become')
f(23,6854,387,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(24,6854,139,1,'kyo/concurrent/scheduler/IOPromise$Linked$.apply')
f(25,6854,139,2,'kyo.concurrent.scheduler.IOPromise$Linked')
f(24,6993,248,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(25,6993,248,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(26,6993,248,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(27,6993,248,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(22,7241,1791,1,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1')
f(23,7241,1791,1,'kyo/concurrent/scheduler/IOTask$$Lambda$68.0x0000000800d4e408.apply')
f(24,7241,1791,1,'kyo/concurrent/scheduler/IOTask.$anonfun$1')
f(25,7241,1791,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(26,7241,1791,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(27,7241,1791,1,'kyo/bench/InterruptBench$$Lambda$59.0x0000000800d488b0.apply')
f(28,7241,1791,1,'kyo/bench/InterruptBench.$anonfun$adapted$1')
f(29,7241,1791,1,'kyo/bench/InterruptBench.$anonfun$3')
f(30,7241,1791,1,'kyo/bench/InterruptBench.iterate$2')
f(31,7241,392,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(32,7241,202,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(33,7241,202,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,7241,202,2,'kyo.bench.InterruptBench$$Lambda$57+0x0000000800d45950')
f(32,7443,190,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(33,7443,190,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,7443,190,2,'kyo.bench.InterruptBench$$Lambda$59+0x0000000800d488b0')
f(31,7633,350,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(32,7633,350,2,'kyo.bench.InterruptBench$$anon$2')
f(31,7983,340,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(32,7983,340,2,'kyo.bench.InterruptBench$$anon$3')
f(31,8323,709,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(32,8323,244,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(33,8323,244,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(34,8323,244,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(35,8323,244,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(32,8567,320,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(33,8567,320,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(32,8887,145,1,'kyo/locals$Locals$.save')
f(33,8887,145,2,'kyo.locals$Locals$$anon$3')
f(9,9032,419,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,9032,154,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,9032,154,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,9032,154,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,9032,154,2,'kyo.concurrent.scheduler.IOTask$$Lambda$63+0x0000000800d4af28')
f(10,9186,265,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,9186,265,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(9,9451,545,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,9451,261,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,9451,261,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,9451,261,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,9451,261,2,'kyo.concurrent.scheduler.IOTask$$Lambda$67+0x0000000800d4e000')
f(10,9712,284,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,9712,284,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,9996,384,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,9996,384,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,9996,384,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,9996,384,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,9996,384,2,'kyo.concurrent.scheduler.Queue$$Lambda$56+0x0000000800d45000')
f(1,10380,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,10380,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,10380,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,10380,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,10380,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,10380,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,10380,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,10380,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,10380,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,10380,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,10380,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,10380,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,10380,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,10383,1,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,10383,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,10383,1,1,'java/lang/ClassLoader.loadClass')
f(10,10383,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,10383,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,10383,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,10383,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,10383,1,1,'jdk/internal/loader/URLClassPath.getResource')
f(15,10383,1,1,'jdk/internal/loader/URLClassPath$JarLoader.getResource')
f(16,10383,1,1,'java/util/jar/JarFile.getJarEntry')
f(17,10383,1,1,'java/util/jar/JarFile.getEntry')
f(18,10383,1,1,'java/util/zip/ZipFile.getEntry')
f(19,10383,1,1,'java/util/zip/ZipFile$Source.getEntryPos')
f(20,10383,1,1,'java/util/zip/ZipCoder$UTF8ZipCoder.toString')
f(21,10383,1,1,'java/lang/System$2.newStringUTF8NoRepl')
f(22,10383,1,1,'java/lang/String.newStringUTF8NoRepl')
f(23,10383,1,1,'java/util/Arrays.copyOfRange')
f(24,10383,1,2,'byte[]')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 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,291,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,2,4,'Compile::Code_Gen()')
f(10,0,2,4,'PhaseChaitin::Register_Allocate()')
f(11,0,1,4,'PhaseAggressiveCoalesce::insert_copies(Matcher&)')
f(11,1,1,4,'PhaseLive::compute(unsigned int)')
f(9,2,1,4,'Compile::Optimize()')
f(10,2,1,4,'PhaseIterGVN::optimize()')
f(11,2,1,4,'PhaseIterGVN::transform_old(Node*)')
f(12,2,1,4,'PhiNode::is_diamond_phi(bool) const')
f(1,3,8,3,'[unknown_Java]')
f(2,3,2,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(2,5,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(2,7,1,1,'kyo/concurrent/scheduler/IOPromise.onComplete')
f(2,8,1,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(2,9,2,6,'kyo/core$internal$KyoCont.effect',0,2,0)
f(1,11,280,1,'java/lang/Thread.run')
f(2,11,280,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,11,280,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,11,6,1,'java/util/concurrent/FutureTask.run')
f(5,11,6,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,11,6,1,'java/util/concurrent/FutureTask.run')
f(7,11,6,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,11,6,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,11,6,1,'java/lang/reflect/Method.invoke')
f(10,11,6,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,11,6,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,11,6,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,11,6,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,11,6,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,11,6,1,'kyo/bench/Bench.syncKyo')
f(16,11,5,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(27,11,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,11,1,5,'do_syscall_64')
f(29,11,1,5,'__x64_sys_futex')
f(30,11,1,5,'do_futex')
f(31,11,1,5,'futex_wait')
f(32,11,1,5,'futex_wait_queue_me')
f(33,11,1,5,'schedule')
f(34,11,1,5,'__schedule')
f(35,11,1,5,'finish_task_switch.isra.0')
f(17,12,4,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,12,4,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,12,4,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,12,4,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,12,4,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,12,4,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,12,4,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(24,12,4,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,12,4,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,12,4,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,12,4,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(28,12,4,1,'java/util/concurrent/locks/LockSupport.unpark')
f(29,12,4,1,'jdk/internal/misc/Unsafe.unpark')
f(30,12,1,3,'Unsafe_Unpark')
f(31,12,1,3,'pthread_mutex_lock')
f(30,13,3,3,'pthread_cond_signal')
f(31,13,3,5,'entry_SYSCALL_64_after_hwframe')
f(32,13,3,5,'do_syscall_64')
f(33,13,3,5,'__x64_sys_futex')
f(34,13,3,5,'do_futex')
f(35,13,3,5,'futex_wake')
f(36,13,3,5,'wake_up_q')
f(37,13,3,5,'_raw_spin_unlock_irqrestore')
f(16,16,1,1,'kyo/bench/InterruptBench.kyoBench')
f(17,16,1,1,'kyo/concurrent/fibers$Fibers.block')
f(18,16,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,16,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(20,16,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(21,16,1,4,'MemAllocator::allocate() const')
f(22,16,1,4,'MemAllocator::Allocation::notify_allocation_jvmti_sampler()')
f(4,17,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec28.run')
f(5,17,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,17,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,17,1,1,'java/lang/Thread.sleep')
f(8,17,1,3,'[unknown]')
f(9,17,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,17,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,17,1,5,'do_syscall_64')
f(12,17,1,5,'__x64_sys_futex')
f(13,17,1,5,'do_futex')
f(14,17,1,5,'futex_wait')
f(15,17,1,5,'futex_wait_queue_me')
f(16,17,1,5,'schedule')
f(17,17,1,5,'__schedule')
f(18,17,1,5,'finish_task_switch.isra.0')
f(4,18,273,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23cb0.run')
f(5,18,273,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,18,273,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,29,6,2,'kyo/concurrent/scheduler/IOTask.reenqueue',6,0,0)
f(8,29,5,2,'kyo/concurrent/scheduler/IOTask.curr',5,0,0)
f(8,34,1,2,'scala/runtime/BoxesRunTime.equals',1,0,0)
f(7,35,229,1,'kyo/concurrent/scheduler/IOTask.run',9,0,0)
f(8,38,4,2,'kyo/concurrent/scheduler/Coordinator$.tick',4,0,0)
f(8,42,2,2,'kyo/concurrent/scheduler/IOTask.curr',2,0,0)
f(8,44,220,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,48,91,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,50,30,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,53,2,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1',2,0,0)
f(11,55,25,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',2,0,0)
f(12,56,23,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,61,9,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply',9,0,0)
f(14,62,8,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',8,0,0)
f(15,67,1,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',1,0,0)
f(16,67,1,2,'kyo/ios$KyoIO.<init>',1,0,0)
f(15,68,2,2,'kyo/concurrent/scheduler/IOTask.<init>',2,0,0)
f(13,70,9,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',9,0,0)
f(14,75,4,2,'kyo/core$internal$KyoCont.<init>',4,0,0)
f(12,79,1,2,'kyo/locals$Locals$$anon$3.apply',1,0,0)
f(10,80,29,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',19,0,0)
f(11,91,18,2,'kyo/bench/InterruptBench$$anon$3.<init>',8,0,0)
f(12,93,16,2,'kyo/core$internal$KyoCont.<init>',6,0,0)
f(13,97,2,6,'kyo/core$internal$KyoCont.effect',0,2,0)
f(13,99,4,6,'kyo/core$internal$KyoCont.value',0,4,0)
f(13,103,1,6,'kyo/core$internal$KyoRoot.effect',0,1,0)
f(13,104,2,6,'kyo/core$internal$KyoRoot.value',0,2,0)
f(13,106,1,1,'kyo/ios$KyoIO.effect')
f(13,107,2,3,'vtable stub')
f(10,109,10,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,110,1,2,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1',1,0,0)
f(12,110,1,2,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$62.0x0000000800d49f40.apply',1,0,0)
f(13,110,1,2,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$_$$anonfun$adapted$1',1,0,0)
f(14,110,1,2,'kyo/concurrent/fibers$.$anonfun$3',1,0,0)
f(15,110,1,2,'kyo/concurrent/fibers$Fiber.join',1,0,0)
f(16,110,1,2,'kyo/concurrent/fibers$Fiber.state',1,0,0)
f(11,111,8,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',8,0,0)
f(12,111,8,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',8,0,0)
f(13,111,8,2,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10',8,0,0)
f(14,111,1,2,'java/util/concurrent/atomic/AtomicReference.get',1,0,0)
f(14,112,7,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',7,0,0)
f(15,112,7,2,'kyo/concurrent/scheduler/IOPromise.complete',7,0,0)
f(16,112,6,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',6,0,0)
f(17,112,6,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',6,0,0)
f(18,112,6,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',6,0,0)
f(16,118,1,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',1,0,0)
f(17,118,1,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',1,0,0)
f(10,119,18,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,123,14,2,'kyo/concurrent/fibers$Fiber$$anon$11.apply',13,0,0)
f(12,126,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(13,126,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(14,126,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(12,127,1,2,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1',1,0,0)
f(12,128,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(13,128,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(14,128,1,2,'java/util/concurrent/atomic/AtomicReference.<init>',1,0,0)
f(12,129,8,2,'kyo/concurrent/scheduler/IOTask.ensure',7,0,0)
f(13,130,4,2,'kyo/concurrent/scheduler/IOTask.curr',4,0,0)
f(13,134,2,2,'kyo/concurrent/scheduler/IOTask.ensures_$eq',2,0,0)
f(13,136,1,1,'scala/runtime/BoxesRunTime.equals')
f(14,136,1,1,'scala/runtime/BoxesRunTime.equals2')
f(15,136,1,1,'java/lang/Object.equals')
f(10,137,2,3,'vtable stub')
f(9,139,89,1,'kyo/concurrent/scheduler/IOTask.finalize$1',17,0,0)
f(10,139,89,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$61.0x0000000800d49a30.apply$mcV$sp',17,0,0)
f(11,139,89,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1',17,0,0)
f(12,139,89,1,'kyo/concurrent/fibers$.loop$9',17,0,0)
f(13,139,73,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',1,0,0)
f(14,139,73,1,'kyo/concurrent/scheduler/IOPromise.complete',1,0,0)
f(15,140,71,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,140,71,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,140,71,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,140,71,1,'scala/runtime/function/JProcedure1.apply')
f(19,140,71,1,'scala/runtime/function/JProcedure1.apply')
f(20,142,69,1,'kyo/concurrent/scheduler/IOTask$$Lambda$68.0x0000000800d4e000.applyVoid')
f(21,142,69,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(22,143,1,2,'kyo/concurrent/scheduler/IOTask.<init>',1,0,0)
f(23,143,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(24,143,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(25,143,1,2,'java/util/concurrent/atomic/AtomicReference.<init>',1,0,0)
f(22,144,64,2,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1',33,0,0)
f(23,152,56,2,'kyo/concurrent/scheduler/IOTask$$Lambda$69.0x0000000800d4e408.apply',25,0,0)
f(24,152,56,2,'kyo/concurrent/scheduler/IOTask.$anonfun$1',25,0,0)
f(25,153,54,2,'kyo/bench/InterruptBench$$anon$3.apply',23,0,0)
f(26,153,54,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',23,0,0)
f(27,154,34,1,'kyo/bench/InterruptBench$$Lambda$59.0x0000000800d48688.apply',3,0,0)
f(28,156,32,1,'kyo/bench/InterruptBench.$anonfun$adapted$1',1,0,0)
f(29,156,31,1,'kyo/bench/InterruptBench.$anonfun$3')
f(30,156,31,1,'kyo/bench/InterruptBench.iterate$2')
f(31,157,4,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1',4,0,0)
f(31,161,18,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',12,0,0)
f(32,165,14,2,'kyo/bench/InterruptBench$$anon$3.<init>',8,0,0)
f(33,166,13,2,'kyo/core$internal$KyoCont.<init>',7,0,0)
f(34,173,6,6,'kyo/core$internal$KyoCont.value',0,6,0)
f(31,179,8,1,'kyo/concurrent/fibers$Fibers.forkFiber',1,0,0)
f(32,179,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(33,179,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(34,179,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(32,180,7,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(33,185,2,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply',2,0,0)
f(34,185,2,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',2,0,0)
f(35,186,1,2,'kyo/concurrent/scheduler/IOTask.<init>',1,0,0)
f(36,186,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(37,186,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(38,186,1,2,'java/util/concurrent/atomic/AtomicReference.<init>',1,0,0)
f(29,187,1,2,'scala/runtime/BoxesRunTime.unboxToBoolean',1,0,0)
f(27,188,19,2,'kyo/bench/InterruptBench$$anon$3.<init>',19,0,0)
f(28,190,17,2,'kyo/core$internal$KyoCont.<init>',17,0,0)
f(29,201,6,2,'kyo/core$internal$Kyo.<init>',6,0,0)
f(25,207,1,2,'kyo/concurrent/scheduler/IOTask.st',1,0,0)
f(22,208,3,2,'kyo/concurrent/scheduler/Scheduler$.schedule',3,0,0)
f(23,208,3,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',3,0,0)
f(24,208,3,2,'kyo/concurrent/scheduler/Queue.offer',3,0,0)
f(25,208,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(26,208,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(27,208,1,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47258.<init>',1,0,0)
f(25,209,2,2,'kyo/concurrent/scheduler/Queue.tryModify',2,0,0)
f(26,209,2,2,'scala/Function0.apply$mcZ$sp',2,0,0)
f(27,209,2,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47258.apply',2,0,0)
f(15,211,1,1,'kyo/concurrent/scheduler/IOPromise.onComplete')
f(13,212,16,2,'scala/runtime/BoxesRunTime.boxToBoolean',16,0,0)
f(9,228,8,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,228,4,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',4,0,0)
f(11,228,4,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',4,0,0)
f(12,228,4,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',4,0,0)
f(10,232,4,2,'kyo/concurrent/scheduler/Scheduler$.schedule',3,0,0)
f(11,232,4,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',3,0,0)
f(12,232,4,2,'kyo/concurrent/scheduler/Queue.offer',3,0,0)
f(13,232,4,2,'kyo/concurrent/scheduler/Queue.tryModify',3,0,0)
f(14,233,2,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',2,0,0)
f(15,233,2,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',2,0,0)
f(14,235,1,1,'scala/Function0.apply$mcZ$sp')
f(15,235,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(16,235,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(17,235,1,4,'MemAllocator::allocate() const')
f(18,235,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(19,235,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(9,236,23,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,236,23,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',7,0,0)
f(11,236,23,1,'kyo/concurrent/scheduler/IOPromise.complete',7,0,0)
f(12,236,23,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush',7,0,0)
f(13,236,23,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',7,0,0)
f(14,239,20,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run',7,0,0)
f(15,240,6,3,'itable stub')
f(15,246,5,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,246,5,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,246,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,246,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,246,5,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,246,5,1,'jdk/internal/misc/Unsafe.unpark')
f(21,246,5,3,'pthread_cond_signal')
f(22,246,5,5,'entry_SYSCALL_64_after_hwframe')
f(23,246,5,5,'do_syscall_64')
f(24,246,4,5,'__x64_sys_futex')
f(25,246,4,5,'do_futex')
f(26,246,4,5,'futex_wake')
f(27,246,4,5,'wake_up_q')
f(28,246,4,5,'_raw_spin_unlock_irqrestore')
f(24,250,1,5,'syscall_enter_from_user_mode')
f(15,251,8,1,'scala/runtime/function/JProcedure1.apply')
f(16,258,1,1,'scala/runtime/function/JProcedure1.apply')
f(9,259,2,6,'kyo/core$internal$KyoCont.effect',0,2,0)
f(9,261,1,1,'scala/runtime/function/JProcedure1.apply')
f(10,261,1,1,'kyo/ios$KyoIO.value')
f(9,262,2,3,'vtable stub')
f(7,264,21,1,'kyo/concurrent/scheduler/Queue.poll',2,0,0)
f(8,264,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(9,264,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',2,0,0)
f(8,266,19,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,266,11,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',11,0,0)
f(10,269,8,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',8,0,0)
f(11,274,3,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',3,0,0)
f(12,274,3,2,'java/util/Objects.requireNonNull',3,0,0)
f(9,277,8,2,'kyo/concurrent/scheduler/Queue$$Lambda$60.0x0000000800d49770.apply',8,0,0)
f(10,277,8,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',8,0,0)
f(11,278,7,2,'scala/collection/mutable/PriorityQueue.dequeue',7,0,0)
f(12,283,2,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',2,0,0)
f(7,285,3,2,'kyo/concurrent/scheduler/Scheduler$.idle',1,0,0)
f(8,285,3,2,'kyo/concurrent/scheduler/Worker.park',1,0,0)
f(9,285,3,2,'java/util/concurrent/locks/LockSupport.parkNanos',1,0,0)
f(10,285,1,2,'java/util/concurrent/locks/LockSupport.setBlocker',1,0,0)
f(10,286,2,1,'jdk/internal/misc/Unsafe.park')
f(11,286,2,3,'[unknown]')
f(12,286,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,287,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,287,1,5,'do_syscall_64')
f(15,287,1,5,'__x64_sys_futex')
f(16,287,1,5,'do_futex')
f(17,287,1,5,'futex_wait')
f(18,287,1,5,'futex_wait_queue_me')
f(19,287,1,5,'schedule')
f(20,287,1,5,'__schedule')
f(21,287,1,5,'finish_task_switch.isra.0')
f(7,288,3,2,'kyo/concurrent/scheduler/Worker.stop$1',3,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 400px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(25);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,14046,3,'all')
f(1,0,14042,1,'java/lang/Thread.run')
f(2,0,14042,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,14042,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,1759,1,'java/util/concurrent/FutureTask.run')
f(5,0,1759,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,1759,1,'java/util/concurrent/FutureTask.run')
f(7,0,1759,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,1759,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1759,1,'java/lang/reflect/Method.invoke')
f(10,0,1759,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,1759,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,1759,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,1759,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,1759,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,1759,1,'kyo/bench/Bench.forkKyo')
f(16,0,164,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,164,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,164,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,43,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,0,43,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3ee58')
f(19,43,121,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3ee58')
f(16,164,184,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,164,184,2,'kyo.bench.Bench$$anon$1')
f(16,348,1102,1,'kyo/bench/Bench.runLoop$2')
f(17,348,476,1,'kyo/bench/Bench$$anon$1.apply')
f(18,348,35,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,348,35,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c83220.apply')
f(20,348,35,1,'kyo/bench/Bench.$anonfun$2')
f(21,348,35,1,'kyo/concurrent/fibers$Fiber.block')
f(22,348,35,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,383,441,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,383,441,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,383,441,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84600.apply')
f(21,383,441,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,383,56,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,439,251,2,'kyo.concurrent.scheduler.IOTask')
f(22,690,134,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,690,134,2,'kyo.concurrent.fibers$Fiber')
f(17,824,626,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,824,626,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,824,626,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,824,626,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,824,292,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,824,292,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,824,122,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,946,170,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,946,170,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,1116,177,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,1293,157,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,1293,157,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,1293,157,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,1450,309,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,1450,121,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1450,121,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1450,121,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1450,121,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84600')
f(17,1571,151,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,1571,151,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,1722,37,1,'kyo/locals$Locals$.save')
f(18,1722,37,2,'kyo.locals$Locals$$anon$3')
f(4,1759,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ee28.run')
f(5,1759,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,1759,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,1759,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,1759,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,1759,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,1759,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,1759,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,1770,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f050.run')
f(5,1770,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,1770,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,1770,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,1770,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,1770,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,1770,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$60+0x0000000800d49890')
f(4,1781,12261,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fd98.run')
f(5,1781,12261,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,1781,12261,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,1781,12260,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,1781,12260,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,1781,12198,1,'kyo/bench/NarrowBindBench$$anon$2.apply')
f(10,1781,12198,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(11,1781,12198,1,'kyo/bench/NarrowBindBench$$Lambda$57.0x0000000800d48688.apply')
f(12,1781,12198,1,'kyo/bench/NarrowBindBench.$anonfun$adapted$1')
f(13,1781,12198,1,'kyo/bench/NarrowBindBench.$anonfun$1')
f(14,1781,12198,1,'kyo/bench/NarrowBindBench.loop$1')
f(15,1781,2639,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,1781,2639,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,1781,2639,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,1781,2639,2,'kyo.bench.NarrowBindBench$$Lambda$57+0x0000000800d48688')
f(15,4420,4024,2,'kyo.bench.NarrowBindBench$$anon$1')
f(15,8444,5535,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(16,8444,5535,2,'kyo.bench.NarrowBindBench$$anon$2')
f(9,13979,3,1,'kyo/bench/NarrowBindBench$$anon$5.apply')
f(10,13979,3,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$2')
f(11,13979,3,1,'kyo/bench/NarrowBindBench$$Lambda$56.0x0000000800d44800.apply')
f(12,13979,3,1,'kyo/bench/NarrowBindBench.$anonfun$adapted$2')
f(13,13979,3,1,'kyo/bench/NarrowBindBench.$anonfun$2')
f(14,13979,3,1,'kyo/bench/NarrowBindBench.loop$1')
f(15,13979,3,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(16,13979,3,2,'kyo.bench.NarrowBindBench$$anon$2')
f(9,13982,59,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,13982,59,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,13982,59,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3ee58.apply')
f(12,13982,59,1,'kyo/bench/Bench.$anonfun$1')
f(13,13982,59,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,13982,59,1,'kyo/bench/NarrowBindBench.kyoBench')
f(15,13982,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,13982,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,13982,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,13982,1,2,'kyo.bench.NarrowBindBench$$Lambda$56+0x0000000800d44800')
f(15,13983,54,2,'kyo.bench.NarrowBindBench$$anon$4')
f(15,14037,4,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$2')
f(16,14037,4,2,'kyo.bench.NarrowBindBench$$anon$5')
f(7,14041,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,14041,1,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,14041,1,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,14041,1,1,'scala/runtime/ObjectRef.create')
f(11,14041,1,2,'scala.runtime.ObjectRef')
f(1,14042,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,14042,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,14042,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,14042,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,14042,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,14042,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,14042,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,14042,1,2,'org.openjdk.jmh.runner.InfraControl')
f(8,14043,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,14043,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,14043,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,14043,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,14043,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,14043,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,278,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,2,4,'Compile::Code_Gen()')
f(10,0,2,4,'PhaseChaitin::Register_Allocate()')
f(11,0,1,4,'PhaseChaitin::build_ifg_physical(ResourceArea*)')
f(12,0,1,4,'PhaseChaitin::interfere_with_live(unsigned int, IndexSet*) [clone .part.0]')
f(11,1,1,4,'PhaseChaitin::gather_lrg_masks(bool)')
f(12,1,1,4,'rRegLOper::type() const')
f(9,2,1,4,'PhaseRemoveUseless::PhaseRemoveUseless(PhaseGVN*, Unique_Node_List*, Phase::PhaseNumber)')
f(10,2,1,4,'Compile::identify_useful_nodes(Unique_Node_List&)')
f(1,3,275,1,'java/lang/Thread.run')
f(2,3,275,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,3,275,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,3,13,1,'java/util/concurrent/FutureTask.run')
f(5,3,13,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,3,13,1,'java/util/concurrent/FutureTask.run')
f(7,3,13,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,3,13,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,3,13,1,'java/lang/reflect/Method.invoke')
f(10,3,13,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,3,13,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,3,13,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,3,13,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,3,13,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,3,13,1,'kyo/bench/Bench.forkKyo')
f(16,3,13,1,'kyo/bench/Bench.runLoop$2')
f(17,3,8,1,'kyo/bench/Bench$$anon$1.apply')
f(18,3,8,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,3,8,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,3,8,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84600.apply')
f(21,3,8,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,3,8,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,3,8,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,3,8,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,3,8,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,3,8,1,'jdk/internal/misc/Unsafe.unpark')
f(27,3,8,3,'pthread_cond_signal')
f(28,5,6,5,'entry_SYSCALL_64_after_hwframe')
f(29,5,6,5,'do_syscall_64')
f(30,5,6,5,'__x64_sys_futex')
f(31,5,6,5,'do_futex')
f(32,5,6,5,'futex_wake')
f(33,5,6,5,'wake_up_q')
f(34,5,6,5,'_raw_spin_unlock_irqrestore')
f(17,11,5,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,11,5,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,11,5,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,11,5,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,11,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,11,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,11,1,2,'java/lang/Thread.interrupted',1,0,0)
f(23,12,4,1,'java/util/concurrent/locks/LockSupport.park')
f(24,12,4,1,'jdk/internal/misc/Unsafe.park')
f(25,13,1,3,'Unsafe_Park')
f(26,13,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,13,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,13,1,5,'do_syscall_64')
f(29,13,1,5,'__x64_sys_futex')
f(30,13,1,5,'do_futex')
f(31,13,1,5,'futex_wake')
f(32,13,1,5,'get_futex_key')
f(25,14,2,3,'[unknown]')
f(26,14,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,14,2,5,'entry_SYSCALL_64_after_hwframe')
f(28,14,2,5,'do_syscall_64')
f(29,14,2,5,'__x64_sys_futex')
f(30,14,2,5,'do_futex')
f(31,14,2,5,'futex_wait')
f(32,15,1,5,'futex_wait_queue_me')
f(33,15,1,5,'schedule')
f(34,15,1,5,'__schedule')
f(35,15,1,5,'finish_task_switch.isra.0')
f(4,16,262,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fd98.run')
f(5,16,262,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,16,262,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,16,119,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,20,22,1,'kyo/concurrent/scheduler/IOTask.curr_$eq')
f(8,42,93,2,'kyo/concurrent/scheduler/IOTask.eval',83,0,0)
f(9,85,30,2,'kyo/bench/NarrowBindBench$$anon$2.apply',30,0,0)
f(10,97,18,2,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1',18,0,0)
f(11,97,18,2,'kyo/bench/NarrowBindBench$$Lambda$57.0x0000000800d44400.apply',18,0,0)
f(12,97,18,2,'kyo/bench/NarrowBindBench.$anonfun$adapted$1',18,0,0)
f(13,99,16,2,'kyo/bench/NarrowBindBench.$anonfun$1',16,0,0)
f(14,99,16,2,'kyo/bench/NarrowBindBench.loop$1',16,0,0)
f(15,110,5,2,'kyo/bench/NarrowBindBench$$anon$1.<init>',5,0,0)
f(16,111,4,2,'kyo/ios$KyoIO.<init>',4,0,0)
f(17,111,4,2,'kyo/core$internal$Kyo.<init>',4,0,0)
f(18,111,4,2,'java/lang/Object.<init>',4,0,0)
f(9,115,14,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',14,0,0)
f(9,129,6,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,129,6,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,129,6,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,129,6,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,129,6,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,129,6,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,129,6,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,129,6,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,129,6,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,129,6,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,129,6,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,129,6,1,'jdk/internal/misc/Unsafe.unpark')
f(21,129,6,3,'pthread_cond_signal')
f(22,129,6,5,'entry_SYSCALL_64_after_hwframe')
f(23,129,6,5,'do_syscall_64')
f(24,129,6,5,'__x64_sys_futex')
f(25,129,6,5,'do_futex')
f(26,129,6,5,'futex_wake')
f(27,130,5,5,'wake_up_q')
f(28,130,5,5,'_raw_spin_unlock_irqrestore')
f(7,135,135,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,135,6,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,135,6,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,139,2,1,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47ca0.<init>')
f(8,141,129,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,162,108,1,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47ca0.apply')
f(10,162,108,1,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1')
f(11,183,20,1,'kyo/concurrent/scheduler/Queue.isEmpty')
f(11,203,67,1,'scala/collection/mutable/PriorityQueue.dequeue')
f(12,254,11,1,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array')
f(12,265,5,1,'scala/collection/mutable/PriorityQueue.fixDown')
f(7,270,7,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,270,1,1,'java/util/AbstractQueue.add')
f(9,270,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.offer')
f(10,270,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.producerChunkForIndex')
f(11,270,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.appendNextChunks')
f(12,270,1,2,'org/jctools/queues/MpUnboundedXaddArrayQueueProducerChunk.casProducerChunkIndex',1,0,0)
f(13,270,1,2,'sun/misc/Unsafe.compareAndSwapLong',1,0,0)
f(8,271,6,1,'kyo/concurrent/scheduler/Worker.park')
f(9,271,6,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,271,6,1,'jdk/internal/misc/Unsafe.park')
f(11,271,1,3,'Unsafe_Park')
f(12,271,1,4,'Parker::park(bool, long)')
f(11,272,5,3,'[unknown]')
f(12,272,5,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,272,5,5,'entry_SYSCALL_64_after_hwframe')
f(14,272,5,5,'do_syscall_64')
f(15,272,5,5,'__x64_sys_futex')
f(16,272,4,5,'do_futex')
f(17,272,4,5,'futex_wait')
f(18,273,3,5,'futex_wait_queue_me')
f(19,273,1,5,'__cond_resched')
f(19,274,1,5,'hrtimer_sleeper_start_expires')
f(20,274,1,5,'_raw_spin_unlock_irqrestore')
f(19,275,1,5,'schedule')
f(20,275,1,5,'__schedule')
f(21,275,1,5,'finish_task_switch.isra.0')
f(16,276,1,5,'get_timespec64')
f(17,276,1,5,'_copy_from_user')
f(7,277,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,277,1,2,'kyo/concurrent/scheduler/Scheduler$.randomWorker',1,0,0)
f(9,277,1,2,'java/util/Random.nextInt',1,0,0)
f(10,277,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: 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,18711,3,'all')
f(1,0,18707,1,'java/lang/Thread.run')
f(2,0,18707,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,18707,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,18707,1,'java/util/concurrent/FutureTask.run')
f(5,0,18707,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,18707,1,'java/util/concurrent/FutureTask.run')
f(7,0,18707,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,18707,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,18707,1,'java/lang/reflect/Method.invoke')
f(10,0,18707,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,18707,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,18707,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,18707,1,'kyo/bench/jmh_generated/NarrowBindBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,18707,1,'kyo/bench/jmh_generated/NarrowBindBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,18707,1,'kyo/bench/Bench.syncKyo')
f(16,0,18704,1,'kyo/bench/Bench.runLoop$1')
f(17,0,18704,1,'kyo/bench/NarrowBindBench$$anon$2.apply')
f(18,0,18704,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(19,0,18704,1,'kyo/bench/NarrowBindBench$$Lambda$40.0x0000000800cd38c0.apply')
f(20,0,18704,1,'kyo/bench/NarrowBindBench.$anonfun$adapted$1')
f(21,0,18704,1,'kyo/bench/NarrowBindBench.$anonfun$1')
f(22,0,18704,1,'kyo/bench/NarrowBindBench.loop$1')
f(23,0,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(24,0,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(25,0,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(26,0,2,2,'kyo.bench.NarrowBindBench$$Lambda$40+0x0000000800cd38c0')
f(23,2,9348,2,'kyo.bench.NarrowBindBench$$anon$1')
f(23,9350,1,2,'kyo.bench.NarrowBindBench$$anon$3')
f(23,9351,9353,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(24,9351,9353,2,'kyo.bench.NarrowBindBench$$anon$2')
f(16,18704,3,1,'kyo/bench/NarrowBindBench.kyoBench')
f(17,18704,3,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$2')
f(18,18704,3,2,'kyo.bench.NarrowBindBench$$anon$5')
f(1,18707,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,18707,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,18707,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,18707,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,18707,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,18707,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,18707,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,18707,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,18707,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,18707,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,18707,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,18707,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,18707,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,18710,1,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,18710,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,18710,1,1,'java/lang/ClassLoader.loadClass')
f(10,18710,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,18710,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,18710,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,18710,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,18710,1,1,'jdk/internal/loader/URLClassPath.getResource')
f(15,18710,1,1,'jdk/internal/loader/URLClassPath$JarLoader.getResource')
f(16,18710,1,1,'java/util/jar/JarFile.getJarEntry')
f(17,18710,1,1,'java/util/jar/JarFile.getEntry')
f(18,18710,1,1,'java/util/zip/ZipFile.getEntry')
f(19,18710,1,1,'java/util/zip/ZipFile$Source.getEntryPos')
f(20,18710,1,1,'java/util/zip/ZipCoder$UTF8ZipCoder.toString')
f(21,18710,1,1,'java/lang/System$2.newStringUTF8NoRepl')
f(22,18710,1,1,'java/lang/String.newStringUTF8NoRepl')
f(23,18710,1,1,'java/util/Arrays.copyOfRange')
f(24,18710,1,2,'byte[]')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 496px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(31);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,298,3,'all')
f(1,0,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,1,3,'thread_native_entry(Thread*)')
f(3,0,1,4,'Thread::call_run()')
f(4,0,1,4,'VMThread::run()')
f(5,0,1,4,'VMThread::inner_execute(VM_Operation*)')
f(6,0,1,4,'VMThread::evaluate_operation(VM_Operation*)')
f(7,0,1,4,'VM_Operation::evaluate()')
f(8,0,1,4,'VM_G1CollectForAllocation::doit()')
f(9,0,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint(double)')
f(10,0,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint_helper(double)')
f(11,0,1,4,'G1CollectedHeap::pre_evacuate_collection_set(G1EvacuationInfo&, G1ParScanThreadStateSet*)')
f(12,0,1,4,'WorkGang::run_task(AbstractGangTask*, unsigned int, bool)')
f(13,0,1,3,'sem_post')
f(14,0,1,5,'entry_SYSCALL_64_after_hwframe')
f(15,0,1,5,'do_syscall_64')
f(16,0,1,5,'__x64_sys_futex')
f(17,0,1,5,'do_futex')
f(18,0,1,5,'futex_wake')
f(1,1,297,1,'java/lang/Thread.run')
f(2,1,297,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,1,297,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,1,297,1,'java/util/concurrent/FutureTask.run')
f(5,1,297,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,1,297,1,'java/util/concurrent/FutureTask.run')
f(7,1,297,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,1,297,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,1,297,1,'java/lang/reflect/Method.invoke')
f(10,1,297,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,1,297,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,1,297,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,1,297,1,'kyo/bench/jmh_generated/NarrowBindBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,1,297,1,'kyo/bench/jmh_generated/NarrowBindBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,1,297,2,'kyo/bench/Bench.syncKyo',296,0,0)
f(16,1,195,2,'kyo/bench/Bench.runLoop$1',194,0,0)
f(17,142,48,2,'kyo/bench/NarrowBindBench$$anon$2.apply',47,0,0)
f(18,156,10,2,'kyo/bench/NarrowBindBench$$anon$1.apply',10,0,0)
f(18,166,24,2,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1',23,0,0)
f(19,166,9,2,'kyo/bench/NarrowBindBench$$Lambda$40.0x0000000800cd38c0.apply',8,0,0)
f(20,166,9,2,'kyo/bench/NarrowBindBench.$anonfun$adapted$1',8,0,0)
f(21,166,9,2,'kyo/bench/NarrowBindBench.$anonfun$1',8,0,0)
f(22,166,9,2,'kyo/bench/NarrowBindBench.loop$1',8,0,0)
f(23,166,9,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',8,0,0)
f(24,168,7,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',6,0,0)
f(25,174,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(26,174,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(27,174,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(28,174,1,4,'MemAllocator::allocate() const')
f(29,174,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(30,174,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(19,175,15,2,'scala/runtime/BoxesRunTime.unboxToInt',15,0,0)
f(17,190,6,2,'kyo/locals$Locals$State$.empty',6,0,0)
f(16,196,102,2,'kyo/bench/NarrowBindBench.kyoBench',102,0,0)
f(17,196,25,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',25,0,0)
f(18,196,25,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',25,0,0)
f(17,221,77,2,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$2',77,0,0)
f(18,221,76,2,'kyo/bench/NarrowBindBench$$anon$5.<init>',76,0,0)
f(19,266,31,2,'kyo/core$internal$KyoCont.<init>',31,0,0)
f(20,270,5,2,'kyo/ios$KyoIO.effect',5,0,0)
f(20,275,22,2,'kyo/ios$KyoIO.value',22,0,0)
f(18,297,1,2,'kyo/core$internal$.fromKyo',1,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 400px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(25);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,17047,3,'all')
f(1,0,17044,1,'java/lang/Thread.run')
f(2,0,17044,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,17044,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,769,1,'java/util/concurrent/FutureTask.run')
f(5,0,769,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,769,1,'java/util/concurrent/FutureTask.run')
f(7,0,769,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,769,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,769,1,'java/lang/reflect/Method.invoke')
f(10,0,769,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,769,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,769,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,769,1,'kyo/bench/jmh_generated/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,769,1,'kyo/bench/jmh_generated/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,769,1,'kyo/bench/Bench.forkKyo')
f(16,0,66,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,66,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,66,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,66,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c80820')
f(16,66,110,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,66,110,2,'kyo.bench.Bench$$anon$1')
f(16,176,460,1,'kyo/bench/Bench.runLoop$2')
f(17,176,215,1,'kyo/bench/Bench$$anon$1.apply')
f(18,176,84,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,176,84,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c85ba8.apply')
f(20,176,84,1,'kyo/bench/Bench.$anonfun$2')
f(21,176,84,1,'kyo/concurrent/fibers$Fiber.block')
f(22,176,84,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,260,131,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,260,131,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,260,131,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c81f78.apply')
f(21,260,131,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,260,124,2,'kyo.concurrent.scheduler.IOTask')
f(22,384,7,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,384,7,2,'kyo.concurrent.fibers$Fiber')
f(17,391,245,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,391,245,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,391,245,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,391,245,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,391,118,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,391,118,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,391,27,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,418,91,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,418,91,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,509,43,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,552,84,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,552,84,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,552,84,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,636,133,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,636,123,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,636,123,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,636,123,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,636,123,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c81f78')
f(17,759,10,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,759,10,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(4,769,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e478.run')
f(5,769,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,769,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,769,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,769,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,769,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,769,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,769,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,780,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e6a0.run')
f(5,780,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,780,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,780,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,780,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,780,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,780,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$68+0x0000000800d4cc00')
f(4,791,16253,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d22b68.run')
f(5,791,16253,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,791,16253,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,791,16253,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,791,16253,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,791,16129,1,'kyo/bench/NarrowBindMapBench$$anon$12.apply')
f(10,791,1856,1,'kyo/bench/NarrowBindMapBench$$anon$11.apply')
f(11,791,1181,1,'kyo/bench/NarrowBindMapBench$$anon$10.apply')
f(12,791,779,1,'kyo/bench/NarrowBindMapBench$$anon$9.apply')
f(13,791,779,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$transformLoop$8')
f(14,791,779,1,'kyo/bench/NarrowBindMapBench$$Lambda$64.0x0000000800d4bcd8.apply')
f(15,791,779,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$8')
f(16,791,779,1,'kyo/bench/NarrowBindMapBench.$anonfun$8')
f(17,791,779,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(18,791,779,1,'java/lang/Integer.valueOf')
f(19,791,779,2,'java.lang.Integer')
f(12,1570,402,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$transformLoop$9')
f(13,1570,402,1,'kyo/bench/NarrowBindMapBench$$Lambda$65.0x0000000800d4c0a0.apply')
f(14,1570,402,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$9')
f(15,1570,402,1,'kyo/bench/NarrowBindMapBench.$anonfun$9')
f(16,1570,402,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(17,1570,402,1,'java/lang/Integer.valueOf')
f(18,1570,402,2,'java.lang.Integer')
f(11,1972,675,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$transformLoop$10')
f(12,1972,675,1,'kyo/bench/NarrowBindMapBench$$Lambda$66.0x0000000800d4c468.apply')
f(13,1972,675,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$10')
f(14,1972,675,1,'kyo/bench/NarrowBindMapBench.$anonfun$10')
f(15,1972,675,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(16,1972,675,1,'java/lang/Integer.valueOf')
f(17,1972,675,2,'java.lang.Integer')
f(10,2647,14273,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11')
f(11,2647,14273,1,'kyo/bench/NarrowBindMapBench$$Lambda$67.0x0000000800d4c830.apply')
f(12,2647,14273,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$11')
f(13,2647,14273,1,'kyo/bench/NarrowBindMapBench.$anonfun$11')
f(14,2647,14273,1,'kyo/bench/NarrowBindMapBench.loop$1')
f(15,2647,465,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,2647,465,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,2647,465,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,2647,465,2,'kyo.bench.NarrowBindMapBench$$Lambda$67+0x0000000800d4c830')
f(15,3112,512,2,'kyo.bench.NarrowBindMapBench$$anon$1')
f(15,3624,1204,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(16,3624,1204,2,'kyo.bench.NarrowBindMapBench$$anon$2')
f(15,4828,1190,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$transformLoop$2')
f(16,4828,1190,2,'kyo.bench.NarrowBindMapBench$$anon$3')
f(15,6018,1364,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$transformLoop$3')
f(16,6018,1364,2,'kyo.bench.NarrowBindMapBench$$anon$4')
f(15,7382,1018,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$transformLoop$4')
f(16,7382,1018,2,'kyo.bench.NarrowBindMapBench$$anon$5')
f(15,8400,1234,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$transformLoop$5')
f(16,8400,1234,2,'kyo.bench.NarrowBindMapBench$$anon$6')
f(15,9634,1346,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$transformLoop$6')
f(16,9634,1346,2,'kyo.bench.NarrowBindMapBench$$anon$7')
f(15,10980,1256,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$transformLoop$7')
f(16,10980,1256,2,'kyo.bench.NarrowBindMapBench$$anon$8')
f(15,12236,1154,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$transformLoop$8')
f(16,12236,1154,2,'kyo.bench.NarrowBindMapBench$$anon$9')
f(15,13390,1149,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$transformLoop$9')
f(16,13390,1149,2,'kyo.bench.NarrowBindMapBench$$anon$10')
f(15,14539,1229,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$transformLoop$10')
f(16,14539,1229,2,'kyo.bench.NarrowBindMapBench$$anon$11')
f(15,15768,1152,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11')
f(16,15768,1152,2,'kyo.bench.NarrowBindMapBench$$anon$12')
f(9,16920,3,1,'kyo/bench/NarrowBindMapBench$$anon$15.apply')
f(10,16920,3,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$12')
f(11,16920,3,1,'kyo/bench/NarrowBindMapBench$$Lambda$56.0x0000000800d48690.apply')
f(12,16920,3,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$12')
f(13,16920,3,1,'kyo/bench/NarrowBindMapBench.$anonfun$12')
f(14,16920,3,1,'kyo/bench/NarrowBindMapBench.loop$1')
f(15,16920,1,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(16,16920,1,2,'kyo.bench.NarrowBindMapBench$$anon$2')
f(15,16921,1,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$transformLoop$7')
f(16,16921,1,2,'kyo.bench.NarrowBindMapBench$$anon$8')
f(15,16922,1,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$transformLoop$8')
f(16,16922,1,2,'kyo.bench.NarrowBindMapBench$$anon$9')
f(9,16923,121,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,16923,121,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,16923,121,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c80820.apply')
f(12,16923,121,1,'kyo/bench/Bench.$anonfun$1')
f(13,16923,121,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,16923,121,1,'kyo/bench/NarrowBindMapBench.kyoBench')
f(15,16923,121,2,'kyo.bench.NarrowBindMapBench$$anon$14')
f(1,17044,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,17044,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,17044,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,17044,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,17044,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,17044,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,17044,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,17044,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,17044,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,17044,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,17044,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,17044,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,17044,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,294,3,'all')
f(1,0,294,1,'java/lang/Thread.run')
f(2,0,294,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,294,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,2,1,'java/util/concurrent/FutureTask.run')
f(5,0,2,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,2,1,'java/util/concurrent/FutureTask.run')
f(7,0,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,2,1,'java/lang/reflect/Method.invoke')
f(10,0,2,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,2,1,'kyo/bench/jmh_generated/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,2,1,'kyo/bench/jmh_generated/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,2,1,'kyo/bench/Bench.forkKyo')
f(16,0,2,1,'kyo/bench/Bench.runLoop$2')
f(17,0,1,1,'kyo/bench/Bench$$anon$1.apply')
f(18,0,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,0,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,0,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c81f78.apply')
f(21,0,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,0,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,0,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,0,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,0,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,0,1,1,'jdk/internal/misc/Unsafe.unpark')
f(27,0,1,3,'pthread_cond_signal')
f(28,0,1,5,'entry_SYSCALL_64_after_hwframe')
f(29,0,1,5,'do_syscall_64')
f(30,0,1,5,'__x64_sys_futex')
f(31,0,1,5,'do_futex')
f(32,0,1,5,'futex_wake')
f(33,0,1,5,'wake_up_q')
f(34,0,1,5,'_raw_spin_unlock_irqrestore')
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(4,2,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e478.run')
f(5,2,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,2,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,2,1,1,'java/lang/Thread.sleep')
f(8,2,1,3,'[unknown]')
f(9,2,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,2,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,2,1,5,'do_syscall_64')
f(12,2,1,5,'__x64_sys_futex')
f(13,2,1,5,'do_futex')
f(14,2,1,5,'futex_wait')
f(15,2,1,5,'futex_wait_queue_me')
f(16,2,1,5,'schedule')
f(17,2,1,5,'__schedule')
f(18,2,1,5,'finish_task_switch.isra.0')
f(4,3,291,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d22b68.run')
f(5,3,291,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,3,291,1,'kyo/concurrent/scheduler/Worker.runWorker',0,0,2)
f(7,5,288,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,5,288,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,9,284,2,'kyo/bench/NarrowBindMapBench$$anon$12.apply',278,0,0)
f(10,9,284,2,'kyo/bench/NarrowBindMapBench$$anon$11.apply',278,0,0)
f(11,9,284,2,'kyo/bench/NarrowBindMapBench$$anon$10.apply',278,0,0)
f(12,9,284,2,'kyo/bench/NarrowBindMapBench$$anon$9.apply',278,0,0)
f(13,10,283,2,'kyo/bench/NarrowBindMapBench$$anon$8.apply',277,0,0)
f(14,60,233,2,'kyo/bench/NarrowBindMapBench$$anon$7.apply',227,0,0)
f(15,68,225,2,'kyo/bench/NarrowBindMapBench$$anon$6.apply',219,0,0)
f(16,85,208,2,'kyo/bench/NarrowBindMapBench$$anon$5.apply',202,0,0)
f(17,88,166,2,'kyo/bench/NarrowBindMapBench$$anon$4.apply',160,0,0)
f(18,96,137,2,'kyo/bench/NarrowBindMapBench$$anon$3.apply',131,0,0)
f(19,183,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(20,183,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(21,183,1,4,'MemAllocator::allocate() const')
f(22,183,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(23,183,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(24,183,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(25,183,1,4,'HSpaceCounters::update_used(unsigned long)')
f(19,184,37,2,'kyo/bench/NarrowBindMapBench$$anon$2.apply',32,0,0)
f(20,212,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(21,212,1,4,'CardTableBarrierSet::on_slowpath_allocation_exit(JavaThread*, oopDesc*)')
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,6,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1',2,0,0)
f(21,216,4,1,'kyo/bench/NarrowBindMapBench$$Lambda$57.0x0000000800d48ec0.apply')
f(22,216,4,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$1')
f(23,216,4,1,'kyo/bench/NarrowBindMapBench.$anonfun$1')
f(24,216,4,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(25,216,4,1,'java/lang/Integer.valueOf')
f(20,220,1,2,'kyo/concurrent/scheduler/IOTask.apply',1,0,0)
f(19,221,12,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$transformLoop$2',12,0,0)
f(20,225,8,2,'kyo/bench/NarrowBindMapBench$$Lambda$58.0x0000000800d49b48.apply',8,0,0)
f(21,225,8,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$2',8,0,0)
f(22,227,6,2,'scala/runtime/BoxesRunTime.unboxToInt',6,0,0)
f(23,230,3,2,'java/lang/Integer.intValue',3,0,0)
f(18,233,21,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$transformLoop$3',21,0,0)
f(19,241,13,2,'kyo/bench/NarrowBindMapBench$$Lambda$59.0x0000000800d4a7c0.apply',13,0,0)
f(20,241,13,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$3',13,0,0)
f(21,252,2,2,'scala/runtime/BoxesRunTime.unboxToInt',2,0,0)
f(17,254,37,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$transformLoop$4',37,0,0)
f(18,271,19,2,'kyo/bench/NarrowBindMapBench$$Lambda$60.0x0000000800d4adb8.apply',19,0,0)
f(19,271,19,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$4',19,0,0)
f(20,271,7,2,'kyo/bench/NarrowBindMapBench.$anonfun$4',7,0,0)
f(20,278,12,2,'scala/runtime/BoxesRunTime.unboxToInt',12,0,0)
f(18,290,1,2,'scala/runtime/BoxesRunTime.unboxToInt',1,0,0)
f(17,291,2,2,'kyo/concurrent/scheduler/IOTask.apply',2,0,0)
f(7,293,1,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,293,1,1,'kyo/concurrent/scheduler/Worker.park')
f(9,293,1,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,293,1,1,'jdk/internal/misc/Unsafe.park')
f(11,293,1,3,'[unknown]')
f(12,293,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,293,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,293,1,5,'do_syscall_64')
f(15,293,1,5,'__x64_sys_futex')
f(16,293,1,5,'do_futex')
f(17,293,1,5,'futex_wait')
f(18,293,1,5,'futex_wait_queue_me')
f(19,293,1,5,'hrtimer_sleeper_start_expires')
f(20,293,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: 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,13662,3,'all')
f(1,0,13656,1,'java/lang/Thread.run')
f(2,0,13656,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,13656,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,13656,1,'java/util/concurrent/FutureTask.run')
f(5,0,13656,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,13656,1,'java/util/concurrent/FutureTask.run')
f(7,0,13656,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,13656,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,13656,1,'java/lang/reflect/Method.invoke')
f(10,0,13656,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,13656,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,13656,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,13656,1,'kyo/bench/jmh_generated/NarrowBindMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,13656,1,'kyo/bench/jmh_generated/NarrowBindMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,13656,1,'kyo/bench/Bench.syncKyo')
f(16,0,13656,1,'kyo/bench/Bench.runLoop$1')
f(17,0,13653,1,'kyo/bench/NarrowBindMapBench$$anon$12.apply')
f(18,0,1569,1,'kyo/bench/NarrowBindMapBench$$anon$11.apply')
f(19,0,1569,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$transformLoop$10')
f(20,0,1569,1,'kyo/bench/NarrowBindMapBench$$Lambda$49.0x0000000800cd7078.apply')
f(21,0,1569,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$10')
f(22,0,1569,1,'kyo/bench/NarrowBindMapBench.$anonfun$10')
f(23,0,1569,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(24,0,1569,1,'java/lang/Integer.valueOf')
f(25,0,1569,2,'java.lang.Integer')
f(18,1569,12084,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11')
f(19,1569,12084,1,'kyo/bench/NarrowBindMapBench$$Lambda$50.0x0000000800cd7440.apply')
f(20,1569,12084,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$11')
f(21,1569,12084,1,'kyo/bench/NarrowBindMapBench.$anonfun$11')
f(22,1569,12084,1,'kyo/bench/NarrowBindMapBench.loop$1')
f(23,1569,706,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(24,1569,706,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(25,1569,706,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(26,1569,706,2,'kyo.bench.NarrowBindMapBench$$Lambda$50+0x0000000800cd7440')
f(23,2275,1,2,'kyo.bench.NarrowBindMapBench$$anon$13')
f(23,2276,343,2,'kyo.bench.NarrowBindMapBench$$anon$1')
f(23,2619,883,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(24,2619,883,2,'kyo.bench.NarrowBindMapBench$$anon$2')
f(23,3502,598,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$transformLoop$2')
f(24,3502,598,2,'kyo.bench.NarrowBindMapBench$$anon$3')
f(23,4100,1488,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$transformLoop$3')
f(24,4100,1488,2,'kyo.bench.NarrowBindMapBench$$anon$4')
f(23,5588,1276,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$transformLoop$4')
f(24,5588,1276,2,'kyo.bench.NarrowBindMapBench$$anon$5')
f(23,6864,634,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$transformLoop$5')
f(24,6864,634,2,'kyo.bench.NarrowBindMapBench$$anon$6')
f(23,7498,1399,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$transformLoop$6')
f(24,7498,1399,2,'kyo.bench.NarrowBindMapBench$$anon$7')
f(23,8897,1329,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$transformLoop$7')
f(24,8897,1329,2,'kyo.bench.NarrowBindMapBench$$anon$8')
f(23,10226,690,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$transformLoop$8')
f(24,10226,690,2,'kyo.bench.NarrowBindMapBench$$anon$9')
f(23,10916,1500,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$transformLoop$9')
f(24,10916,1500,2,'kyo.bench.NarrowBindMapBench$$anon$10')
f(23,12416,1182,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$transformLoop$10')
f(24,12416,1182,2,'kyo.bench.NarrowBindMapBench$$anon$11')
f(23,13598,55,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11')
f(24,13598,55,2,'kyo.bench.NarrowBindMapBench$$anon$12')
f(17,13653,3,1,'kyo/bench/NarrowBindMapBench$$anon$15.apply')
f(18,13653,3,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$12')
f(19,13653,3,1,'kyo/bench/NarrowBindMapBench$$Lambda$37.0x0000000800c2eb48.apply')
f(20,13653,3,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$12')
f(21,13653,3,1,'kyo/bench/NarrowBindMapBench.$anonfun$12')
f(22,13653,3,1,'kyo/bench/NarrowBindMapBench.loop$1')
f(23,13653,1,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$transformLoop$6')
f(24,13653,1,2,'kyo.bench.NarrowBindMapBench$$anon$7')
f(23,13654,1,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$transformLoop$9')
f(24,13654,1,2,'kyo.bench.NarrowBindMapBench$$anon$10')
f(23,13655,1,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$transformLoop$10')
f(24,13655,1,2,'kyo.bench.NarrowBindMapBench$$anon$11')
f(1,13656,6,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,13656,6,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,13656,6,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,13656,6,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,13656,6,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,13656,6,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,13656,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,13656,1,2,'org.openjdk.jmh.runner.InfraControl')
f(8,13657,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,13657,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,13657,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,13657,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,13657,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,13657,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,13660,2,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,13660,2,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,13660,2,1,'java/lang/ClassLoader.loadClass')
f(10,13660,2,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,13660,2,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,13660,2,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,13660,2,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,13660,1,1,'jdk/internal/loader/BuiltinClassLoader.defineClass')
f(15,13660,1,1,'jdk/internal/loader/Resource.getByteBuffer')
f(16,13660,1,1,'jdk/internal/loader/Resource.cachedInputStream')
f(17,13660,1,1,'jdk/internal/loader/URLClassPath$JarLoader$2.getInputStream')
f(18,13660,1,1,'java/util/jar/JarFile.getInputStream')
f(19,13660,1,1,'java/util/zip/ZipFile.getInputStream')
f(20,13660,1,1,'java/util/zip/ZipFile$ZipFileInflaterInputStream.<init>')
f(21,13660,1,1,'java/util/zip/ZipFile$ZipFileInflaterInputStream.<init>')
f(22,13660,1,1,'java/util/zip/InflaterInputStream.<init>')
f(23,13660,1,2,'byte[]')
f(14,13661,1,1,'jdk/internal/loader/URLClassPath.getResource')
f(15,13661,1,1,'jdk/internal/loader/URLClassPath$JarLoader.getResource')
f(16,13661,1,1,'java/util/jar/JarFile.getJarEntry')
f(17,13661,1,1,'java/util/jar/JarFile.getEntry')
f(18,13661,1,1,'java/util/zip/ZipFile.getEntry')
f(19,13661,1,1,'java/util/zip/ZipFile$Source.getEntryPos')
f(20,13661,1,1,'java/util/zip/ZipCoder$UTF8ZipCoder.toString')
f(21,13661,1,1,'java/lang/System$2.newStringUTF8NoRepl')
f(22,13661,1,1,'java/lang/String.newStringUTF8NoRepl')
f(23,13661,1,1,'java/util/Arrays.copyOfRange')
f(24,13661,1,2,'byte[]')
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: 512px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(32);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,298,3,'all')
f(1,0,298,1,'java/lang/Thread.run')
f(2,0,298,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,298,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,298,1,'java/util/concurrent/FutureTask.run')
f(5,0,298,1,'java/util/concurrent/Executors
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