Skip to content

Instantly share code, notes, and snippets.

@fwbrasil
Created June 11, 2023 04:05
Show Gist options
  • Save fwbrasil/e8868d4f7418250da21bc5b8c7d85c18 to your computer and use it in GitHub Desktop.
Save fwbrasil/e8868d4f7418250da21bc5b8c7d85c18 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" : 48996.71111342511,
"scoreError" : 23028.244294521042,
"scoreConfidence" : [
25968.466818904068,
72024.95540794615
],
"scorePercentiles" : {
"0.0" : 48254.09040534127,
"50.0" : 48281.892789662605,
"90.0" : 50454.15014527144,
"95.0" : 50454.15014527144,
"99.0" : 50454.15014527144,
"99.9" : 50454.15014527144,
"99.99" : 50454.15014527144,
"99.999" : 50454.15014527144,
"99.9999" : 50454.15014527144,
"100.0" : 50454.15014527144
},
"scoreUnit" : "ops/s",
"rawData" : [
[
50454.15014527144,
48281.892789662605,
48254.09040534127
]
]
},
"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" : 207039.2390973492,
"scoreError" : 329.6118519019696,
"scoreConfidence" : [
206709.62724544722,
207368.85094925118
],
"scorePercentiles" : {
"0.0" : 207018.40848543006,
"50.0" : 207048.66159184306,
"90.0" : 207050.64721477445,
"95.0" : 207050.64721477445,
"99.0" : 207050.64721477445,
"99.9" : 207050.64721477445,
"99.99" : 207050.64721477445,
"99.999" : 207050.64721477445,
"99.9999" : 207050.64721477445,
"100.0" : 207050.64721477445
},
"scoreUnit" : "ops/s",
"rawData" : [
[
207048.66159184306,
207018.40848543006,
207050.64721477445
]
]
},
"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" : 1234.3994697744547,
"scoreError" : 303.60703968520727,
"scoreConfidence" : [
930.7924300892474,
1538.006509459662
],
"scorePercentiles" : {
"0.0" : 1222.0681461530592,
"50.0" : 1227.8018679641752,
"90.0" : 1253.32839520613,
"95.0" : 1253.32839520613,
"99.0" : 1253.32839520613,
"99.9" : 1253.32839520613,
"99.99" : 1253.32839520613,
"99.999" : 1253.32839520613,
"99.9999" : 1253.32839520613,
"100.0" : 1253.32839520613
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1222.0681461530592,
1227.8018679641752,
1253.32839520613
]
]
},
"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" : 1275.1814622438844,
"scoreError" : 826.7324771374822,
"scoreConfidence" : [
448.44898510640223,
2101.9139393813666
],
"scorePercentiles" : {
"0.0" : 1226.1788402924446,
"50.0" : 1283.7894776716087,
"90.0" : 1315.5760687676004,
"95.0" : 1315.5760687676004,
"99.0" : 1315.5760687676004,
"99.9" : 1315.5760687676004,
"99.99" : 1315.5760687676004,
"99.999" : 1315.5760687676004,
"99.9999" : 1315.5760687676004,
"100.0" : 1315.5760687676004
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1315.5760687676004,
1226.1788402924446,
1283.7894776716087
]
]
},
"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" : 22924.850039844256,
"scoreError" : 6635.809832102166,
"scoreConfidence" : [
16289.04020774209,
29560.659871946424
],
"scorePercentiles" : {
"0.0" : 22508.759278874066,
"50.0" : 23083.3808490502,
"90.0" : 23182.409991608507,
"95.0" : 23182.409991608507,
"99.0" : 23182.409991608507,
"99.9" : 23182.409991608507,
"99.99" : 23182.409991608507,
"99.999" : 23182.409991608507,
"99.9999" : 23182.409991608507,
"100.0" : 23182.409991608507
},
"scoreUnit" : "ops/s",
"rawData" : [
[
23182.409991608507,
22508.759278874066,
23083.3808490502
]
]
},
"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" : 40864.16528956137,
"scoreError" : 825.684023183703,
"scoreConfidence" : [
40038.48126637767,
41689.84931274508
],
"scorePercentiles" : {
"0.0" : 40811.99519239316,
"50.0" : 40887.59609086265,
"90.0" : 40892.9045854283,
"95.0" : 40892.9045854283,
"99.0" : 40892.9045854283,
"99.9" : 40892.9045854283,
"99.99" : 40892.9045854283,
"99.999" : 40892.9045854283,
"99.9999" : 40892.9045854283,
"100.0" : 40892.9045854283
},
"scoreUnit" : "ops/s",
"rawData" : [
[
40811.99519239316,
40887.59609086265,
40892.9045854283
]
]
},
"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" : 11432.57138947497,
"scoreError" : 552.0345692489736,
"scoreConfidence" : [
10880.536820225996,
11984.605958723943
],
"scorePercentiles" : {
"0.0" : 11401.365808034638,
"50.0" : 11434.563212828618,
"90.0" : 11461.785147561655,
"95.0" : 11461.785147561655,
"99.0" : 11461.785147561655,
"99.9" : 11461.785147561655,
"99.99" : 11461.785147561655,
"99.999" : 11461.785147561655,
"99.9999" : 11461.785147561655,
"100.0" : 11461.785147561655
},
"scoreUnit" : "ops/s",
"rawData" : [
[
11434.563212828618,
11461.785147561655,
11401.365808034638
]
]
},
"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" : 10742.827634489877,
"scoreError" : 1341.3014180390905,
"scoreConfidence" : [
9401.526216450786,
12084.129052528968
],
"scorePercentiles" : {
"0.0" : 10667.593669791324,
"50.0" : 10746.381981743301,
"90.0" : 10814.507251935001,
"95.0" : 10814.507251935001,
"99.0" : 10814.507251935001,
"99.9" : 10814.507251935001,
"99.99" : 10814.507251935001,
"99.999" : 10814.507251935001,
"99.9999" : 10814.507251935001,
"100.0" : 10814.507251935001
},
"scoreUnit" : "ops/s",
"rawData" : [
[
10667.593669791324,
10814.507251935001,
10746.381981743301
]
]
},
"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" : 20943.362195708207,
"scoreError" : 930.2042724374356,
"scoreConfidence" : [
20013.15792327077,
21873.566468145644
],
"scorePercentiles" : {
"0.0" : 20910.717386090135,
"50.0" : 20917.252581625162,
"90.0" : 21002.11661940932,
"95.0" : 21002.11661940932,
"99.0" : 21002.11661940932,
"99.9" : 21002.11661940932,
"99.99" : 21002.11661940932,
"99.999" : 21002.11661940932,
"99.9999" : 21002.11661940932,
"100.0" : 21002.11661940932
},
"scoreUnit" : "ops/s",
"rawData" : [
[
20917.252581625162,
20910.717386090135,
21002.11661940932
]
]
},
"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" : 40786.054931052255,
"scoreError" : 763.6142024993553,
"scoreConfidence" : [
40022.4407285529,
41549.66913355161
],
"scorePercentiles" : {
"0.0" : 40746.66825771181,
"50.0" : 40781.48997210838,
"90.0" : 40830.00656333657,
"95.0" : 40830.00656333657,
"99.0" : 40830.00656333657,
"99.9" : 40830.00656333657,
"99.99" : 40830.00656333657,
"99.999" : 40830.00656333657,
"99.9999" : 40830.00656333657,
"100.0" : 40830.00656333657
},
"scoreUnit" : "ops/s",
"rawData" : [
[
40746.66825771181,
40781.48997210838,
40830.00656333657
]
]
},
"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" : 1447.9280720291163,
"scoreError" : 634.5695842772686,
"scoreConfidence" : [
813.3584877518476,
2082.4976563063847
],
"scorePercentiles" : {
"0.0" : 1407.7647357651238,
"50.0" : 1467.8366517982047,
"90.0" : 1468.1828285240204,
"95.0" : 1468.1828285240204,
"99.0" : 1468.1828285240204,
"99.9" : 1468.1828285240204,
"99.99" : 1468.1828285240204,
"99.999" : 1468.1828285240204,
"99.9999" : 1468.1828285240204,
"100.0" : 1468.1828285240204
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1468.1828285240204,
1467.8366517982047,
1407.7647357651238
]
]
},
"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" : 1720.6861039049998,
"scoreError" : 23.287545346771704,
"scoreConfidence" : [
1697.3985585582282,
1743.9736492517713
],
"scorePercentiles" : {
"0.0" : 1719.4540991153424,
"50.0" : 1720.6013951571895,
"90.0" : 1722.002817442467,
"95.0" : 1722.002817442467,
"99.0" : 1722.002817442467,
"99.9" : 1722.002817442467,
"99.99" : 1722.002817442467,
"99.999" : 1722.002817442467,
"99.9999" : 1722.002817442467,
"100.0" : 1722.002817442467
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1719.4540991153424,
1720.6013951571895,
1722.002817442467
]
]
},
"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" : 1814.638652527108,
"scoreError" : 581.0902811228427,
"scoreConfidence" : [
1233.5483714042653,
2395.7289336499507
],
"scorePercentiles" : {
"0.0" : 1777.878866031323,
"50.0" : 1831.9900312237464,
"90.0" : 1834.0470603262545,
"95.0" : 1834.0470603262545,
"99.0" : 1834.0470603262545,
"99.9" : 1834.0470603262545,
"99.99" : 1834.0470603262545,
"99.999" : 1834.0470603262545,
"99.9999" : 1834.0470603262545,
"100.0" : 1834.0470603262545
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1831.9900312237464,
1777.878866031323,
1834.0470603262545
]
]
},
"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" : 1812.667051930692,
"scoreError" : 594.0644971875134,
"scoreConfidence" : [
1218.6025547431786,
2406.7315491182053
],
"scorePercentiles" : {
"0.0" : 1775.34068817795,
"50.0" : 1827.4078577222308,
"90.0" : 1835.252609891895,
"95.0" : 1835.252609891895,
"99.0" : 1835.252609891895,
"99.9" : 1835.252609891895,
"99.99" : 1835.252609891895,
"99.999" : 1835.252609891895,
"99.9999" : 1835.252609891895,
"100.0" : 1835.252609891895
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1775.34068817795,
1827.4078577222308,
1835.252609891895
]
]
},
"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" : 589.1964228689931,
"scoreError" : 92.80580554516564,
"scoreConfidence" : [
496.3906173238274,
682.0022284141587
],
"scorePercentiles" : {
"0.0" : 583.7891762147935,
"50.0" : 589.9128810758099,
"90.0" : 593.8872113163757,
"95.0" : 593.8872113163757,
"99.0" : 593.8872113163757,
"99.9" : 593.8872113163757,
"99.99" : 593.8872113163757,
"99.999" : 593.8872113163757,
"99.9999" : 593.8872113163757,
"100.0" : 593.8872113163757
},
"scoreUnit" : "ops/s",
"rawData" : [
[
593.8872113163757,
583.7891762147935,
589.9128810758099
]
]
},
"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" : 507.9578240050117,
"scoreError" : 75.97481505950026,
"scoreConfidence" : [
431.9830089455114,
583.9326390645119
],
"scorePercentiles" : {
"0.0" : 504.2242080573374,
"50.0" : 507.2002061389436,
"90.0" : 512.4490578187541,
"95.0" : 512.4490578187541,
"99.0" : 512.4490578187541,
"99.9" : 512.4490578187541,
"99.99" : 512.4490578187541,
"99.999" : 512.4490578187541,
"99.9999" : 512.4490578187541,
"100.0" : 512.4490578187541
},
"scoreUnit" : "ops/s",
"rawData" : [
[
504.2242080573374,
507.2002061389436,
512.4490578187541
]
]
},
"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" : 4173.0937000492295,
"scoreError" : 627.1362745693248,
"scoreConfidence" : [
3545.9574254799045,
4800.2299746185545
],
"scorePercentiles" : {
"0.0" : 4133.549174459287,
"50.0" : 4189.891941177236,
"90.0" : 4195.839984511163,
"95.0" : 4195.839984511163,
"99.0" : 4195.839984511163,
"99.9" : 4195.839984511163,
"99.99" : 4195.839984511163,
"99.999" : 4195.839984511163,
"99.9999" : 4195.839984511163,
"100.0" : 4195.839984511163
},
"scoreUnit" : "ops/s",
"rawData" : [
[
4133.549174459287,
4189.891941177236,
4195.839984511163
]
]
},
"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" : 4215.493133239361,
"scoreError" : 567.3483398905173,
"scoreConfidence" : [
3648.1447933488435,
4782.841473129878
],
"scorePercentiles" : {
"0.0" : 4192.212861728656,
"50.0" : 4203.455757565789,
"90.0" : 4250.810780423636,
"95.0" : 4250.810780423636,
"99.0" : 4250.810780423636,
"99.9" : 4250.810780423636,
"99.99" : 4250.810780423636,
"99.999" : 4250.810780423636,
"99.9999" : 4250.810780423636,
"100.0" : 4250.810780423636
},
"scoreUnit" : "ops/s",
"rawData" : [
[
4203.455757565789,
4192.212861728656,
4250.810780423636
]
]
},
"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" : 9825.235595444605,
"scoreError" : 780.893748086167,
"scoreConfidence" : [
9044.341847358437,
10606.129343530773
],
"scorePercentiles" : {
"0.0" : 9787.985045398555,
"50.0" : 9815.728499977298,
"90.0" : 9871.993240957965,
"95.0" : 9871.993240957965,
"99.0" : 9871.993240957965,
"99.9" : 9871.993240957965,
"99.99" : 9871.993240957965,
"99.999" : 9871.993240957965,
"99.9999" : 9871.993240957965,
"100.0" : 9871.993240957965
},
"scoreUnit" : "ops/s",
"rawData" : [
[
9787.985045398555,
9871.993240957965,
9815.728499977298
]
]
},
"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" : 14492.179185101098,
"scoreError" : 119.20815751324083,
"scoreConfidence" : [
14372.971027587857,
14611.38734261434
],
"scorePercentiles" : {
"0.0" : 14485.178156928427,
"50.0" : 14493.24351552254,
"90.0" : 14498.115882852328,
"95.0" : 14498.115882852328,
"99.0" : 14498.115882852328,
"99.9" : 14498.115882852328,
"99.99" : 14498.115882852328,
"99.999" : 14498.115882852328,
"99.9999" : 14498.115882852328,
"100.0" : 14498.115882852328
},
"scoreUnit" : "ops/s",
"rawData" : [
[
14498.115882852328,
14493.24351552254,
14485.178156928427
]
]
},
"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" : 1392.0796125498575,
"scoreError" : 170.9637290746455,
"scoreConfidence" : [
1221.115883475212,
1563.043341624503
],
"scorePercentiles" : {
"0.0" : 1381.3352241353734,
"50.0" : 1396.3400143068777,
"90.0" : 1398.5635992073214,
"95.0" : 1398.5635992073214,
"99.0" : 1398.5635992073214,
"99.9" : 1398.5635992073214,
"99.99" : 1398.5635992073214,
"99.999" : 1398.5635992073214,
"99.9999" : 1398.5635992073214,
"100.0" : 1398.5635992073214
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1381.3352241353734,
1396.3400143068777,
1398.5635992073214
]
]
},
"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" : 1723.2654156237932,
"scoreError" : 21.287279996394407,
"scoreConfidence" : [
1701.9781356273988,
1744.5526956201875
],
"scorePercentiles" : {
"0.0" : 1721.9976028094359,
"50.0" : 1723.504385631859,
"90.0" : 1724.2942584300845,
"95.0" : 1724.2942584300845,
"99.0" : 1724.2942584300845,
"99.9" : 1724.2942584300845,
"99.99" : 1724.2942584300845,
"99.999" : 1724.2942584300845,
"99.9999" : 1724.2942584300845,
"100.0" : 1724.2942584300845
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1721.9976028094359,
1724.2942584300845,
1723.504385631859
]
]
},
"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" : 2171.983902990413,
"scoreError" : 244.34170729453993,
"scoreConfidence" : [
1927.642195695873,
2416.3256102849527
],
"scorePercentiles" : {
"0.0" : 2163.58121289327,
"50.0" : 2164.9414172549705,
"90.0" : 2187.4290788229982,
"95.0" : 2187.4290788229982,
"99.0" : 2187.4290788229982,
"99.9" : 2187.4290788229982,
"99.99" : 2187.4290788229982,
"99.999" : 2187.4290788229982,
"99.9999" : 2187.4290788229982,
"100.0" : 2187.4290788229982
},
"scoreUnit" : "ops/s",
"rawData" : [
[
2164.9414172549705,
2163.58121289327,
2187.4290788229982
]
]
},
"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" : 1086.5741343671546,
"scoreError" : 35.24092349993201,
"scoreConfidence" : [
1051.3332108672225,
1121.8150578670866
],
"scorePercentiles" : {
"0.0" : 1084.5708168900528,
"50.0" : 1086.7264383536733,
"90.0" : 1088.4251478577382,
"95.0" : 1088.4251478577382,
"99.0" : 1088.4251478577382,
"99.9" : 1088.4251478577382,
"99.99" : 1088.4251478577382,
"99.999" : 1088.4251478577382,
"99.9999" : 1088.4251478577382,
"100.0" : 1088.4251478577382
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1086.7264383536733,
1084.5708168900528,
1088.4251478577382
]
]
},
"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" : 1782.5467707953364,
"scoreError" : 329.0078818840203,
"scoreConfidence" : [
1453.538888911316,
2111.554652679357
],
"scorePercentiles" : {
"0.0" : 1763.5212392539672,
"50.0" : 1784.7282215864168,
"90.0" : 1799.3908515456249,
"95.0" : 1799.3908515456249,
"99.0" : 1799.3908515456249,
"99.9" : 1799.3908515456249,
"99.99" : 1799.3908515456249,
"99.999" : 1799.3908515456249,
"99.9999" : 1799.3908515456249,
"100.0" : 1799.3908515456249
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1763.5212392539672,
1799.3908515456249,
1784.7282215864168
]
]
},
"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" : 1757.3049002137766,
"scoreError" : 413.4359355005979,
"scoreConfidence" : [
1343.8689647131787,
2170.7408357143745
],
"scorePercentiles" : {
"0.0" : 1740.680271847667,
"50.0" : 1748.1165193922643,
"90.0" : 1783.1179094013983,
"95.0" : 1783.1179094013983,
"99.0" : 1783.1179094013983,
"99.9" : 1783.1179094013983,
"99.99" : 1783.1179094013983,
"99.999" : 1783.1179094013983,
"99.9999" : 1783.1179094013983,
"100.0" : 1783.1179094013983
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1748.1165193922643,
1783.1179094013983,
1740.680271847667
]
]
},
"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" : 1251.2280796431496,
"scoreError" : 442.8927421684071,
"scoreConfidence" : [
808.3353374747426,
1694.1208218115567
],
"scorePercentiles" : {
"0.0" : 1227.06176280786,
"50.0" : 1251.009300714578,
"90.0" : 1275.6131754070104,
"95.0" : 1275.6131754070104,
"99.0" : 1275.6131754070104,
"99.9" : 1275.6131754070104,
"99.99" : 1275.6131754070104,
"99.999" : 1275.6131754070104,
"99.9999" : 1275.6131754070104,
"100.0" : 1275.6131754070104
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1251.009300714578,
1275.6131754070104,
1227.06176280786
]
]
},
"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" : 1200.9714367388303,
"scoreError" : 307.22064538753636,
"scoreConfidence" : [
893.750791351294,
1508.1920821263666
],
"scorePercentiles" : {
"0.0" : 1186.815427651507,
"50.0" : 1196.5045537873768,
"90.0" : 1219.5943287776074,
"95.0" : 1219.5943287776074,
"99.0" : 1219.5943287776074,
"99.9" : 1219.5943287776074,
"99.99" : 1219.5943287776074,
"99.999" : 1219.5943287776074,
"99.9999" : 1219.5943287776074,
"100.0" : 1219.5943287776074
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1219.5943287776074,
1196.5045537873768,
1186.815427651507
]
]
},
"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" : 59998.47018055717,
"scoreError" : 11473.014249504226,
"scoreConfidence" : [
48525.455931052944,
71471.48443006139
],
"scorePercentiles" : {
"0.0" : 59340.95493692058,
"50.0" : 60060.32225313061,
"90.0" : 60594.13335162033,
"95.0" : 60594.13335162033,
"99.0" : 60594.13335162033,
"99.9" : 60594.13335162033,
"99.99" : 60594.13335162033,
"99.999" : 60594.13335162033,
"99.9999" : 60594.13335162033,
"100.0" : 60594.13335162033
},
"scoreUnit" : "ops/s",
"rawData" : [
[
60060.32225313061,
59340.95493692058,
60594.13335162033
]
]
},
"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" : 1121540.7664711438,
"scoreError" : 16777.86103820588,
"scoreConfidence" : [
1104762.905432938,
1138318.6275093497
],
"scorePercentiles" : {
"0.0" : 1121000.789705227,
"50.0" : 1121018.8728501757,
"90.0" : 1122602.6368580286,
"95.0" : 1122602.6368580286,
"99.0" : 1122602.6368580286,
"99.9" : 1122602.6368580286,
"99.99" : 1122602.6368580286,
"99.999" : 1122602.6368580286,
"99.9999" : 1122602.6368580286,
"100.0" : 1122602.6368580286
},
"scoreUnit" : "ops/s",
"rawData" : [
[
1122602.6368580286,
1121000.789705227,
1121018.8728501757
]
]
},
"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,44,3,'all')
f(1,0,44,1,'java/lang/Thread.run')
f(2,0,44,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,44,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,38,1,'java/util/concurrent/FutureTask.run')
f(5,0,38,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,38,1,'java/util/concurrent/FutureTask.run')
f(7,0,38,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,38,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,38,1,'java/lang/reflect/Method.invoke')
f(10,0,38,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,38,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,38,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,38,1,'kyo/bench/jmh_generated/BroadFlatMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,38,1,'kyo/bench/jmh_generated/BroadFlatMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,38,1,'kyo/bench/Bench.forkKyo')
f(16,0,18,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,0,18,2,'kyo.bench.Bench$$anon$1')
f(16,18,18,1,'kyo/bench/Bench.runLoop$2')
f(17,18,3,1,'kyo/bench/Bench$$anon$1.apply')
f(18,18,1,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,18,1,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c82da8.apply')
f(20,18,1,1,'kyo/bench/Bench.$anonfun$2')
f(21,18,1,1,'kyo/concurrent/fibers$Fiber.block')
f(22,18,1,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,19,2,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,19,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,19,2,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(21,19,2,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,19,2,2,'kyo.concurrent.scheduler.IOTask')
f(17,21,15,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,21,15,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,21,15,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,21,15,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,21,8,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,21,8,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,21,1,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,22,7,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,22,7,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,29,4,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,33,3,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,33,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,33,3,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,36,2,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,36,2,1,'kyo/locals$Locals$.save')
f(18,36,2,2,'kyo.locals$Locals$$anon$3')
f(4,38,6,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,38,6,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,38,6,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,38,6,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,38,6,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,38,6,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,38,6,1,'scala/runtime/ObjectRef.create')
f(11,38,6,2,'scala.runtime.ObjectRef')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 768px}
</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(48);
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,192,3,'all')
f(1,0,192,1,'java/lang/Thread.run')
f(2,0,192,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,192,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,62,1,'java/util/concurrent/FutureTask.run')
f(5,0,62,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,62,1,'java/util/concurrent/FutureTask.run')
f(7,0,62,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,62,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,62,1,'java/lang/reflect/Method.invoke')
f(10,0,62,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,62,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,62,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,62,1,'kyo/bench/jmh_generated/BroadFlatMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,62,1,'kyo/bench/jmh_generated/BroadFlatMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,62,1,'kyo/bench/Bench.forkKyo',2,0,0)
f(16,0,1,2,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1',1,0,0)
f(17,0,1,2,'kyo/bench/Bench$$Lambda$39.0x0000000800c82da8.apply',1,0,0)
f(18,0,1,2,'kyo/bench/Bench.$anonfun$2',1,0,0)
f(19,0,1,2,'kyo/concurrent/fibers$Fiber.block',1,0,0)
f(20,0,1,2,'kyo/concurrent/fibers$Fiber$$anon$10.<init>',1,0,0)
f(21,0,1,2,'kyo/ios$KyoIO.<init>',1,0,0)
f(16,1,61,1,'kyo/bench/Bench.runLoop$2',1,0,0)
f(17,1,27,1,'kyo/bench/Bench$$anon$1.apply')
f(18,1,27,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,1,27,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,1,23,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply',2,0,0)
f(21,1,23,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',2,0,0)
f(22,1,23,1,'kyo/concurrent/scheduler/Scheduler$.schedule',2,0,0)
f(23,3,21,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,3,21,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,3,21,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,3,21,1,'jdk/internal/misc/Unsafe.unpark')
f(27,3,2,3,'Unsafe_Unpark')
f(28,3,2,3,'pthread_mutex_lock')
f(27,5,19,3,'pthread_cond_signal')
f(28,5,19,5,'entry_SYSCALL_64_after_hwframe')
f(29,5,19,5,'do_syscall_64')
f(30,5,19,5,'__x64_sys_futex')
f(31,6,18,5,'do_futex')
f(32,6,18,5,'futex_wake')
f(33,6,18,5,'wake_up_q')
f(34,6,18,5,'_raw_spin_unlock_irqrestore')
f(20,24,4,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',4,0,0)
f(21,24,4,2,'kyo/core$internal$KyoCont.<init>',4,0,0)
f(22,25,1,5,'asm_exc_page_fault')
f(23,25,1,5,'exc_page_fault')
f(24,25,1,5,'do_user_addr_fault')
f(25,25,1,5,'handle_mm_fault')
f(26,25,1,5,'__handle_mm_fault')
f(27,25,1,5,'do_huge_pmd_anonymous_page')
f(28,25,1,5,'alloc_pages_vma')
f(29,25,1,5,'__alloc_pages')
f(30,25,1,5,'get_page_from_freelist')
f(31,25,1,5,'clear_page_erms')
f(22,26,2,2,'kyo/core$internal$Kyo.<init>',2,0,0)
f(17,28,34,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply',1,0,0)
f(18,28,34,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply',1,0,0)
f(19,28,34,1,'kyo/concurrent/scheduler/IOPromise.block',1,0,0)
f(20,28,34,1,'kyo/concurrent/scheduler/IOPromise.loop$4',1,0,0)
f(21,28,33,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,28,33,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,30,31,1,'java/util/concurrent/locks/LockSupport.park')
f(24,30,31,1,'jdk/internal/misc/Unsafe.park')
f(25,30,4,3,'Unsafe_Park')
f(26,30,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,31,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,31,1,5,'__x64_sys_futex')
f(26,32,1,4,'Parker::park(bool, long)')
f(26,33,1,3,'pthread_cond_wait')
f(25,34,26,3,'[unknown]')
f(26,34,25,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,36,23,5,'entry_SYSCALL_64_after_hwframe')
f(28,36,23,5,'do_syscall_64')
f(29,36,21,5,'__x64_sys_futex')
f(30,36,21,5,'do_futex')
f(31,36,21,5,'futex_wait')
f(32,38,1,5,'__get_user_nocheck_4')
f(32,39,18,5,'futex_wait_queue_me')
f(33,40,17,5,'schedule')
f(34,40,17,5,'__schedule')
f(35,42,15,5,'finish_task_switch.isra.0')
f(29,57,2,5,'syscall_exit_to_user_mode')
f(30,57,2,5,'exit_to_user_mode_prepare')
f(31,57,2,5,'exit_to_user_mode_loop')
f(32,57,2,5,'__rseq_handle_notify_resume')
f(33,57,1,5,'__put_user_nocheck_8')
f(33,58,1,5,'rseq_ip_fixup')
f(34,58,1,5,'__get_user_8')
f(26,59,1,3,'pthread_cond_wait')
f(25,60,1,4,'java_lang_Thread::get_thread_status(oopDesc*)')
f(21,61,1,2,'kyo/concurrent/scheduler/IOPromise.loop$5',1,0,0)
f(22,61,1,2,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply',1,0,0)
f(23,61,1,2,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply',1,0,0)
f(24,61,1,2,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared',1,0,0)
f(25,61,1,2,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext',1,0,0)
f(4,62,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,62,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,62,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,62,1,1,'java/lang/Thread.sleep')
f(8,62,1,3,'[unknown]')
f(9,62,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,62,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,62,1,5,'do_syscall_64')
f(12,62,1,5,'__x64_sys_futex')
f(13,62,1,5,'do_futex')
f(14,62,1,5,'futex_wait')
f(15,62,1,5,'futex_wait_queue_me')
f(16,62,1,5,'schedule')
f(17,62,1,5,'__schedule')
f(18,62,1,5,'finish_task_switch.isra.0')
f(4,63,129,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,63,129,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,63,129,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,63,90,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,63,90,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,63,66,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,63,66,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,63,66,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e9f8.apply')
f(12,63,66,1,'kyo/bench/Bench.$anonfun$1')
f(13,63,66,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,63,66,1,'kyo/bench/BroadFlatMapBench.kyoBench')
f(15,63,66,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(16,63,28,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(17,63,28,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(18,63,28,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(19,63,28,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,63,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(21,63,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(22,63,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(23,63,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,63,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,63,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(26,63,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,63,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,63,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,63,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,63,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,63,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,63,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,63,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(34,63,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,63,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,63,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,63,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(38,63,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,63,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,63,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,63,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(42,63,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(43,63,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(44,63,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(45,63,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(46,63,1,2,'scala/math/BigInt$.apply',1,0,0)
f(47,63,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,64,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,64,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,64,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,64,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,64,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,64,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,64,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(35,64,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,64,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,64,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,64,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,64,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,64,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,64,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(42,64,1,2,'scala/math/BigInt.<init>',1,0,0)
f(33,65,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,65,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,65,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(36,65,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d44400.newInvokeSpecial',1,0,0)
f(37,65,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.<init>',1,0,0)
f(24,66,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,66,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,66,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(27,66,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,66,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,66,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,66,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,66,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(32,66,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,66,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,66,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,66,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,66,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(37,66,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,66,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,67,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,67,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,67,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,67,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(29,67,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,67,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,67,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,67,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(33,67,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,67,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,67,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,67,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,67,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(27,68,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,68,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,68,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,68,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,68,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,68,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,68,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,68,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,68,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(36,68,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,68,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,69,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,69,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(32,69,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,69,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,69,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(36,69,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,70,21,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,70,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(22,70,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(23,70,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,70,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,70,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,70,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(27,70,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,70,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,70,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,70,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,70,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,70,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,70,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(34,70,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,70,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,70,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,71,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,71,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,71,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(28,71,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,71,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,71,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,71,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,71,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,71,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,71,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(35,71,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(36,71,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(26,72,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,72,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,72,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(29,72,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,72,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,72,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,72,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(33,72,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,72,1,1,'kyo/bench/BroadFlatMapBench.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(31,73,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,73,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,73,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(34,73,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,73,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,73,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,73,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(38,73,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(39,73,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(40,73,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$1',1,0,0)
f(41,73,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$57.0x0000000800d48230.apply',1,0,0)
f(27,74,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,74,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,74,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,74,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,74,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,75,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,75,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(35,75,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,76,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,77,14,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,77,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,77,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(24,77,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,77,5,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.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,77,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(32,77,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,77,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,77,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,77,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(36,77,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d44400.newInvokeSpecial',1,0,0)
f(37,77,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.<init>',1,0,0)
f(26,78,4,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,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,78,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,79,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,79,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(29,79,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(28,80,2,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.kyoFib$1')
f(34,80,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,80,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,80,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,81,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,81,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(32,81,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,82,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,82,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,82,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(25,82,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,82,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,82,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,82,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(29,82,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,82,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,82,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(32,82,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(33,82,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(34,83,1,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$56.0x0000000800d45000.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,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,83,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(41,83,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,83,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,83,1,2,'scala/math/BigInt$.apply',1,0,0)
f(44,83,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,84,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,84,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,84,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(23,85,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,85,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,85,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(26,85,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,85,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,85,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,85,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,85,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,86,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,86,1,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(24,87,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,87,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,87,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(27,87,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,87,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,87,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,87,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,87,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,87,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,87,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,87,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,87,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,87,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,87,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(25,88,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,88,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,88,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(28,88,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,88,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,88,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,88,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,88,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,89,1,2,'scala/math/BigInt$.apply',1,0,0)
f(25,89,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(22,90,1,2,'scala/math/BigInt$.apply',1,0,0)
f(23,90,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(16,91,38,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(17,91,16,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(18,91,16,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(19,91,16,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(20,91,16,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,91,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(22,91,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(23,91,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,91,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,91,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,91,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(27,91,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,91,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,91,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,91,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,91,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,91,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,91,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,91,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,91,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,91,1,2,'scala/math/BigInt$.apply',1,0,0)
f(25,92,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,92,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(27,92,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',2,0,0)
f(28,94,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,94,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,94,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,94,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,94,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,94,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(34,94,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,94,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,94,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,94,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(26,95,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,95,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,95,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(29,95,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,95,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,95,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,95,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,95,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,95,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(35,95,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,95,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,95,1,2,'scala/math/BigInt$.apply',1,0,0)
f(27,96,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,96,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,96,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,96,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,96,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,97,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,97,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,97,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(24,97,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,97,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,97,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,97,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(28,97,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,97,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,97,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,97,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(32,97,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(33,98,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,98,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,98,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,98,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,98,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,98,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(39,98,1,2,'scala/math/BigInt.<init>',1,0,0)
f(26,99,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,99,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,99,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,99,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,99,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,99,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,99,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,99,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(34,99,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,99,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,99,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,99,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,100,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,100,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,100,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(28,101,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,101,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,101,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,101,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,101,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,101,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,101,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(22,102,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,102,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,102,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(25,102,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,102,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,102,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,102,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,102,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,102,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,102,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,102,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,103,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,103,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(23,104,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,104,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,104,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(26,104,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,104,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,104,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,104,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,104,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,104,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,104,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,104,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,105,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,105,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,105,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,105,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(28,105,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$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,2,'scala/math/BigInt$.apply',1,0,0)
f(32,105,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,106,1,2,'scala/math/BigInt$.apply',1,0,0)
f(28,106,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(17,107,22,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(18,107,12,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(19,107,12,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(20,107,12,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(21,107,12,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,107,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,107,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(24,107,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,107,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,107,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,107,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,107,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(29,107,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,107,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,107,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,107,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,107,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,107,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(35,107,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(27,108,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,108,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,108,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,108,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,108,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,108,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,109,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,109,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,109,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(25,109,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,109,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,109,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,109,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(29,109,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,109,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,109,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,109,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(33,109,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,109,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,109,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,109,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(37,109,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,109,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,110,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,110,2,2,'scala/math/BigInt$.apply',2,0,0)
f(33,110,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(27,112,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,112,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(29,112,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(23,113,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,113,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,113,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(26,113,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,113,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,113,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,113,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,113,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,113,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,113,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,113,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,113,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,113,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,114,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,114,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,114,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,115,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,115,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$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,2,'scala/math/BigInt$.apply',1,0,0)
f(27,116,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,116,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,116,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,116,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,116,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,117,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,117,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,118,1,2,'scala/math/BigInt$.apply',1,0,0)
f(27,118,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(18,119,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(19,119,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(20,119,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(21,119,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(22,119,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,119,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,119,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(25,119,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,119,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,119,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,119,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,119,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,119,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,119,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,119,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,119,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,119,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(35,119,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,119,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,119,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,119,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,119,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(23,120,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,120,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,120,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(26,120,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,120,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,120,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(32,120,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(24,121,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,121,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,121,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,121,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(28,121,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(29,121,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(27,122,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,122,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,122,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(30,122,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(19,123,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,123,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(21,123,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(22,123,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(23,123,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,123,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,123,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(26,123,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(25,124,1,2,'scala/math/BigInt$.apply',1,0,0)
f(26,124,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(20,125,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,125,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(22,125,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(23,125,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,125,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,125,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,125,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,125,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(28,125,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(21,126,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,126,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,126,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,126,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,126,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(26,126,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,126,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,126,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,126,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,126,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,126,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,126,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,126,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,127,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,127,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,127,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(27,127,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(28,127,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(26,128,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,128,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(28,128,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(9,129,24,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,129,24,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,129,24,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,129,24,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,129,24,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,129,24,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,129,24,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,129,24,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,129,24,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,129,24,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,129,24,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,129,24,1,'jdk/internal/misc/Unsafe.unpark')
f(21,129,1,3,'Unsafe_Unpark')
f(22,129,1,3,'pthread_mutex_unlock')
f(21,130,23,3,'pthread_cond_signal')
f(22,130,23,5,'entry_SYSCALL_64_after_hwframe')
f(23,130,23,5,'do_syscall_64')
f(24,130,22,5,'__x64_sys_futex')
f(25,131,21,5,'do_futex')
f(26,131,21,5,'futex_wake')
f(27,132,1,5,'mark_wake_futex')
f(28,132,1,5,'plist_del')
f(27,133,1,5,'wake_q_add_safe')
f(27,134,18,5,'wake_up_q')
f(28,134,18,5,'_raw_spin_unlock_irqrestore')
f(24,152,1,5,'syscall_enter_from_user_mode')
f(7,153,3,2,'kyo/concurrent/scheduler/Queue.poll',1,0,0)
f(8,153,3,2,'kyo/concurrent/scheduler/Queue.modify',1,0,0)
f(9,153,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(10,153,1,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',1,0,0)
f(11,153,1,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(12,153,1,2,'java/util/Objects.requireNonNull',1,0,0)
f(9,154,2,1,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47148.apply')
f(10,154,2,1,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1')
f(11,154,2,1,'scala/collection/mutable/PriorityQueue.dequeue')
f(7,156,36,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,156,36,1,'kyo/concurrent/scheduler/Worker.park')
f(9,156,36,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,156,36,1,'jdk/internal/misc/Unsafe.park')
f(11,156,1,4,'Parker::park(bool, long)')
f(11,157,5,3,'Unsafe_Park')
f(12,158,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,158,2,5,'entry_SYSCALL_64_after_hwframe')
f(14,158,2,5,'do_syscall_64')
f(15,158,1,5,'__x64_sys_futex')
f(16,158,1,5,'do_futex')
f(17,158,1,5,'futex_wake')
f(18,158,1,5,'get_futex_key')
f(15,159,1,5,'syscall_enter_from_user_mode')
f(12,160,1,4,'Parker::park(bool, long)')
f(12,161,1,3,'clock_gettime')
f(13,161,1,3,'[vdso]')
f(11,162,30,3,'[unknown]')
f(12,162,29,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,164,27,5,'entry_SYSCALL_64_after_hwframe')
f(14,164,27,5,'do_syscall_64')
f(15,164,25,5,'__x64_sys_futex')
f(16,164,24,5,'do_futex')
f(17,164,24,5,'futex_wait')
f(18,165,2,5,'__get_user_nocheck_4')
f(18,167,16,5,'futex_wait_queue_me')
f(19,167,1,5,'hrtimer_sleeper_start_expires')
f(20,167,1,5,'_raw_spin_unlock_irqrestore')
f(19,168,15,5,'schedule')
f(20,168,15,5,'__schedule')
f(21,168,15,5,'finish_task_switch.isra.0')
f(18,183,5,5,'futex_wait_setup')
f(16,188,1,5,'get_timespec64')
f(17,188,1,5,'copy_user_enhanced_fast_string')
f(15,189,2,5,'syscall_exit_to_user_mode')
f(16,189,2,5,'exit_to_user_mode_prepare')
f(17,189,2,5,'exit_to_user_mode_loop')
f(18,190,1,5,'__rseq_handle_notify_resume')
f(19,190,1,5,'rseq_ip_fixup')
f(20,190,1,5,'__get_user_8')
f(12,191,1,3,'pthread_mutex_trylock')
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,7,3,'[unknown_Java]')
f(2,0,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(1,7,292,1,'java/lang/Thread.run')
f(2,7,292,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,7,292,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,7,292,1,'java/util/concurrent/FutureTask.run')
f(5,7,292,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,7,292,1,'java/util/concurrent/FutureTask.run')
f(7,7,292,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,7,292,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,7,292,1,'java/lang/reflect/Method.invoke')
f(10,7,292,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,7,292,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,7,292,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,7,292,1,'kyo/bench/jmh_generated/BroadFlatMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,7,292,1,'kyo/bench/jmh_generated/BroadFlatMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,7,292,1,'kyo/bench/Bench.syncKyo')
f(16,7,292,1,'kyo/bench/BroadFlatMapBench.kyoBench')
f(17,7,292,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(18,7,111,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(19,7,111,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(20,7,111,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(21,8,110,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,9,44,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,9,44,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(24,9,44,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,9,44,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,9,19,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(27,9,19,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(28,10,18,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,10,18,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,10,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,10,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,10,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,10,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,11,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,11,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,11,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,11,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,11,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(39,11,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(40,11,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(41,11,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,11,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,11,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(44,11,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(45,11,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(46,11,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(47,11,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(48,11,1,2,'scala/math/BigInt$.apply',1,0,0)
f(49,11,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(38,12,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,12,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,12,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,12,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,12,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(43,12,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(44,12,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(38,13,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,14,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,14,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,14,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,14,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,14,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,14,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,14,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,14,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,15,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,15,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,15,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(37,16,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,16,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,17,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,17,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,18,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,18,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,18,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,18,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,18,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,20,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,20,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,20,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,20,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,20,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,20,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,20,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,20,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,20,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,21,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,21,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,21,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,21,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(35,22,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,22,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,22,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(38,22,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(39,22,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(31,23,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,23,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,23,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,23,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,23,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,23,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,23,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,23,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,23,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,24,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,24,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,24,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,24,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,24,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,24,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,24,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,25,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,25,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,25,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(40,25,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,26,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,26,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,26,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,26,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,27,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,27,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,28,25,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,28,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,28,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,28,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,28,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,28,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,28,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,28,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,28,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,28,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,28,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,28,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,29,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,29,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,30,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,30,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,30,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,31,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,32,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,33,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,33,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,33,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,33,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,33,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,33,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,33,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,33,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(40,33,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(41,33,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(32,34,2,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,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,35,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,35,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,36,17,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,36,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,36,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,36,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,36,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,36,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,36,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,36,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,36,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,36,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,36,2,2,'scala/math/BigInt$.apply',2,0,0)
f(38,36,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(28,38,15,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,39,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,39,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,39,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,39,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,39,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,39,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,40,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,40,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,40,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(33,42,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,42,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,42,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,42,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,42,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,42,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,42,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(40,42,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(41,42,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(42,42,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$1',1,0,0)
f(43,42,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$40.0x0000000800ca15f8.apply',1,0,0)
f(29,43,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,43,5,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(31,43,5,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(32,44,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(33,45,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,45,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,45,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,45,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,46,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,46,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,46,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,46,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,47,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.kyoFib$1')
f(30,48,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,48,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,48,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,48,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,48,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,48,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,48,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,48,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,49,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,49,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,49,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,49,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,49,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,51,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,51,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,51,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(39,51,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(40,51,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(32,52,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,52,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,52,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,52,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,52,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,52,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,52,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,52,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(22,53,65,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,53,18,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,53,18,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(25,53,18,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,53,18,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,53,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,53,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,53,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,53,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,53,5,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(32,53,5,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(33,54,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(34,55,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,55,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,55,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,55,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,55,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,55,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,55,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,55,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,56,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,56,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,56,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,56,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,56,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,57,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,57,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,57,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,57,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,57,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,58,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,58,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,58,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,58,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,58,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,58,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,58,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,58,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,58,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,58,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,58,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,58,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,59,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,59,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,59,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,59,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,59,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,59,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,59,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,60,11,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,60,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(29,60,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(30,60,3,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(31,61,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,61,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,61,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,61,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,61,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,61,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,61,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,61,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,61,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,62,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,62,1,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(28,63,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,63,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,63,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,63,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,63,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,63,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,63,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,63,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,63,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,63,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,64,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,64,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,64,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,64,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(33,65,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,65,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,66,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,66,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,66,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,66,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,66,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,66,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,67,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,67,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,68,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,68,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,69,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,69,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,69,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,69,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,69,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,69,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,70,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,70,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,70,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,70,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,70,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,70,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,70,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,70,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(23,71,47,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,71,13,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,71,13,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(26,71,13,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,71,13,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,71,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(29,71,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(30,71,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(31,72,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,72,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,72,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,72,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,72,3,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(36,73,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,73,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,73,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,73,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,73,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,73,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(39,74,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,74,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,74,1,2,'scala/math/BigInt.<init>',1,0,0)
f(33,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,75,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,75,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,75,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,75,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,75,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,75,1,2,'scala/math/BigInt.<init>',1,0,0)
f(28,76,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,76,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,76,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,76,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,76,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,76,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,76,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,76,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,76,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,76,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,76,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,76,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,76,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,76,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,76,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,76,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,77,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,77,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,77,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,77,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,77,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,77,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,77,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,77,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(38,78,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,78,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,79,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,79,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,79,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,79,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,80,4,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,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,80,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,80,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,80,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,80,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(34,81,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,82,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,82,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.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,82,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,82,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,82,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,82,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(41,82,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(42,82,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(43,82,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(44,82,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(45,82,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(31,83,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,83,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,84,34,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,84,10,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(26,84,10,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(27,85,9,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,85,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,85,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,85,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,85,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,85,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,85,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,85,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,85,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,85,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,86,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,87,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,87,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,87,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,87,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,87,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,87,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,87,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,87,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,87,1,2,'scala/math/BigInt.<init>',1,0,0)
f(34,88,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,88,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,89,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,89,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,89,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,89,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,89,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,89,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,89,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,89,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,89,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,90,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,90,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,90,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,90,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,90,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,90,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,90,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,90,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,90,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,90,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,91,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,91,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(34,91,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(35,91,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(33,92,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,92,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,92,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,92,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,92,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,92,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,93,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,93,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,93,1,2,'scala/math/BigInt.<init>',1,0,0)
f(25,94,24,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,94,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(27,94,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(28,94,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(26,95,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,95,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,95,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,95,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,95,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,95,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,95,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,95,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,95,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,95,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(36,95,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(37,95,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',2,0,0)
f(30,97,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,97,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,97,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,97,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,97,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,98,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,98,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,98,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,98,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,98,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,98,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,98,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,99,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,100,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,100,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,100,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(32,101,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,101,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,101,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
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(26,102,16,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,102,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(28,102,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(29,102,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(30,103,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,103,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,103,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,103,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,103,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,103,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,103,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,104,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,105,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,106,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,106,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$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(36,107,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,107,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,108,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,108,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,108,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,109,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,109,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,109,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,110,8,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,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,110,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,110,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(28,111,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,111,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,111,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,111,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,111,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,111,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,111,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,111,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,111,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,112,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,112,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(31,112,2,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',2,0,0)
f(32,112,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',2,0,0)
f(30,114,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,114,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,114,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,114,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,114,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(32,115,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,115,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,116,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,116,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,117,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,117,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(18,118,181,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(19,118,70,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(20,118,70,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(21,118,70,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(22,118,70,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,118,25,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(24,118,25,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(25,118,25,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(26,119,24,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,119,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,119,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,119,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,119,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,119,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,119,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,119,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,119,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,119,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,119,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,119,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,119,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,120,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,120,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,120,1,2,'scala/math/BigInt.<init>',1,0,0)
f(31,121,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,121,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,121,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,121,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,121,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,122,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,122,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,122,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,122,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,122,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,123,3,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$39.0x0000000800ca1228.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.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,123,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,123,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,123,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,123,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,123,1,2,'scala/math/BigInt$.apply',1,0,0)
f(43,123,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(44,123,1,2,'scala/math/BigInt.<init>',1,0,0)
f(33,124,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,124,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,124,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,124,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,124,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,124,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,124,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(40,124,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(39,125,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,125,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,125,1,2,'scala/math/BigInt.<init>',1,0,0)
f(27,126,17,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,126,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,126,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,126,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,126,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,126,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,126,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,126,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,126,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,126,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,127,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(38,127,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(39,127,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(28,128,15,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,128,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,128,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,128,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,128,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,128,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,128,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,129,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,129,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,129,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,129,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,130,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,130,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,130,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,130,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,130,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,130,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,130,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,130,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,130,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,130,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,130,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(44,130,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(45,130,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(46,130,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(47,130,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$1',1,0,0)
f(29,131,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,131,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,131,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,132,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,132,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,132,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,132,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',3,0,0)
f(36,132,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',3,0,0)
f(37,133,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',2,0,0)
f(35,135,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,135,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,135,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(38,135,1,2,'scala/math/BigInt.<init>',1,0,0)
f(30,136,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,136,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,136,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,136,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,136,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,136,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,136,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,136,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,136,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,136,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,136,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,136,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,137,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,137,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,137,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,137,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,137,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,137,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,137,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(36,138,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,139,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,139,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,140,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,140,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,140,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,140,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,140,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,140,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(37,140,1,2,'scala/math/BigInt.<init>',1,0,0)
f(29,141,2,2,'scala/math/BigInt$.apply',2,0,0)
f(30,141,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(23,143,45,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,144,14,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,144,14,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(26,144,14,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,144,14,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,144,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,144,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,144,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,144,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,144,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,144,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,144,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,144,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,144,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,144,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,144,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(36,145,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,145,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,146,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,146,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,146,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,146,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,146,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,146,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,146,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,146,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(40,146,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,147,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,147,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,147,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,147,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,147,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,147,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,148,1,2,'scala/math/BigInt$.apply',1,0,0)
f(28,149,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,149,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,149,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,149,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,149,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,149,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,149,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,149,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,149,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(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,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(44,149,1,2,'scala/math/BigInt$.apply',1,0,0)
f(45,149,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,150,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,150,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,150,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,150,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,150,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,150,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,150,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(40,150,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(41,150,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(42,150,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$1',1,0,0)
f(43,150,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$40.0x0000000800ca15f8.apply',1,0,0)
f(29,151,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,151,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,151,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,151,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,151,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,152,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,152,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,152,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,152,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,152,2,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(39,153,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,153,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,153,1,2,'scala/math/BigInt$.apply',1,0,0)
f(42,153,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,154,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,154,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,154,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,154,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,154,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,154,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,154,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,154,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,154,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,154,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,154,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,154,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,154,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,154,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(44,154,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(45,154,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(46,154,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(47,154,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$1',1,0,0)
f(35,155,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,155,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,155,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(36,156,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,156,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,157,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,157,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,157,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,157,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,157,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,157,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,157,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,157,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,157,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(40,157,1,2,'scala/math/BigInt.<init>',1,0,0)
f(24,158,29,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,158,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,158,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,158,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,158,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,158,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,158,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,158,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,158,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,158,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,159,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,159,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,160,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,160,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,160,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,160,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,160,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,160,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,160,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,160,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(30,161,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,161,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,161,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,161,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,161,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(25,162,24,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,162,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,162,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,162,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,162,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,162,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,162,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,162,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,162,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,162,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,162,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,162,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,162,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,162,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,162,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,162,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,163,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,163,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,163,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,163,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,163,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,163,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,164,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,164,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,164,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,164,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,164,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,165,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,165,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,165,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,165,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,165,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,165,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,166,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,166,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,167,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,167,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,167,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,167,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,167,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,168,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,168,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,169,17,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,169,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,169,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,169,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,169,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,170,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,170,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,170,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,170,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,170,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,170,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,170,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,170,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,171,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,171,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,171,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,171,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(31,172,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,172,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,172,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,173,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,173,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,173,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,173,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,173,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,173,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,174,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,174,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,175,11,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,175,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,175,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,175,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,175,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,175,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,175,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,175,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,175,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,176,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,176,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,176,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(28,177,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,177,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,177,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,177,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,177,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,177,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,177,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,177,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(36,177,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(37,177,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(35,178,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,178,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(37,178,1,2,'scala/math/BigInt.<init>',1,0,0)
f(29,179,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,179,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,179,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,179,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,179,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,179,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,179,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,180,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,180,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,180,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,180,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,180,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,181,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,181,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,181,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,181,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,181,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,181,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,181,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,181,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,182,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,182,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,182,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(35,182,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(36,182,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(37,182,1,2,'java/lang/Object.<init>',1,0,0)
f(34,183,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,183,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,184,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,184,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,185,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,185,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(25,186,1,2,'scala/math/BigInt$.apply',1,0,0)
f(26,186,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,187,1,2,'scala/math/BigInt$.apply',1,0,0)
f(25,187,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,187,1,2,'scala/math/BigInt.<init>',1,0,0)
f(19,188,111,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,188,39,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(21,188,39,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(22,188,39,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(23,188,39,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,188,16,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,188,16,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(26,188,16,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,188,16,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,188,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(29,188,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(30,188,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',2,0,0)
f(31,190,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,190,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,190,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,190,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,190,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,190,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,190,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,190,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,190,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,190,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,190,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,190,1,2,'scala/math/BigInt$.apply',1,0,0)
f(43,190,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(37,191,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,191,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,192,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,192,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,192,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,192,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,192,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,192,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,192,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(39,192,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(40,192,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(41,192,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,194,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,194,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,194,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,194,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,195,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,195,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,195,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,195,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,195,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,195,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,195,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,196,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,196,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,196,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,196,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(39,196,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(40,196,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(41,196,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,197,3,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,2,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(35,199,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,199,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,199,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,200,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,200,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,200,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,200,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,200,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,200,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,200,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,200,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,200,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,200,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,200,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(40,200,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(41,200,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(34,201,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,201,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,201,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',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,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,202,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',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,'scala/math/BigInt$.apply',1,0,0)
f(34,203,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,204,23,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,204,9,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(26,204,9,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(27,204,9,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(28,205,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,206,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,206,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,206,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,206,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,206,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,206,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,206,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(33,207,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,207,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,207,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,207,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(29,208,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,208,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,208,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,209,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,209,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,210,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,210,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,210,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,211,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,211,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,211,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(30,212,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,212,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(25,213,14,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,213,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,213,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,213,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,213,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,213,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,213,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,213,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(30,214,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,214,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,214,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,214,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,214,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,214,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,216,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$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,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,217,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,217,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,218,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,218,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(28,218,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(29,219,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,219,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,219,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,219,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,219,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,219,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,219,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,219,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,219,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,219,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(36,220,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,220,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,221,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,221,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,221,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,221,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,221,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,221,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,221,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,221,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,221,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,221,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,222,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,222,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,222,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,222,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,222,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,223,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
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(28,224,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,224,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(30,224,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(31,224,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(32,225,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$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,'scala/math/BigInt$.apply',1,0,0)
f(36,225,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,226,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,226,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,226,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,227,72,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,227,30,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(22,227,30,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(23,227,30,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,227,30,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,227,12,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,227,12,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,227,12,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,227,12,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,227,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,227,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,227,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,227,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,227,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,227,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,227,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,227,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,227,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,227,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(39,227,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(40,227,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(41,227,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,228,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,228,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,228,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,229,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,229,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,229,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,229,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,229,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,229,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,230,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,230,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,231,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,231,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,231,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,232,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,232,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,234,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,234,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,235,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,236,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,236,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,236,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,236,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,236,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,236,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,236,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,236,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,236,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,237,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,237,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,237,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,237,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,237,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,237,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(31,238,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,238,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(25,239,18,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,239,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,239,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,239,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,239,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,239,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,239,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,239,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,239,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,239,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,239,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,239,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,239,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(36,240,2,2,'scala/math/BigInt$.apply',2,0,0)
f(37,240,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(30,242,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,242,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,242,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,242,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,242,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,242,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,242,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,242,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,242,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,242,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(40,242,1,2,'scala/math/BigInt.<init>',1,0,0)
f(37,243,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,243,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,244,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,244,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,244,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,244,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,244,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,245,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,245,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,246,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,246,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(28,246,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(29,246,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(30,247,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,247,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,247,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,247,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,247,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,248,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,248,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(31,249,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,249,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,249,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,249,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(32,250,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,250,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,250,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,250,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,250,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,250,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,250,1,2,'scala/math/BigInt$.apply',1,0,0)
f(27,251,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,251,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,251,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,251,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,251,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,251,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,251,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,252,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,252,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,252,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(37,252,1,2,'scala/math/BigInt.<init>',1,0,0)
f(28,253,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,253,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,253,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,253,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,253,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,253,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,253,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,254,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,254,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,255,2,2,'scala/math/BigInt$.apply',2,0,0)
f(27,255,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(28,256,1,2,'scala/math/BigInt.<init>',1,0,0)
f(21,257,42,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,257,17,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,257,17,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(24,257,17,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,257,17,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,258,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,258,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,258,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,258,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,258,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,258,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,258,3,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(33,259,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,259,2,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(35,260,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,261,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,261,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,261,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,261,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,261,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,261,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,261,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,262,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,262,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,263,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,263,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,264,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,264,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,264,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,264,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(26,265,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,265,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(28,265,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(29,265,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(30,266,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,266,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,266,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,266,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,267,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,267,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,267,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,267,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,268,1,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,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,269,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,269,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,269,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,269,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,269,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,269,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,269,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,269,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,269,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,269,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,269,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,270,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,271,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,271,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,271,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(32,271,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(33,271,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(30,272,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,272,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,273,1,2,'scala/math/BigInt$.apply',1,0,0)
f(22,274,25,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,274,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,274,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(25,274,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,274,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,274,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,274,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,274,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,274,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,274,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,274,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,274,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,274,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,274,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,274,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(31,275,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,275,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,275,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
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(27,276,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,276,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,276,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,276,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,276,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,276,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,276,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,277,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,277,1,2,'scala/math/BigInt$.apply',1,0,0)
f(28,278,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,278,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,278,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,278,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,278,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,278,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,278,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,278,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,278,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,278,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,279,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,280,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,280,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,280,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,280,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,280,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,281,18,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,281,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,281,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(26,281,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,281,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,283,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,283,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,283,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,283,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,283,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,284,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,285,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,285,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,285,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,285,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,285,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,285,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,285,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,285,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,285,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,285,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,286,13,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,286,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,286,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,286,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,286,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,286,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,286,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,286,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,286,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,286,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,287,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,287,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,287,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,287,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,287,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,287,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,287,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,288,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,288,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,289,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,289,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(25,290,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,290,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,290,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,290,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,290,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,290,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,290,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,290,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,290,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,290,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,290,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,291,2,2,'scala/math/BigInt$.apply',2,0,0)
f(33,291,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(26,293,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,293,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,293,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,293,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,293,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(27,295,4,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,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,297,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,297,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,297,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,297,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,297,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,298,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,298,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,298,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,298,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,298,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,298,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,298,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 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,8081,3,'all')
f(1,0,8078,1,'java/lang/Thread.run')
f(2,0,8078,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,8078,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,629,1,'java/util/concurrent/FutureTask.run')
f(5,0,629,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,629,1,'java/util/concurrent/FutureTask.run')
f(7,0,629,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,629,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,629,1,'java/lang/reflect/Method.invoke')
f(10,0,629,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,629,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,629,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,629,1,'kyo/bench/jmh_generated/ChainedForkBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,629,1,'kyo/bench/jmh_generated/ChainedForkBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,629,1,'kyo/bench/Bench.forkKyo')
f(16,0,80,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,80,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,80,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,80,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3f088')
f(16,80,68,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,80,68,2,'kyo.bench.Bench$$anon$1')
f(16,148,345,1,'kyo/bench/Bench.runLoop$2')
f(17,148,152,1,'kyo/bench/Bench$$anon$1.apply')
f(18,148,54,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,148,54,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c83420.apply')
f(20,148,54,1,'kyo/bench/Bench.$anonfun$2')
f(21,148,54,1,'kyo/concurrent/fibers$Fiber.block')
f(22,148,54,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,202,98,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,202,98,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,202,98,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(21,202,98,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,202,89,2,'kyo.concurrent.scheduler.IOTask')
f(22,291,9,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,291,9,2,'kyo.concurrent.fibers$Fiber')
f(17,300,193,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,300,193,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,300,193,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,300,193,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,300,90,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,300,90,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,300,74,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,374,16,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,374,16,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,390,31,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,421,72,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,421,72,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,421,72,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,493,136,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,493,83,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,493,83,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,493,83,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,493,83,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(17,576,34,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,576,34,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,610,19,1,'kyo/locals$Locals$.save')
f(18,610,19,2,'kyo.locals$Locals$$anon$3')
f(4,629,1,1,'java/util/concurrent/ThreadPoolExecutor.getTask')
f(5,629,1,1,'java/util/concurrent/LinkedBlockingQueue.take')
f(6,629,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject.await')
f(7,629,1,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode')
f(4,630,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f2b8.run')
f(5,630,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,630,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,630,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,630,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,630,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,630,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,630,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,641,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f4e0.run')
f(5,641,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,641,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,641,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,641,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,641,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,641,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$70+0x0000000800d4ea70')
f(4,652,7426,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fda8.run')
f(5,652,7426,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,652,7426,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,652,6965,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,652,6965,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,652,1,1,'kyo/bench/ChainedForkBench$$anon$1.apply')
f(10,652,1,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(11,652,1,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(12,652,1,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$Promise$$anon$26$$_$loop$22')
f(13,652,1,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(14,652,1,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(15,652,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,652,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,652,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,652,1,1,'scala/runtime/function/JProcedure1.apply')
f(19,652,1,1,'scala/runtime/function/JProcedure1.apply')
f(20,652,1,1,'kyo/concurrent/scheduler/IOTask$$Lambda$64.0x0000000800d4af78.applyVoid')
f(21,652,1,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(22,652,1,1,'kyo/concurrent/scheduler/IOPromise.become')
f(23,652,1,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(24,652,1,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(25,652,1,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(26,652,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(27,652,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(9,653,2740,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,653,2740,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,653,2740,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,653,2740,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(13,653,2740,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,653,404,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(14,1057,1669,2,'kyo.concurrent.scheduler.IOTask')
f(14,2726,667,1,'kyo/concurrent/fibers$Fiber$.promise')
f(15,2726,667,2,'kyo.concurrent.fibers$Fiber')
f(9,3393,1,1,'kyo/bench/ChainedForkBench$$anon$5.apply')
f(10,3393,1,1,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$5')
f(11,3393,1,1,'kyo/bench/ChainedForkBench$$Lambda$56.0x0000000800d44400.apply')
f(12,3393,1,1,'kyo/bench/ChainedForkBench.$anonfun$5')
f(13,3393,1,1,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$4')
f(14,3393,1,2,'kyo.bench.ChainedForkBench$$anon$4')
f(9,3394,4223,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,3394,4223,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,3394,4223,1,'kyo/bench/ChainedForkBench$$Lambda$61.0x0000000800d4a2e8.apply')
f(12,3394,4223,1,'kyo/bench/ChainedForkBench.$anonfun$3')
f(13,3394,4223,1,'kyo/bench/ChainedForkBench.iterate$2')
f(14,3394,845,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4c800.linkToTargetMethod')
f(15,3394,845,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(16,3394,845,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,3394,845,2,'kyo.bench.ChainedForkBench$$Lambda$61+0x0000000800d4a2e8')
f(14,4239,1055,1,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2')
f(15,4239,1055,2,'kyo.bench.ChainedForkBench$$anon$2')
f(14,5294,1,1,'kyo/concurrent/fibers$Fiber$Promise.complete')
f(15,5294,1,2,'kyo.concurrent.fibers$Fiber$Promise$$anon$26')
f(14,5295,2322,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(15,5295,672,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,5295,672,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,5295,672,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,5295,672,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(15,5967,897,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(16,5967,897,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(15,6864,753,1,'kyo/locals$Locals$.save')
f(16,6864,753,2,'kyo.locals$Locals$$anon$3')
f(7,7617,461,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,7617,461,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,7617,461,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,7617,461,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,7617,461,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d45000')
f(1,8078,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,8078,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,8078,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,8078,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,8078,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,8078,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,8078,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,8078,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,8078,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,8078,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,8078,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,8078,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,8078,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 560px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(35);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,293,3,'all')
f(1,0,1,3,'[unknown_Java]')
f(2,0,1,1,'kyo/ios$KyoIO.effect')
f(1,1,292,1,'java/lang/Thread.run')
f(2,1,292,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,1,292,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,1,2,1,'java/util/concurrent/FutureTask.run')
f(5,1,2,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,1,2,1,'java/util/concurrent/FutureTask.run')
f(7,1,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,1,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,1,2,1,'java/lang/reflect/Method.invoke')
f(10,1,2,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,1,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,1,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,1,2,1,'kyo/bench/jmh_generated/ChainedForkBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,1,2,1,'kyo/bench/jmh_generated/ChainedForkBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,1,2,1,'kyo/bench/Bench.forkKyo')
f(16,1,2,1,'kyo/bench/Bench.runLoop$2')
f(17,1,2,1,'kyo/bench/Bench$$anon$1.apply')
f(18,1,2,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,1,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,1,2,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(21,1,2,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,1,2,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,1,2,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,1,2,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,1,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,1,2,1,'jdk/internal/misc/Unsafe.unpark')
f(27,1,2,3,'pthread_cond_signal')
f(28,1,2,5,'entry_SYSCALL_64_after_hwframe')
f(29,1,2,5,'do_syscall_64')
f(30,1,2,5,'__x64_sys_futex')
f(31,1,2,5,'do_futex')
f(32,1,2,5,'futex_wake')
f(33,1,2,5,'wake_up_q')
f(34,1,2,5,'_raw_spin_unlock_irqrestore')
f(4,3,290,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fda8.run')
f(5,3,290,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,3,290,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,24,204,1,'kyo/concurrent/scheduler/IOTask.run',54,0,0)
f(8,25,203,1,'kyo/concurrent/scheduler/IOTask.eval',53,0,0)
f(9,62,109,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,66,3,2,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2',3,0,0)
f(10,69,102,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',9,0,0)
f(11,70,99,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',6,0,0)
f(12,75,94,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply',1,0,0)
f(13,76,93,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,107,3,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',3,0,0)
f(15,107,3,2,'kyo/ios$KyoIO.<init>',3,0,0)
f(16,107,3,2,'kyo/core$internal$Kyo.<init>',3,0,0)
f(17,107,3,2,'java/lang/Object.<init>',3,0,0)
f(14,110,38,2,'kyo/concurrent/scheduler/IOTask.<init>',38,0,0)
f(15,146,2,2,'kyo/concurrent/scheduler/IOPromise.<init>',2,0,0)
f(16,146,2,2,'kyo/concurrent/scheduler/IOPromise.<init>',2,0,0)
f(17,147,1,2,'java/util/concurrent/atomic/AtomicReference.<init>',1,0,0)
f(14,148,21,2,'kyo/concurrent/scheduler/Scheduler$.schedule',21,0,0)
f(15,149,20,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',20,0,0)
f(16,149,20,2,'kyo/concurrent/scheduler/Queue.offer',20,0,0)
f(17,154,10,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',10,0,0)
f(18,154,10,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',10,0,0)
f(19,154,9,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',9,0,0)
f(19,163,1,2,'kyo/concurrent/scheduler/Queue$$Lambda$54.0x0000000800d474b0.<init>',1,0,0)
f(20,163,1,2,'java/lang/Object.<init>',1,0,0)
f(17,164,5,2,'kyo/concurrent/scheduler/Queue.tryModify',5,0,0)
f(18,164,5,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',5,0,0)
f(19,164,5,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',5,0,0)
f(11,169,2,2,'kyo/locals$Locals$$anon$3.apply',2,0,0)
f(9,171,29,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,173,27,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',24,0,0)
f(11,174,26,2,'kyo/bench/ChainedForkBench$$Lambda$61.0x0000000800d4a518.apply',23,0,0)
f(12,174,26,2,'kyo/bench/ChainedForkBench.$anonfun$3',23,0,0)
f(13,174,26,2,'kyo/bench/ChainedForkBench.iterate$2',23,0,0)
f(14,177,14,2,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2',14,0,0)
f(14,191,9,2,'kyo/concurrent/fibers$Fibers.forkFiber',6,0,0)
f(15,192,3,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',3,0,0)
f(16,192,3,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',3,0,0)
f(17,192,3,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',3,0,0)
f(15,195,3,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(15,198,2,2,'kyo/locals$Locals$.save',2,0,0)
f(9,200,2,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',2,0,0)
f(9,202,16,2,'kyo/concurrent/scheduler/IOTask.loop$8',13,0,0)
f(10,203,15,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',12,0,0)
f(11,203,15,2,'kyo/concurrent/scheduler/IOPromise.complete',12,0,0)
f(12,214,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(13,214,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(12,215,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,215,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,215,3,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,215,3,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,215,3,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,215,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,215,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,215,3,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,215,3,1,'jdk/internal/misc/Unsafe.unpark')
f(21,215,3,3,'pthread_cond_signal')
f(22,216,2,5,'entry_SYSCALL_64_after_hwframe')
f(23,216,2,5,'do_syscall_64')
f(24,216,2,5,'__x64_sys_futex')
f(25,216,2,5,'do_futex')
f(26,216,2,5,'futex_wake')
f(27,216,2,5,'wake_up_q')
f(28,216,2,5,'_raw_spin_unlock_irqrestore')
f(9,218,9,6,'kyo/core$internal$KyoCont.effect',0,9,0)
f(9,227,1,3,'vtable stub')
f(7,228,62,2,'kyo/concurrent/scheduler/Queue.poll',23,0,0)
f(8,230,17,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',17,0,0)
f(9,230,17,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',17,0,0)
f(10,235,12,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d45000.<init>',12,0,0)
f(8,247,4,2,'kyo/concurrent/scheduler/Queue.isEmpty',4,0,0)
f(9,247,4,2,'kyo/concurrent/scheduler/Queue.items',4,0,0)
f(8,251,39,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,252,24,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',24,0,0)
f(10,258,18,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',18,0,0)
f(11,261,15,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',15,0,0)
f(12,264,12,2,'java/util/Objects.requireNonNull',12,0,0)
f(9,276,14,2,'kyo/concurrent/scheduler/Queue$$Lambda$60.0x0000000800d4a258.apply',14,0,0)
f(10,276,14,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',14,0,0)
f(11,276,14,2,'scala/collection/mutable/PriorityQueue.dequeue',14,0,0)
f(12,282,7,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',7,0,0)
f(12,289,1,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',1,0,0)
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,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,290,2,5,'entry_SYSCALL_64_after_hwframe')
f(14,290,2,5,'do_syscall_64')
f(15,290,2,5,'__x64_sys_futex')
f(16,290,2,5,'do_futex')
f(17,290,2,5,'futex_wait')
f(18,290,2,5,'futex_wait_queue_me')
f(19,290,2,5,'schedule')
f(20,290,2,5,'__schedule')
f(21,290,2,5,'finish_task_switch.isra.0')
f(12,292,1,3,'pthread_cond_timedwait')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 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,8925,3,'all')
f(1,0,8922,1,'java/lang/Thread.run')
f(2,0,8922,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,8922,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,963,1,'java/util/concurrent/FutureTask.run')
f(5,0,961,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,961,1,'java/util/concurrent/FutureTask.run')
f(7,0,961,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,961,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,961,1,'java/lang/reflect/Method.invoke')
f(10,0,961,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,961,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,961,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,961,1,'kyo/bench/jmh_generated/ChainedForkBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,959,1,'kyo/bench/jmh_generated/ChainedForkBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,959,1,'kyo/bench/Bench.syncKyo')
f(16,0,451,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,168,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,168,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,93,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,93,75,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,93,75,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,168,57,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,225,11,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,225,11,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,225,11,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,236,215,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,236,197,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,236,197,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,236,197,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,236,127,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,236,127,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,236,127,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(24,236,127,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,236,127,2,'kyo.concurrent.scheduler.IOTask')
f(21,363,70,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,363,70,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c83420.apply')
f(23,363,70,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,363,70,1,'kyo/concurrent/fibers$Fiber.join')
f(25,363,70,1,'kyo/concurrent/fibers$Fibers.get')
f(26,363,70,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,363,70,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,433,18,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,433,18,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c83c20.apply')
f(20,433,18,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,433,18,1,'kyo/concurrent/fibers$Fiber.block')
f(22,433,18,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,451,508,1,'kyo/bench/ChainedForkBench.kyoBench')
f(17,451,69,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,451,69,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,451,69,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,451,69,2,'kyo.bench.ChainedForkBench$$Lambda$37+0x0000000800c3f088')
f(17,520,230,1,'kyo/concurrent/fibers$Fibers.block')
f(18,520,69,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,520,69,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,589,96,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,589,96,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,685,65,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,685,65,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,750,209,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,750,69,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,750,69,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,750,69,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,750,69,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c83420')
f(18,819,82,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,819,66,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,819,66,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,819,66,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,819,66,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(19,885,15,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,885,15,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(19,900,1,1,'kyo/locals$Locals$.save')
f(20,900,1,2,'kyo.locals$Locals$$anon$3')
f(18,901,58,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,901,58,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(14,959,1,1,'org/openjdk/jmh/results/BenchmarkTaskResult.add')
f(15,959,1,1,'java/util/ArrayList.add')
f(16,959,1,1,'java/util/ArrayList.add')
f(17,959,1,1,'java/util/ArrayList.grow')
f(18,959,1,1,'java/util/ArrayList.grow')
f(19,959,1,5,'java.lang.Object[]')
f(14,960,1,1,'org/openjdk/jmh/results/ThroughputResult.<init>')
f(15,960,1,1,'org/openjdk/jmh/results/Result.of')
f(16,960,1,2,'org.openjdk.jmh.util.SingletonStatistics')
f(5,961,2,1,'java/util/concurrent/FutureTask.set')
f(6,961,2,1,'java/util/concurrent/FutureTask.finishCompletion')
f(7,961,2,1,'java/util/concurrent/ExecutorCompletionService$QueueingFuture.done')
f(8,961,2,1,'java/util/AbstractQueue.add')
f(9,961,2,1,'java/util/concurrent/LinkedBlockingQueue.offer')
f(10,961,1,2,'java.util.concurrent.LinkedBlockingQueue$Node')
f(10,962,1,1,'java/util/concurrent/LinkedBlockingQueue.signalNotEmpty')
f(11,962,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject.signal')
f(12,962,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject.doSignal')
f(13,962,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.enqueue')
f(14,962,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(15,962,1,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(4,963,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f2b8.run')
f(5,963,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,963,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,963,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,963,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,963,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,963,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,963,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,974,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1f4e0.run')
f(5,974,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,974,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,974,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,974,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,974,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,974,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$71+0x0000000800d4ec20')
f(4,985,7937,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d1fda8.run')
f(5,985,7937,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,985,7937,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,985,7439,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,985,7439,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,985,2936,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,985,2936,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,985,2936,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,985,2936,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(13,985,2936,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,985,432,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(14,1417,1812,2,'kyo.concurrent.scheduler.IOTask')
f(14,3229,692,1,'kyo/concurrent/fibers$Fiber$.promise')
f(15,3229,692,2,'kyo.concurrent.fibers$Fiber')
f(9,3921,1,1,'kyo/bench/ChainedForkBench$$anon$4.apply')
f(10,3921,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,3921,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,3921,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(13,3921,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,3921,1,2,'kyo.concurrent.scheduler.IOTask')
f(9,3922,4502,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,3922,4502,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,3922,4502,1,'kyo/bench/ChainedForkBench$$Lambda$62.0x0000000800d4a488.apply')
f(12,3922,4502,1,'kyo/bench/ChainedForkBench.$anonfun$3')
f(13,3922,4502,1,'kyo/bench/ChainedForkBench.iterate$2')
f(14,3922,888,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4c800.linkToTargetMethod')
f(15,3922,888,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(16,3922,888,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,3922,888,2,'kyo.bench.ChainedForkBench$$Lambda$62+0x0000000800d4a488')
f(14,4810,1068,1,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2')
f(15,4810,1068,2,'kyo.bench.ChainedForkBench$$anon$2')
f(14,5878,2546,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(15,5878,737,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,5878,737,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,5878,737,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,5878,737,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(15,6615,980,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(16,6615,980,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(15,7595,829,1,'kyo/locals$Locals$.save')
f(16,7595,829,2,'kyo.locals$Locals$$anon$3')
f(7,8424,498,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,8424,498,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,8424,498,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,8424,498,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,8424,498,2,'kyo.concurrent.scheduler.Queue$$Lambda$56+0x0000000800d45230')
f(1,8922,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,8922,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,8922,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,8922,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,8922,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,8922,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,8922,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,8922,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,8922,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,8922,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,8922,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,8922,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,8922,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 608px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(38);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,293,3,'all')
f(1,0,5,3,'[unknown_Java]')
f(2,0,2,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(2,2,3,1,'kyo/ios$KyoIO.effect')
f(1,5,288,1,'java/lang/Thread.run')
f(2,5,288,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,5,288,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,5,1,1,'java/util/concurrent/FutureTask.run')
f(5,5,1,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,5,1,1,'java/util/concurrent/FutureTask.run')
f(7,5,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,5,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,5,1,1,'java/lang/reflect/Method.invoke')
f(10,5,1,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,5,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,5,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,5,1,1,'kyo/bench/jmh_generated/ChainedForkBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,5,1,1,'kyo/bench/jmh_generated/ChainedForkBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,5,1,1,'kyo/bench/Bench.syncKyo')
f(16,5,1,1,'kyo/bench/Bench.runLoop$1')
f(17,5,1,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,5,1,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,5,1,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,5,1,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,5,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,5,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,5,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(24,5,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,5,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,5,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,5,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(28,5,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(29,5,1,1,'jdk/internal/misc/Unsafe.unpark')
f(30,5,1,3,'pthread_cond_signal')
f(31,5,1,5,'entry_SYSCALL_64_after_hwframe')
f(32,5,1,5,'do_syscall_64')
f(33,5,1,5,'__x64_sys_futex')
f(34,5,1,5,'do_futex')
f(35,5,1,5,'futex_wake')
f(36,5,1,5,'wake_up_q')
f(37,5,1,5,'_raw_spin_unlock_irqrestore')
f(4,6,287,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d1fda8.run')
f(5,6,287,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,6,287,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,10,219,1,'kyo/concurrent/scheduler/IOTask.run',69,0,0)
f(8,10,219,1,'kyo/concurrent/scheduler/IOTask.eval',69,0,0)
f(9,40,105,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,52,2,2,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2',2,0,0)
f(10,54,91,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',2,0,0)
f(11,55,89,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,68,76,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply',1,0,0)
f(13,69,75,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,96,2,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',2,0,0)
f(15,96,2,2,'kyo/ios$KyoIO.<init>',2,0,0)
f(16,96,2,2,'kyo/core$internal$Kyo.<init>',2,0,0)
f(17,96,2,2,'java/lang/Object.<init>',2,0,0)
f(14,98,39,2,'kyo/concurrent/scheduler/IOTask.<init>',39,0,0)
f(15,128,9,2,'kyo/concurrent/scheduler/IOPromise.<init>',9,0,0)
f(16,129,8,2,'kyo/concurrent/scheduler/IOPromise.<init>',8,0,0)
f(14,137,7,2,'kyo/concurrent/scheduler/Scheduler$.schedule',7,0,0)
f(15,139,5,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',5,0,0)
f(16,139,5,2,'kyo/concurrent/scheduler/Queue.offer',5,0,0)
f(17,141,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(18,141,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(19,141,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(17,142,2,2,'kyo/concurrent/scheduler/Queue.tryModify',2,0,0)
f(18,142,2,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',2,0,0)
f(19,142,2,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',2,0,0)
f(11,144,1,2,'kyo/locals$Locals$$anon$3.apply',1,0,0)
f(9,145,31,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,146,30,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',29,0,0)
f(11,151,25,2,'kyo/bench/ChainedForkBench$$Lambda$62.0x0000000800d4a518.apply',24,0,0)
f(12,151,25,2,'kyo/bench/ChainedForkBench.$anonfun$3',24,0,0)
f(13,151,25,2,'kyo/bench/ChainedForkBench.iterate$2',24,0,0)
f(14,155,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(15,155,1,4,'AccessInternal::PostRuntimeDispatch<G1BarrierSet::AccessBarrier<598116ul, G1BarrierSet>, (AccessInternal::BarrierType)2, 598116ul>::oop_access_barrier(void*)')
f(16,155,1,3,'__tls_get_addr')
f(14,156,1,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d4c800.linkToTargetMethod',1,0,0)
f(15,156,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial',1,0,0)
f(16,156,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(14,157,12,2,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2',12,0,0)
f(15,166,3,2,'kyo/bench/ChainedForkBench$$anon$2.<init>',3,0,0)
f(16,168,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(14,169,7,2,'kyo/concurrent/fibers$Fibers.forkFiber',7,0,0)
f(15,169,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(16,169,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',2,0,0)
f(17,169,2,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',2,0,0)
f(15,171,5,2,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',5,0,0)
f(16,173,3,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',3,0,0)
f(9,176,22,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',22,0,0)
f(9,198,21,2,'kyo/concurrent/scheduler/IOTask.loop$8',21,0,0)
f(10,199,20,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',20,0,0)
f(11,217,2,2,'kyo/concurrent/scheduler/IOPromise.complete',2,0,0)
f(12,217,2,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',2,0,0)
f(13,217,2,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',2,0,0)
f(14,217,2,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',2,0,0)
f(15,217,2,2,'java/util/Objects.requireNonNull',2,0,0)
f(9,219,1,2,'kyo/concurrent/scheduler/IOTask.st',1,0,0)
f(9,220,5,6,'kyo/core$internal$KyoCont.effect',0,5,0)
f(9,225,4,1,'kyo/ios$KyoIO.effect')
f(7,229,62,1,'kyo/concurrent/scheduler/Queue.poll',18,0,0)
f(8,232,11,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',11,0,0)
f(9,238,5,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',5,0,0)
f(10,238,5,2,'kyo/concurrent/scheduler/Queue$$Lambda$56.0x0000000800d45000.<init>',5,0,0)
f(8,243,4,2,'kyo/concurrent/scheduler/Queue.isEmpty',4,0,0)
f(9,243,4,2,'kyo/concurrent/scheduler/Queue.items',4,0,0)
f(8,247,44,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,249,26,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',26,0,0)
f(10,254,21,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',21,0,0)
f(11,263,1,2,'java/lang/invoke/VarForm.getMemberName',1,0,0)
f(12,263,1,2,'java/lang/invoke/VarForm.getMemberNameOrNull',1,0,0)
f(11,264,11,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',11,0,0)
f(12,265,10,2,'java/util/Objects.requireNonNull',10,0,0)
f(9,275,16,2,'kyo/concurrent/scheduler/Queue$$Lambda$61.0x0000000800d4a258.apply',16,0,0)
f(10,275,16,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',16,0,0)
f(11,275,16,2,'scala/collection/mutable/PriorityQueue.dequeue',16,0,0)
f(12,283,5,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',5,0,0)
f(12,288,3,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',3,0,0)
f(7,291,1,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,291,1,1,'kyo/concurrent/scheduler/Worker.park')
f(9,291,1,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,291,1,1,'jdk/internal/misc/Unsafe.park')
f(11,291,1,3,'[unknown]')
f(12,291,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,291,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,291,1,5,'do_syscall_64')
f(15,291,1,5,'__x64_sys_futex')
f(16,291,1,5,'do_futex')
f(17,291,1,5,'futex_wait')
f(7,292,1,2,'kyo/concurrent/scheduler/Worker.stop$1',1,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 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,13660,3,'all')
f(1,0,13657,1,'java/lang/Thread.run')
f(2,0,13657,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,13657,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,2420,1,'java/util/concurrent/FutureTask.run')
f(5,0,2420,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,2420,1,'java/util/concurrent/FutureTask.run')
f(7,0,2420,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,2420,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,2420,1,'java/lang/reflect/Method.invoke')
f(10,0,2420,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,2420,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,2420,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,2420,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,2420,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,2420,1,'kyo/bench/Bench.forkKyo')
f(16,0,166,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,166,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,166,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,166,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3fb00')
f(16,166,208,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,166,208,2,'kyo.bench.Bench$$anon$1')
f(16,374,1538,1,'kyo/bench/Bench.runLoop$2')
f(17,374,651,1,'kyo/bench/Bench$$anon$1.apply')
f(18,374,62,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,374,62,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c81000.apply')
f(20,374,62,1,'kyo/bench/Bench.$anonfun$2')
f(21,374,62,1,'kyo/concurrent/fibers$Fiber.block')
f(22,374,62,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,436,589,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,436,589,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,436,589,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85290.apply')
f(21,436,589,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,436,45,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,481,394,2,'kyo.concurrent.scheduler.IOTask')
f(22,875,150,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,875,150,2,'kyo.concurrent.fibers$Fiber')
f(17,1025,887,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,1025,887,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,1025,887,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,1025,887,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,1025,385,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,1025,385,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,1025,120,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,1145,265,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,1145,265,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,1410,247,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,1657,255,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,1657,255,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,1657,255,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,1912,508,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,1912,170,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1912,170,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1912,170,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1912,170,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c85290')
f(17,2082,254,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,2082,254,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,2336,84,1,'kyo/locals$Locals$.save')
f(18,2336,84,2,'kyo.locals$Locals$$anon$3')
f(4,2420,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f4b8.run')
f(5,2420,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,2420,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,2420,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,2420,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,2420,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,2420,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,2420,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,2431,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f6e0.run')
f(5,2431,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,2431,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,2431,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,2431,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,2431,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,2431,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,2431,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$60+0x0000000800d55000')
f(4,2442,11215,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d243c0.run')
f(5,2442,11215,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,2442,11215,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,2442,11213,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,2442,11213,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,2442,8067,1,'kyo/bench/CollectAllBench$$anon$2.apply')
f(10,2442,2970,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(11,2442,2080,2,'kyo.bench.CollectAllBench$$anon$2')
f(11,4522,890,1,'kyo/bench/CollectAllBench$$Lambda$58.0x0000000800d56000.apply')
f(12,4522,890,1,'kyo/bench/CollectAllBench.$anonfun$2')
f(13,4522,890,1,'scala/collection/AbstractIterable.sum')
f(14,4522,890,1,'scala/collection/IterableOnceOps.sum$')
f(15,4522,890,1,'scala/collection/IterableOnceOps.sum')
f(16,4522,890,1,'scala/collection/AbstractIterable.reduce')
f(17,4522,890,1,'scala/collection/IterableOnceOps.reduce$')
f(18,4522,890,1,'scala/collection/IterableOnceOps.reduce')
f(19,4522,890,1,'scala/collection/AbstractIterable.reduceLeft')
f(20,4522,890,1,'scala/collection/IterableOnceOps.reduceLeft$')
f(21,4522,890,1,'scala/collection/IterableOnceOps.reduceLeft')
f(22,4522,890,1,'scala/collection/IterableOnceOps$$Lambda$59.0x0000000800d57638.apply')
f(23,4522,890,1,'scala/collection/IterableOnceOps.$anonfun$sum$1')
f(24,4522,890,1,'scala/math/Numeric$IntIsIntegral$.plus')
f(25,4522,890,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(26,4522,890,1,'java/lang/Integer.valueOf')
f(27,4522,890,2,'java.lang.Integer')
f(10,5412,5097,1,'kyo/lists$Lists$$anon$11.apply')
f(11,5412,5097,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(12,5412,5097,1,'kyo/lists$Lists$$Lambda$57.0x0000000800d53b78.apply')
f(13,5412,5097,1,'kyo/lists$Lists.$anonfun$5')
f(14,5412,3555,1,'kyo/lists$Lists.loop$2')
f(15,5412,1464,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,5412,1464,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,5412,1464,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,5412,1464,2,'kyo.lists$Lists$$Lambda$57+0x0000000800d53b78')
f(15,6876,2091,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(16,6876,2091,2,'kyo.lists$Lists$$anon$11')
f(14,8967,1542,1,'scala/collection/mutable/ListBuffer.addOne')
f(15,8967,1542,2,'scala.collection.immutable.$colon$colon')
f(9,10509,3146,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,10509,3146,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,10509,3146,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3fb00.apply')
f(12,10509,3146,1,'kyo/bench/Bench.$anonfun$1')
f(13,10509,3146,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,10509,3146,1,'kyo/bench/CollectAllBench.kyoBench')
f(15,10509,1,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(16,10509,1,2,'kyo.bench.CollectAllBench$$anon$2')
f(15,10510,6,1,'kyo/lists$Lists.collect')
f(16,10510,1,2,'java.lang.Object[]')
f(16,10511,2,1,'kyo/lists$Lists.loop$2')
f(17,10511,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,10511,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,10511,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,10511,2,2,'kyo.lists$Lists$$Lambda$57+0x0000000800d53b78')
f(16,10513,3,1,'scala/collection/mutable/ListBuffer$.apply')
f(17,10513,3,1,'scala/collection/IterableFactory.apply$')
f(18,10513,3,1,'scala/collection/IterableFactory.apply')
f(19,10513,3,1,'scala/collection/mutable/ListBuffer$.from')
f(20,10513,3,1,'scala/collection/mutable/ListBuffer$.from')
f(21,10513,3,2,'scala.collection.mutable.ListBuffer')
f(15,10516,1593,1,'scala/collection/AbstractIterable.toList')
f(16,10516,1593,1,'scala/collection/IterableOnceOps.toList$')
f(17,10516,1593,1,'scala/collection/IterableOnceOps.toList')
f(18,10516,1593,1,'scala/collection/immutable/List.prependedAll')
f(19,10516,1589,2,'scala.collection.immutable.$colon$colon')
f(19,12105,4,1,'scala/collection/immutable/Vector.iterator')
f(20,12105,4,2,'scala.collection.immutable.NewVectorIterator')
f(15,12109,1546,1,'scala/collection/immutable/Range.map')
f(16,12109,1045,1,'kyo/bench/CollectAllBench$$Lambda$56.0x0000000800d44800.apply')
f(17,12109,1045,1,'kyo/bench/CollectAllBench.$anonfun$adapted$1')
f(18,12109,1045,1,'kyo/bench/CollectAllBench.$anonfun$1')
f(19,12109,1045,2,'kyo.bench.CollectAllBench$$anon$1')
f(16,13154,138,1,'scala/collection/SeqFactory$Delegate.newBuilder')
f(17,13154,138,1,'scala/collection/immutable/Vector$.newBuilder')
f(18,13154,138,1,'scala/collection/immutable/Vector$.newBuilder')
f(19,13154,125,2,'scala.collection.immutable.VectorBuilder')
f(19,13279,13,1,'scala/collection/immutable/VectorBuilder.<init>')
f(20,13279,13,2,'java.lang.Object[]')
f(16,13292,352,1,'scala/collection/immutable/VectorBuilder.addOne')
f(17,13292,352,1,'scala/collection/immutable/VectorBuilder.addOne')
f(18,13292,352,1,'scala/collection/immutable/VectorBuilder.advance')
f(19,13292,352,1,'scala/collection/immutable/VectorBuilder.advance1')
f(20,13292,10,2,'java.lang.Object[][]')
f(20,13302,342,2,'java.lang.Object[]')
f(16,13644,11,1,'scala/collection/immutable/VectorBuilder.result')
f(17,13644,11,1,'scala/collection/immutable/VectorBuilder.result')
f(18,13644,2,1,'java/util/Arrays.copyOf')
f(19,13644,2,2,'java.lang.Object[]')
f(18,13646,8,1,'java/util/Arrays.copyOfRange')
f(19,13646,8,2,'java.lang.Object[][]')
f(18,13654,1,2,'scala.collection.immutable.Vector2')
f(7,13655,2,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,13655,2,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,13655,2,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,13655,2,1,'scala/runtime/ObjectRef.create')
f(11,13655,2,2,'scala.runtime.ObjectRef')
f(1,13657,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,13657,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,13657,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,13657,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,13657,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,13657,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,13657,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
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')
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,249,3,'all')
f(1,0,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,1,5,'entry_SYSCALL_64_after_hwframe')
f(3,0,1,5,'do_syscall_64')
f(4,0,1,5,'__x64_sys_futex')
f(5,0,1,5,'do_futex')
f(6,0,1,5,'futex_wait')
f(1,1,3,3,'[unknown_Java]')
f(2,1,1,1,'kyo/bench/CollectAllBench$$Lambda$58.0x0000000800d56000.apply')
f(2,2,1,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(2,3,1,1,'scala/collection/immutable/VectorBuilder.advance1')
f(1,4,245,1,'java/lang/Thread.run')
f(2,4,245,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,4,245,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,4,30,1,'java/util/concurrent/FutureTask.run')
f(5,4,30,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,4,30,1,'java/util/concurrent/FutureTask.run')
f(7,4,30,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,4,30,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,4,30,1,'java/lang/reflect/Method.invoke')
f(10,4,30,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,4,30,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,4,30,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,4,30,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,4,30,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,4,30,1,'kyo/bench/Bench.forkKyo')
f(16,4,30,1,'kyo/bench/Bench.runLoop$2')
f(17,4,15,1,'kyo/bench/Bench$$anon$1.apply')
f(18,4,15,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,4,15,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,4,15,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85290.apply')
f(21,4,15,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,4,15,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,4,15,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,4,14,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,4,14,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,4,14,1,'jdk/internal/misc/Unsafe.unpark')
f(27,4,14,3,'pthread_cond_signal')
f(28,5,13,5,'entry_SYSCALL_64_after_hwframe')
f(29,5,13,5,'do_syscall_64')
f(30,5,13,5,'__x64_sys_futex')
f(31,5,13,5,'do_futex')
f(32,5,13,5,'futex_wake')
f(33,5,13,5,'wake_up_q')
f(34,5,13,5,'_raw_spin_unlock_irqrestore')
f(24,18,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.poll')
f(17,19,15,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,19,15,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,19,15,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,19,15,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,19,15,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,19,15,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,19,15,1,'java/util/concurrent/locks/LockSupport.park')
f(24,19,15,1,'jdk/internal/misc/Unsafe.park')
f(25,19,1,4,'AccessInternal::PostRuntimeDispatch<G1BarrierSet::AccessBarrier<548964ul, G1BarrierSet>, (AccessInternal::BarrierType)2, 548964ul>::oop_access_barrier(void*)')
f(25,20,2,3,'Unsafe_Park')
f(26,20,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,20,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,20,1,5,'do_syscall_64')
f(29,20,1,5,'__x64_sys_futex')
f(30,20,1,5,'do_futex')
f(31,20,1,5,'futex_wake')
f(32,20,1,5,'get_futex_key')
f(26,21,1,3,'pthread_cond_wait')
f(25,22,12,3,'[unknown]')
f(26,22,12,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,22,12,5,'entry_SYSCALL_64_after_hwframe')
f(28,22,1,5,'__x64_sys_futex')
f(28,23,11,5,'do_syscall_64')
f(29,23,11,5,'__x64_sys_futex')
f(30,24,10,5,'do_futex')
f(31,24,10,5,'futex_wait')
f(32,25,9,5,'futex_wait_queue_me')
f(33,25,9,5,'schedule')
f(34,25,9,5,'__schedule')
f(35,26,8,5,'finish_task_switch.isra.0')
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,'futex_wait_queue_me')
f(16,34,1,5,'schedule')
f(17,34,1,5,'__schedule')
f(18,34,1,5,'finish_task_switch.isra.0')
f(4,35,214,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d243c0.run')
f(5,35,214,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,35,214,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,36,179,1,'kyo/concurrent/scheduler/IOTask.run',20,0,0)
f(8,36,179,1,'kyo/concurrent/scheduler/IOTask.eval',20,0,0)
f(9,36,97,1,'kyo/bench/CollectAllBench$$anon$2.apply',20,0,0)
f(10,36,31,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(11,36,31,1,'kyo/bench/CollectAllBench$$Lambda$58.0x0000000800d56000.apply')
f(12,36,31,2,'kyo/bench/CollectAllBench.$anonfun$2',27,0,0)
f(13,36,31,2,'scala/collection/AbstractIterable.sum',27,0,0)
f(14,36,31,2,'scala/collection/IterableOnceOps.sum$',27,0,0)
f(15,36,31,2,'scala/collection/IterableOnceOps.sum',27,0,0)
f(16,36,31,2,'scala/collection/AbstractIterable.reduce',27,0,0)
f(17,36,31,2,'scala/collection/IterableOnceOps.reduce$',27,0,0)
f(18,36,31,2,'scala/collection/IterableOnceOps.reduce',27,0,0)
f(19,36,31,2,'scala/collection/AbstractIterable.reduceLeft',27,0,0)
f(20,36,31,2,'scala/collection/IterableOnceOps.reduceLeft$',27,0,0)
f(21,36,31,2,'scala/collection/IterableOnceOps.reduceLeft',27,0,0)
f(22,37,25,2,'scala/collection/IterableOnceOps$$Lambda$59.0x0000000800d57638.apply',21,0,0)
f(23,37,25,2,'scala/collection/IterableOnceOps.$anonfun$sum$1',21,0,0)
f(24,37,25,2,'scala/math/Numeric$IntIsIntegral$.plus',21,0,0)
f(25,37,22,2,'scala/runtime/BoxesRunTime.boxToInteger',18,0,0)
f(26,53,6,2,'java/lang/Integer.valueOf',2,0,0)
f(27,55,4,1,'java/lang/Integer.<init>')
f(28,55,4,1,'java/lang/Number.<init>')
f(25,59,3,2,'scala/runtime/BoxesRunTime.unboxToInt',3,0,0)
f(22,62,5,2,'scala/collection/StrictOptimizedLinearSeqOps$$anon$1.next',5,0,0)
f(23,66,1,2,'scala/collection/immutable/$colon$colon.tail',1,0,0)
f(24,66,1,2,'scala/collection/immutable/$colon$colon.tail',1,0,0)
f(25,66,1,2,'scala/collection/immutable/$colon$colon.next',1,0,0)
f(10,67,66,1,'kyo/lists$Lists$$anon$11.apply',20,0,0)
f(11,67,20,2,'kyo/bench/CollectAllBench$$anon$1.apply',20,0,0)
f(12,67,20,2,'kyo/bench/CollectAllBench$$anon$1.apply',20,0,0)
f(13,67,20,2,'scala/runtime/BoxesRunTime.boxToInteger',20,0,0)
f(11,87,46,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(12,89,40,2,'kyo/lists$Lists$$Lambda$57.0x0000000800d53b78.apply',40,0,0)
f(13,89,40,2,'kyo/lists$Lists.$anonfun$5',40,0,0)
f(14,91,12,2,'kyo/lists$Lists.loop$2',12,0,0)
f(15,98,5,2,'scala/collection/immutable/List.equals',5,0,0)
f(16,98,5,2,'scala/collection/immutable/List.listEq$1',5,0,0)
f(17,102,1,2,'scala/collection/immutable/List.isEmpty',1,0,0)
f(14,103,26,2,'scala/collection/mutable/ListBuffer.addOne',26,0,0)
f(15,106,5,2,'scala/collection/immutable/$colon$colon.<init>',5,0,0)
f(16,109,1,2,'scala/collection/immutable/List.<init>',1,0,0)
f(17,109,1,2,'scala/collection/immutable/AbstractSeq.<init>',1,0,0)
f(18,109,1,2,'scala/collection/AbstractSeq.<init>',1,0,0)
f(19,109,1,2,'scala/collection/AbstractIterable.<init>',1,0,0)
f(16,110,1,2,'scala/runtime/Statics.releaseFence',1,0,0)
f(17,110,1,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d1c400.invoke_MT',1,0,0)
f(15,111,2,2,'scala/collection/immutable/$colon$colon.next_$eq',2,0,0)
f(15,113,2,2,'scala/collection/mutable/ListBuffer.ensureUnaliased',2,0,0)
f(15,115,3,2,'scala/collection/mutable/ListBuffer.first_$eq',3,0,0)
f(15,118,11,2,'scala/collection/mutable/ListBuffer.last0_$eq',11,0,0)
f(12,129,4,2,'kyo/lists$Lists$$anon$11.<init>',4,0,0)
f(13,129,4,2,'kyo/core$internal$KyoCont.<init>',4,0,0)
f(14,129,3,2,'kyo/core$internal$Kyo.<init>',3,0,0)
f(14,132,1,2,'kyo/ios$KyoIO.effect',1,0,0)
f(9,133,66,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,133,66,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply',17,0,0)
f(11,133,66,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3fb00.apply',17,0,0)
f(12,133,66,1,'kyo/bench/Bench.$anonfun$1',17,0,0)
f(13,133,66,1,'kyo/bench/Bench.kyoBenchFiber',17,0,0)
f(14,133,66,1,'kyo/bench/CollectAllBench.kyoBench',17,0,0)
f(15,133,13,2,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1',13,0,0)
f(16,133,13,2,'kyo/bench/CollectAllBench$$Lambda$58.0x0000000800d56000.apply',13,0,0)
f(17,133,13,2,'kyo/bench/CollectAllBench.$anonfun$2',13,0,0)
f(18,133,13,2,'scala/runtime/BoxesRunTime.boxToLong',13,0,0)
f(15,146,1,1,'kyo/lists$Lists.collect')
f(16,146,1,1,'kyo/lists$Lists.loop$2')
f(15,147,46,1,'scala/collection/AbstractIterable.toList')
f(16,147,46,1,'scala/collection/IterableOnceOps.toList$')
f(17,147,46,1,'scala/collection/IterableOnceOps.toList')
f(18,147,46,1,'scala/collection/immutable/List.prependedAll')
f(19,152,31,2,'scala/collection/immutable/$colon$colon.<init>',31,0,0)
f(19,183,10,2,'scala/collection/immutable/NewVectorIterator.next',6,0,0)
f(20,185,8,2,'scala/collection/immutable/NewVectorIterator.advance',4,0,0)
f(21,189,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(22,189,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(23,189,1,4,'MemAllocator::allocate() const')
f(24,189,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(25,189,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(21,190,2,1,'scala/collection/immutable/NewVectorIterator.advanceA')
f(21,192,1,1,'scala/collection/immutable/NewVectorIterator.advanceSlice')
f(22,192,1,2,'scala/collection/immutable/Vector2.vectorSlice',1,0,0)
f(15,193,3,2,'scala/collection/immutable/Range.map',1,0,0)
f(16,194,1,1,'scala/collection/immutable/VectorBuilder.addOne')
f(17,194,1,1,'scala/collection/immutable/VectorBuilder.addOne')
f(18,194,1,1,'scala/collection/immutable/VectorBuilder.advance')
f(19,194,1,1,'scala/collection/immutable/VectorBuilder.advance1')
f(16,195,1,1,'scala/collection/immutable/VectorBuilder.result')
f(17,195,1,1,'scala/collection/immutable/VectorBuilder.result')
f(18,195,1,2,'java/util/Arrays.copyOfRange',1,0,0)
f(15,196,3,2,'scala/runtime/RichInt$.until$extension',3,0,0)
f(16,196,3,2,'scala/collection/immutable/Range$Exclusive.<init>',3,0,0)
f(17,198,1,2,'scala/collection/immutable/Range.<init>',1,0,0)
f(18,198,1,2,'scala/collection/immutable/Range.longLength',1,0,0)
f(19,198,1,2,'scala/collection/immutable/Range.hasStub',1,0,0)
f(20,198,1,2,'scala/collection/immutable/Range.isExact',1,0,0)
f(21,198,1,2,'scala/collection/immutable/Range.gap',1,0,0)
f(9,199,16,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,199,16,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,199,16,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,199,16,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,199,16,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,199,16,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,199,16,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,199,16,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,199,16,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,199,16,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,199,16,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,199,16,1,'jdk/internal/misc/Unsafe.unpark')
f(21,199,1,3,'Unsafe_Unpark')
f(21,200,15,3,'pthread_cond_signal')
f(22,201,14,5,'entry_SYSCALL_64_after_hwframe')
f(23,201,14,5,'do_syscall_64')
f(24,201,13,5,'__x64_sys_futex')
f(25,201,13,5,'do_futex')
f(26,201,12,5,'futex_wake')
f(27,201,12,5,'wake_up_q')
f(28,201,12,5,'_raw_spin_unlock_irqrestore')
f(26,213,1,5,'hash_futex')
f(24,214,1,5,'syscall_enter_from_user_mode')
f(7,215,14,2,'kyo/concurrent/scheduler/Queue.poll',14,0,0)
f(8,215,3,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',3,0,0)
f(9,215,3,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',3,0,0)
f(8,218,11,2,'kyo/concurrent/scheduler/Queue.modify',11,0,0)
f(9,219,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(9,220,9,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d45230.apply',9,0,0)
f(10,220,9,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',9,0,0)
f(11,221,5,2,'kyo/concurrent/scheduler/Queue.items_$eq',5,0,0)
f(11,226,3,2,'scala/collection/mutable/PriorityQueue.dequeue',3,0,0)
f(7,229,20,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,229,20,1,'kyo/concurrent/scheduler/Worker.park')
f(9,229,20,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,229,20,1,'jdk/internal/misc/Unsafe.park')
f(11,230,2,3,'Unsafe_Park')
f(12,230,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,230,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,230,1,5,'do_syscall_64')
f(15,230,1,5,'syscall_enter_from_user_mode')
f(12,231,1,3,'clock_gettime')
f(13,231,1,3,'[vdso]')
f(11,232,17,3,'[unknown]')
f(12,232,16,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,234,14,5,'entry_SYSCALL_64_after_hwframe')
f(14,234,14,5,'do_syscall_64')
f(15,234,13,5,'__x64_sys_futex')
f(16,235,11,5,'do_futex')
f(17,235,11,5,'futex_wait')
f(18,235,10,5,'futex_wait_queue_me')
f(19,235,10,5,'schedule')
f(20,235,10,5,'__schedule')
f(21,235,10,5,'finish_task_switch.isra.0')
f(18,245,1,5,'futex_wait_setup')
f(16,246,1,5,'get_timespec64')
f(15,247,1,5,'syscall_enter_from_user_mode')
f(12,248,1,3,'pthread_cond_timedwait')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 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,14385,3,'all')
f(1,0,14380,1,'java/lang/Thread.run')
f(2,0,14380,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,14380,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,14380,1,'java/util/concurrent/FutureTask.run')
f(5,0,14380,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,14380,1,'java/util/concurrent/FutureTask.run')
f(7,0,14380,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,14380,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,14380,1,'java/lang/reflect/Method.invoke')
f(10,0,14380,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,14380,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,14380,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,14380,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,14380,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,14380,1,'kyo/bench/Bench.syncKyo')
f(16,0,10582,1,'kyo/bench/Bench.runLoop$1')
f(17,0,10582,1,'kyo/bench/CollectAllBench$$anon$2.apply')
f(18,0,3407,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(19,0,2214,2,'kyo.bench.CollectAllBench$$anon$2')
f(19,2214,1193,1,'kyo/bench/CollectAllBench$$Lambda$41.0x0000000800d24940.apply')
f(20,2214,1193,1,'kyo/bench/CollectAllBench.$anonfun$2')
f(21,2214,1193,1,'scala/collection/AbstractIterable.sum')
f(22,2214,1193,1,'scala/collection/IterableOnceOps.sum$')
f(23,2214,1193,1,'scala/collection/IterableOnceOps.sum')
f(24,2214,1193,1,'scala/collection/AbstractIterable.reduce')
f(25,2214,1193,1,'scala/collection/IterableOnceOps.reduce$')
f(26,2214,1193,1,'scala/collection/IterableOnceOps.reduce')
f(27,2214,1193,1,'scala/collection/AbstractIterable.reduceLeft')
f(28,2214,1193,1,'scala/collection/IterableOnceOps.reduceLeft$')
f(29,2214,1193,1,'scala/collection/IterableOnceOps.reduceLeft')
f(30,2214,1193,1,'scala/collection/IterableOnceOps$$Lambda$42.0x0000000800d2a090.apply')
f(31,2214,1193,1,'scala/collection/IterableOnceOps.$anonfun$sum$1')
f(32,2214,1193,1,'scala/math/Numeric$IntIsIntegral$.plus')
f(33,2214,1193,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(34,2214,1193,1,'java/lang/Integer.valueOf')
f(35,2214,1193,2,'java.lang.Integer')
f(18,3407,7175,1,'kyo/lists$Lists$$anon$11.apply')
f(19,3407,7175,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(20,3407,7175,1,'kyo/lists$Lists$$Lambda$40.0x0000000800d0fb38.apply')
f(21,3407,7175,1,'kyo/lists$Lists.$anonfun$5')
f(22,3407,4538,1,'kyo/lists$Lists.loop$2')
f(23,3407,1765,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(24,3407,1765,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(25,3407,1765,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(26,3407,1765,2,'kyo.lists$Lists$$Lambda$40+0x0000000800d0fb38')
f(23,5172,2773,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(24,5172,2773,2,'kyo.lists$Lists$$anon$11')
f(22,7945,2637,1,'scala/collection/mutable/ListBuffer.addOne')
f(23,7945,2637,2,'scala.collection.immutable.$colon$colon')
f(16,10582,3798,1,'kyo/bench/CollectAllBench.kyoBench')
f(17,10582,9,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(18,10582,9,2,'kyo.bench.CollectAllBench$$anon$2')
f(17,10591,9,1,'kyo/lists$Lists.collect')
f(18,10591,9,1,'scala/collection/mutable/ListBuffer$.apply')
f(19,10591,9,1,'scala/collection/IterableFactory.apply$')
f(20,10591,9,1,'scala/collection/IterableFactory.apply')
f(21,10591,9,1,'scala/collection/mutable/ListBuffer$.from')
f(22,10591,9,1,'scala/collection/mutable/ListBuffer$.from')
f(23,10591,9,2,'scala.collection.mutable.ListBuffer')
f(17,10600,2047,1,'scala/collection/AbstractIterable.toList')
f(18,10600,2047,1,'scala/collection/IterableOnceOps.toList$')
f(19,10600,2047,1,'scala/collection/IterableOnceOps.toList')
f(20,10600,2047,1,'scala/collection/immutable/List.prependedAll')
f(21,10600,2038,2,'scala.collection.immutable.$colon$colon')
f(21,12638,9,1,'scala/collection/immutable/Vector.iterator')
f(22,12638,9,2,'scala.collection.immutable.NewVectorIterator')
f(17,12647,1733,1,'scala/collection/immutable/Range.map')
f(18,12647,1163,1,'kyo/bench/CollectAllBench$$Lambda$39.0x0000000800cbeb88.apply')
f(19,12647,1163,1,'kyo/bench/CollectAllBench.$anonfun$adapted$1')
f(20,12647,1163,1,'kyo/bench/CollectAllBench.$anonfun$1')
f(21,12647,1163,2,'kyo.bench.CollectAllBench$$anon$1')
f(18,13810,9,1,'scala/collection/SeqFactory$Delegate.newBuilder')
f(19,13810,9,1,'scala/collection/immutable/Vector$.newBuilder')
f(20,13810,9,1,'scala/collection/immutable/Vector$.newBuilder')
f(21,13810,9,1,'scala/collection/immutable/VectorBuilder.<init>')
f(22,13810,9,2,'java.lang.Object[]')
f(18,13819,543,1,'scala/collection/immutable/VectorBuilder.addOne')
f(19,13819,543,1,'scala/collection/immutable/VectorBuilder.addOne')
f(20,13819,543,1,'scala/collection/immutable/VectorBuilder.advance')
f(21,13819,543,1,'scala/collection/immutable/VectorBuilder.advance1')
f(22,13819,9,2,'java.lang.Object[][]')
f(22,13828,534,2,'java.lang.Object[]')
f(18,14362,18,1,'scala/collection/immutable/VectorBuilder.result')
f(19,14362,18,1,'scala/collection/immutable/VectorBuilder.result')
f(20,14362,1,1,'java/util/Arrays.copyOf')
f(21,14362,1,2,'java.lang.Object[]')
f(20,14363,17,1,'java/util/Arrays.copyOfRange')
f(21,14363,17,2,'java.lang.Object[][]')
f(1,14380,5,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,14380,5,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,14380,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,14380,5,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,14380,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,14380,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,14380,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,14380,1,2,'org.openjdk.jmh.infra.Control')
f(8,14381,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,14381,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,14381,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,14381,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,14381,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,14381,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,14384,1,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,14384,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,14384,1,1,'java/lang/ClassLoader.loadClass')
f(10,14384,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,14384,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,14384,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,14384,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,14384,1,1,'jdk/internal/loader/URLClassPath.getResource')
f(15,14384,1,1,'jdk/internal/loader/URLClassPath$JarLoader.getResource')
f(16,14384,1,1,'java/util/jar/JarFile.getJarEntry')
f(17,14384,1,1,'java/util/jar/JarFile.getEntry')
f(18,14384,1,1,'java/util/zip/ZipFile.getEntry')
f(19,14384,1,1,'java/util/zip/ZipFile.getZipEntry')
f(20,14384,1,1,'java/util/jar/JavaUtilJarAccessImpl.entryFor')
f(21,14384,1,1,'java/util/jar/JarFile.entryFor')
f(22,14384,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: 592px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(37);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,297,3,'all')
f(1,0,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,1,3,'thread_native_entry(Thread*)')
f(3,0,1,4,'Thread::call_run()')
f(4,0,1,4,'VMThread::run()')
f(5,0,1,4,'VMThread::inner_execute(VM_Operation*)')
f(6,0,1,4,'VMThread::evaluate_operation(VM_Operation*)')
f(7,0,1,4,'VM_Operation::evaluate()')
f(8,0,1,4,'VM_G1CollectForAllocation::doit()')
f(9,0,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint(double)')
f(10,0,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint_helper(double)')
f(11,0,1,4,'G1CollectedHeap::post_evacuate_collection_set(G1EvacuationInfo&, G1RedirtyCardsQueueSet*, G1ParScanThreadStateSet*)')
f(12,0,1,4,'void WeakProcessor::weak_oops_do<G1STWIsAliveClosure, G1KeepAliveClosure>(WorkGang*, G1STWIsAliveClosure*, G1KeepAliveClosure*, WeakProcessorTimes*)')
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,5,3,'[unknown_Java]')
f(2,1,1,1,'kyo/bench/CollectAllBench$$Lambda$41.0x0000000800d24940.apply')
f(2,2,4,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(1,6,291,1,'java/lang/Thread.run')
f(2,6,291,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,6,291,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,6,291,1,'java/util/concurrent/FutureTask.run')
f(5,6,291,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,6,291,1,'java/util/concurrent/FutureTask.run')
f(7,6,291,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,6,291,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,6,291,1,'java/lang/reflect/Method.invoke')
f(10,6,291,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,6,291,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,6,291,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,6,291,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,6,291,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,6,291,1,'kyo/bench/Bench.syncKyo',55,0,0)
f(16,6,200,1,'kyo/bench/Bench.runLoop$1',55,0,0)
f(17,27,179,1,'kyo/bench/CollectAllBench$$anon$2.apply',34,0,0)
f(18,29,55,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1',7,0,0)
f(19,31,48,1,'kyo/bench/CollectAllBench$$Lambda$41.0x0000000800d24940.apply')
f(20,31,48,2,'kyo/bench/CollectAllBench.$anonfun$2',33,0,0)
f(21,31,48,2,'scala/collection/AbstractIterable.sum',33,0,0)
f(22,31,48,2,'scala/collection/IterableOnceOps.sum$',33,0,0)
f(23,31,48,2,'scala/collection/IterableOnceOps.sum',33,0,0)
f(24,31,48,2,'scala/collection/AbstractIterable.reduce',33,0,0)
f(25,31,48,2,'scala/collection/IterableOnceOps.reduce$',33,0,0)
f(26,31,48,2,'scala/collection/IterableOnceOps.reduce',33,0,0)
f(27,31,48,2,'scala/collection/AbstractIterable.reduceLeft',33,0,0)
f(28,31,48,2,'scala/collection/IterableOnceOps.reduceLeft$',33,0,0)
f(29,31,48,2,'scala/collection/IterableOnceOps.reduceLeft',33,0,0)
f(30,32,34,2,'scala/collection/IterableOnceOps$$Lambda$42.0x0000000800d2a090.apply',19,0,0)
f(31,32,34,2,'scala/collection/IterableOnceOps.$anonfun$sum$1',19,0,0)
f(32,32,34,2,'scala/math/Numeric$IntIsIntegral$.plus',19,0,0)
f(33,32,34,2,'scala/runtime/BoxesRunTime.boxToInteger',19,0,0)
f(34,49,17,1,'java/lang/Integer.valueOf',2,0,0)
f(35,51,15,1,'java/lang/Integer.<init>')
f(36,51,15,1,'java/lang/Number.<init>')
f(30,66,1,2,'scala/collection/StrictOptimizedLinearSeqOps$$anon$1.hasNext',1,0,0)
f(30,67,12,2,'scala/collection/StrictOptimizedLinearSeqOps$$anon$1.next',12,0,0)
f(19,79,5,2,'kyo/bench/CollectAllBench$$anon$2.<init>',5,0,0)
f(20,82,2,2,'kyo/core$internal$KyoCont.<init>',2,0,0)
f(18,84,122,1,'kyo/lists$Lists$$anon$11.apply',25,0,0)
f(19,87,23,2,'kyo/bench/CollectAllBench$$anon$1.apply',22,0,0)
f(20,87,23,2,'kyo/bench/CollectAllBench$$anon$1.apply',22,0,0)
f(21,87,23,2,'scala/runtime/BoxesRunTime.boxToInteger',22,0,0)
f(22,104,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(23,104,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(24,104,1,4,'MemAllocator::allocate() const')
f(25,104,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(26,104,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(22,105,5,2,'java/lang/Integer.valueOf',5,0,0)
f(19,110,96,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(20,112,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(21,112,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(22,112,1,4,'MemAllocator::allocate() const')
f(23,112,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(24,112,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(25,112,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(26,112,1,4,'MutatorAllocRegion::retire(bool)')
f(27,112,1,4,'G1CollectedHeap::retire_mutator_alloc_region(HeapRegion*, unsigned long)')
f(28,112,1,4,'G1CollectionSet::add_eden_region(HeapRegion*)')
f(20,113,77,2,'kyo/lists$Lists$$Lambda$40.0x0000000800d0fb38.apply',76,0,0)
f(21,113,77,2,'kyo/lists$Lists.$anonfun$5',76,0,0)
f(22,113,27,2,'kyo/lists$Lists.loop$2',26,0,0)
f(23,131,1,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(23,132,8,2,'scala/collection/immutable/List.equals',8,0,0)
f(24,132,8,2,'scala/collection/immutable/List.listEq$1',8,0,0)
f(25,139,1,2,'scala/collection/immutable/List.isEmpty',1,0,0)
f(22,140,50,2,'scala/collection/mutable/ListBuffer.addOne',50,0,0)
f(23,145,8,2,'scala/collection/immutable/$colon$colon.<init>',8,0,0)
f(24,145,1,2,'scala/collection/immutable/List.<init>',1,0,0)
f(25,145,1,2,'scala/collection/immutable/AbstractSeq.<init>',1,0,0)
f(26,145,1,2,'scala/collection/AbstractSeq.<init>',1,0,0)
f(27,145,1,2,'scala/collection/AbstractIterable.<init>',1,0,0)
f(24,146,7,2,'scala/runtime/Statics.releaseFence',7,0,0)
f(25,147,6,2,'java/lang/invoke/LambdaForm$MH.0x0000000800ca0400.invoke_MT',6,0,0)
f(23,153,5,2,'scala/collection/immutable/$colon$colon.next_$eq',5,0,0)
f(23,158,2,2,'scala/collection/mutable/ListBuffer.ensureUnaliased',2,0,0)
f(23,160,9,2,'scala/collection/mutable/ListBuffer.first_$eq',9,0,0)
f(23,169,21,2,'scala/collection/mutable/ListBuffer.last0_$eq',21,0,0)
f(20,190,16,2,'kyo/lists$Lists$$anon$11.<init>',16,0,0)
f(21,190,16,2,'kyo/core$internal$KyoCont.<init>',16,0,0)
f(22,190,8,2,'kyo/core$internal$Kyo.<init>',8,0,0)
f(22,198,6,2,'kyo/ios$KyoIO.effect',6,0,0)
f(22,204,2,2,'kyo/ios$KyoIO.value',2,0,0)
f(16,206,91,1,'kyo/bench/CollectAllBench.kyoBench')
f(17,207,50,2,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1',50,0,0)
f(18,207,50,2,'kyo/bench/CollectAllBench$$Lambda$41.0x0000000800d24940.apply',50,0,0)
f(19,207,50,2,'kyo/bench/CollectAllBench.$anonfun$2',50,0,0)
f(20,207,50,2,'scala/runtime/BoxesRunTime.boxToLong',50,0,0)
f(17,257,30,2,'scala/collection/immutable/Range.map',25,0,0)
f(18,273,4,2,'scala/collection/SeqFactory$Delegate.newBuilder',4,0,0)
f(18,277,9,2,'scala/collection/immutable/VectorBuilder.addOne',5,0,0)
f(19,277,9,2,'scala/collection/immutable/VectorBuilder.addOne',5,0,0)
f(20,282,4,1,'scala/collection/immutable/VectorBuilder.advance')
f(21,282,4,1,'scala/collection/immutable/VectorBuilder.advance1')
f(18,286,1,1,'scala/collection/immutable/VectorBuilder.result')
f(19,286,1,1,'scala/collection/immutable/VectorBuilder.result')
f(20,286,1,2,'java/util/Arrays.copyOfRange',1,0,0)
f(17,287,10,2,'scala/runtime/RichInt$.until$extension',10,0,0)
f(18,287,10,2,'scala/collection/immutable/Range$Exclusive.<init>',10,0,0)
f(19,288,9,2,'scala/collection/immutable/Range.<init>',9,0,0)
f(20,288,9,2,'scala/collection/immutable/Range.longLength',9,0,0)
f(21,296,1,2,'scala/collection/immutable/Range.hasStub',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: 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,19971,3,'all')
f(1,0,19968,1,'java/lang/Thread.run')
f(2,0,19968,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,19968,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,2597,1,'java/util/concurrent/FutureTask.run')
f(5,0,2597,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,2597,1,'java/util/concurrent/FutureTask.run')
f(7,0,2597,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,2597,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,2597,1,'java/lang/reflect/Method.invoke')
f(10,0,2597,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,2597,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,2597,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,2597,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,2596,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,2596,1,'kyo/bench/Bench.forkKyo')
f(16,0,99,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,99,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,99,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,8,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,0,8,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c81148')
f(19,8,91,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c81148')
f(16,99,400,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,99,400,2,'kyo.bench.Bench$$anon$1')
f(16,499,2001,1,'kyo/bench/Bench.runLoop$2')
f(17,499,1132,1,'kyo/bench/Bench$$anon$1.apply')
f(18,499,62,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,499,62,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c88000.apply')
f(20,499,62,1,'kyo/bench/Bench.$anonfun$2')
f(21,499,62,1,'kyo/concurrent/fibers$Fiber.block')
f(22,499,62,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,561,1070,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,561,1070,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,561,1070,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(21,561,1070,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,561,56,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,617,959,2,'kyo.concurrent.scheduler.IOTask')
f(22,1576,55,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,1576,55,2,'kyo.concurrent.fibers$Fiber')
f(17,1631,869,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,1631,869,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,1631,869,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,1631,869,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,1631,576,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,1631,576,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,1631,85,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,1716,491,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,1716,491,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,2207,175,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,2382,118,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,2382,118,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,2382,118,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,2500,96,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,2500,45,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,2500,45,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,2500,45,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,2500,45,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c828a0')
f(17,2545,48,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,2545,48,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,2593,3,1,'kyo/locals$Locals$.save')
f(18,2593,3,2,'kyo.locals$Locals$$anon$3')
f(14,2596,1,2,'org.openjdk.jmh.results.BenchmarkTaskResult')
f(4,2597,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ec30.run')
f(5,2597,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,2597,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,2597,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,2597,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,2597,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,2597,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,2597,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,2608,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ee58.run')
f(5,2608,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,2608,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,2608,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,2608,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,2608,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,2608,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,2608,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$68+0x0000000800d4ed20')
f(4,2619,17349,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23480.run')
f(5,2619,17349,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,2619,17349,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,2619,17347,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,2619,17347,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,2619,17191,1,'kyo/bench/CountdownLatchBench$$anon$1.apply')
f(10,2619,17187,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(11,2619,17187,1,'kyo/bench/CountdownLatchBench$$Lambda$62.0x0000000800d4d100.apply')
f(12,2619,17187,1,'kyo/bench/CountdownLatchBench.$anonfun$1')
f(13,2619,17187,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(14,2619,7299,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod')
f(15,2619,7299,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial')
f(16,2619,7299,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,2619,7299,2,'kyo.bench.CountdownLatchBench$$Lambda$62+0x0000000800d4d100')
f(14,9918,9888,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(15,9918,9888,2,'kyo.bench.CountdownLatchBench$$anon$1')
f(10,19806,4,1,'kyo/concurrent/latches$$anon$4.apply')
f(11,19806,4,1,'kyo/concurrent/latches$$anon$4.apply')
f(12,19806,4,1,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete')
f(13,19806,4,1,'kyo/concurrent/fibers$Fiber$Promise.loop$23')
f(14,19806,4,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(15,19806,4,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(16,19806,4,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(17,19806,4,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(18,19806,4,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(19,19806,4,1,'scala/runtime/function/JProcedure1.apply')
f(20,19806,4,1,'scala/runtime/function/JProcedure1.apply')
f(21,19806,4,1,'kyo/concurrent/scheduler/IOTask$$Lambda$64.0x0000000800d4dad8.applyVoid')
f(22,19806,4,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(23,19806,1,2,'kyo.concurrent.scheduler.IOTask')
f(23,19807,3,1,'kyo/concurrent/scheduler/IOPromise.become')
f(24,19807,3,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(25,19807,1,1,'kyo/concurrent/scheduler/IOPromise$Linked$.apply')
f(26,19807,1,2,'kyo.concurrent.scheduler.IOPromise$Linked')
f(25,19808,2,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(26,19808,2,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(27,19808,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(28,19808,2,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(9,19810,7,1,'kyo/bench/CountdownLatchBench$$anon$3.apply')
f(10,19810,3,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$3')
f(11,19810,3,1,'kyo/bench/CountdownLatchBench$$Lambda$59.0x0000000800d4c6a8.apply')
f(12,19810,3,1,'kyo/bench/CountdownLatchBench.$anonfun$4')
f(13,19810,3,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$2')
f(14,19810,3,2,'kyo.bench.CountdownLatchBench$$anon$2')
f(10,19813,4,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,19813,4,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,19813,4,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(13,19813,4,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,19813,1,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(14,19814,2,2,'kyo.concurrent.scheduler.IOTask')
f(14,19816,1,1,'kyo/concurrent/fibers$Fiber$.promise')
f(15,19816,1,2,'kyo.concurrent.fibers$Fiber')
f(9,19817,10,1,'kyo/bench/CountdownLatchBench$$anon$4.apply')
f(10,19817,4,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$4')
f(11,19817,4,1,'kyo/bench/CountdownLatchBench$$Lambda$57.0x0000000800d4afb0.apply')
f(12,19817,4,1,'kyo/bench/CountdownLatchBench.$anonfun$2')
f(13,19817,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(14,19817,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(15,19817,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,19817,1,2,'kyo.bench.CountdownLatchBench$$Lambda$59+0x0000000800d4c6a8')
f(13,19818,2,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$3')
f(14,19818,2,2,'kyo.bench.CountdownLatchBench$$anon$3')
f(13,19820,1,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(14,19820,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(15,19820,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(16,19820,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,19820,1,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c828a0')
f(10,19821,6,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(11,19821,6,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(12,19821,6,1,'kyo/concurrent/latches$$anon$3.<init>')
f(13,19821,1,2,'java.util.concurrent.atomic.AtomicInteger')
f(13,19822,5,1,'kyo/concurrent/fibers$Fibers.unsafePromise')
f(14,19822,3,2,'kyo.concurrent.fibers$Fiber$Promise')
f(14,19825,2,2,'kyo.concurrent.scheduler.IOPromise')
f(9,19827,135,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,19827,135,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,19827,134,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c81148.apply')
f(12,19827,134,1,'kyo/bench/Bench.$anonfun$1')
f(13,19827,134,1,'kyo/bench/CountdownLatchBench.kyoBenchFiber')
f(14,19827,134,1,'kyo/concurrent/latches$Latches$.init')
f(15,19827,134,1,'kyo/concurrent/latches$Latches$.kyo$concurrent$latches$Latches$$$_$transformLoop$1')
f(16,19827,134,1,'kyo/concurrent/latches$Latches$$$Lambda$56.0x0000000800d49aa0.apply')
f(17,19827,134,1,'kyo/concurrent/latches$Latches$.$anonfun$adapted$1')
f(18,19827,134,1,'kyo/concurrent/latches$Latches$.$anonfun$1')
f(19,19827,134,2,'kyo.concurrent.latches$Latches$$anon$2')
f(11,19961,1,1,'kyo/bench/CountdownLatchBench$$Lambda$58.0x0000000800d4c3e8.apply')
f(12,19961,1,1,'kyo/bench/CountdownLatchBench.$anonfun$3')
f(13,19961,1,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(14,19961,1,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod')
f(15,19961,1,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial')
f(16,19961,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,19961,1,2,'kyo.bench.CountdownLatchBench$$Lambda$62+0x0000000800d4d100')
f(9,19962,2,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,19962,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,19962,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,19962,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,19962,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$63+0x0000000800d4d6d0')
f(10,19963,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,19963,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(9,19964,2,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,19964,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,19964,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,19964,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,19964,2,2,'kyo.concurrent.scheduler.IOTask$$Lambda$64+0x0000000800d4dad8')
f(7,19966,2,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,19966,2,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,19966,2,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,19966,2,1,'scala/runtime/ObjectRef.create')
f(11,19966,2,2,'scala.runtime.ObjectRef')
f(1,19968,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,19968,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,19968,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,19968,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,19968,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,19968,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,19968,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,19968,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,19968,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,19968,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,19968,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,19968,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,19968,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 576px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(36);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,276,3,'all')
f(1,0,4,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,1,3,3,'thread_native_entry(Thread*)')
f(3,1,3,4,'Thread::call_run()')
f(4,1,2,4,'JavaThread::thread_main_inner()')
f(5,1,2,4,'CompileBroker::compiler_thread_loop()')
f(6,1,2,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,1,2,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,1,2,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,1,1,4,'Compile::Code_Gen()')
f(10,1,1,4,'PhaseCFG::do_global_code_motion()')
f(11,1,1,4,'PhaseCFG::global_code_motion()')
f(12,1,1,4,'PhaseChaitin::gather_lrg_masks(bool)')
f(9,2,1,4,'Compile::Optimize()')
f(10,2,1,4,'PhaseIdealLoop::optimize(PhaseIterGVN&, LoopOptsMode)')
f(11,2,1,4,'PhaseIdealLoop::build_and_optimize(LoopOptsMode)')
f(12,2,1,4,'PhaseIdealLoop::build_loop_late(VectorSet&, Node_List&, Node_Stack&)')
f(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::gc_prologue(bool)')
f(12,3,1,4,'CollectedHeap::ensure_parsability(bool)')
f(13,3,1,4,'ThreadLocalAllocBuffer::retire(ThreadLocalAllocStats*)')
f(14,3,1,4,'ThreadLocalAllocBuffer::accumulate_and_reset_statistics(ThreadLocalAllocStats*)')
f(1,4,272,1,'java/lang/Thread.run')
f(2,4,272,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,4,272,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,4,14,1,'java/util/concurrent/FutureTask.run')
f(5,4,14,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,4,14,1,'java/util/concurrent/FutureTask.run')
f(7,4,14,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,4,14,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,4,14,1,'java/lang/reflect/Method.invoke')
f(10,4,14,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,4,14,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,4,14,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,4,14,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,4,13,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,4,13,1,'kyo/bench/Bench.forkKyo')
f(16,4,1,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,4,1,1,'kyo/bench/Bench$$anon$1.<init>')
f(18,4,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(16,5,12,1,'kyo/bench/Bench.runLoop$2')
f(17,5,7,1,'kyo/bench/Bench$$anon$1.apply')
f(18,5,7,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,5,7,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,5,5,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(21,5,5,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,5,5,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,5,5,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,5,5,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,5,5,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,5,5,1,'jdk/internal/misc/Unsafe.unpark')
f(27,5,5,3,'pthread_cond_signal')
f(28,5,5,5,'entry_SYSCALL_64_after_hwframe')
f(29,5,5,5,'do_syscall_64')
f(30,5,5,5,'__x64_sys_futex')
f(31,5,5,5,'do_futex')
f(32,5,5,5,'futex_wake')
f(33,5,5,5,'wake_up_q')
f(34,5,5,5,'_raw_spin_unlock_irqrestore')
f(20,10,2,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',2,0,0)
f(21,11,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(22,11,1,2,'kyo/ios$KyoIO.effect',1,0,0)
f(23,11,1,2,'kyo/ios$KyoIO.effect',1,0,0)
f(17,12,5,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,12,5,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,12,5,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,12,5,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,12,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,12,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,13,4,1,'java/util/concurrent/locks/LockSupport.park')
f(24,13,4,1,'jdk/internal/misc/Unsafe.park')
f(25,14,3,3,'[unknown]')
f(26,14,3,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,14,3,5,'entry_SYSCALL_64_after_hwframe')
f(28,14,3,5,'do_syscall_64')
f(29,15,2,5,'__x64_sys_futex')
f(30,15,2,5,'do_futex')
f(31,15,2,5,'futex_wait')
f(32,15,2,5,'futex_wait_queue_me')
f(33,15,2,5,'schedule')
f(34,15,2,5,'__schedule')
f(35,15,2,5,'finish_task_switch.isra.0')
f(14,17,1,1,'org/openjdk/jmh/infra/BenchmarkParams.getOpsPerInvocation')
f(15,17,1,0,'org/openjdk/jmh/infra/BenchmarkParamsL2.getOpsPerInvocation',0,0,1)
f(4,18,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ec30.run')
f(5,18,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,18,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,18,1,2,'kyo/concurrent/scheduler/MovingStdDev.observe',1,0,0)
f(4,19,257,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23480.run')
f(5,19,257,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,19,257,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,19,251,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,19,251,2,'kyo/concurrent/scheduler/IOTask.eval',239,0,0)
f(9,27,232,2,'kyo/bench/CountdownLatchBench$$anon$1.apply',229,0,0)
f(10,74,185,2,'kyo/concurrent/latches$$anon$4.apply',182,0,0)
f(11,88,171,2,'kyo/concurrent/latches$$anon$4.apply',168,0,0)
f(12,93,1,2,'java/util/concurrent/atomic/AtomicInteger.decrementAndGet',1,0,0)
f(12,94,165,2,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete',162,0,0)
f(13,105,154,2,'kyo/concurrent/fibers$Fiber$Promise.loop$23',151,0,0)
f(14,128,131,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',128,0,0)
f(15,128,131,2,'kyo/concurrent/scheduler/IOPromise.complete',128,0,0)
f(16,155,58,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',58,0,0)
f(17,155,58,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',58,0,0)
f(18,171,21,2,'java/lang/invoke/VarForm.getMemberName',21,0,0)
f(18,192,21,2,'java/lang/invoke/VarHandle.checkExactAccessMode',21,0,0)
f(16,213,46,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',43,0,0)
f(17,213,46,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',43,0,0)
f(18,240,4,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run',1,0,0)
f(19,241,3,1,'scala/runtime/function/JProcedure1.apply')
f(20,242,2,2,'scala/runtime/function/JProcedure1.apply',2,0,0)
f(21,242,2,2,'kyo/concurrent/scheduler/IOTask$$Lambda$64.0x0000000800d4dad8.applyVoid',2,0,0)
f(22,242,2,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',2,0,0)
f(23,242,2,2,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1',2,0,0)
f(24,242,2,2,'kyo/concurrent/scheduler/IOTask$$Lambda$65.0x0000000800d4dee0.apply',2,0,0)
f(25,242,2,2,'kyo/concurrent/scheduler/IOTask.$anonfun$1',2,0,0)
f(26,242,2,2,'kyo/bench/CountdownLatchBench$$anon$2.apply',2,0,0)
f(27,242,2,2,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$2',2,0,0)
f(28,242,2,2,'kyo/bench/CountdownLatchBench$$Lambda$60.0x0000000800d4ca78.apply',2,0,0)
f(29,242,2,2,'kyo/bench/CountdownLatchBench.$anonfun$5',2,0,0)
f(30,242,2,2,'scala/runtime/BoxesRunTime.boxToInteger',2,0,0)
f(18,244,15,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$5.run',15,0,0)
f(9,259,2,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',2,0,0)
f(9,261,9,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,262,8,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,262,8,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,262,8,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,262,8,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,262,8,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,262,8,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,262,8,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,262,8,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,262,8,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,262,8,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,262,8,1,'jdk/internal/misc/Unsafe.unpark')
f(21,262,2,3,'Unsafe_Unpark')
f(22,262,1,4,'SafeThreadsListPtr::release_stable_list()')
f(22,263,1,3,'pthread_mutex_lock')
f(21,264,6,3,'pthread_cond_signal')
f(22,264,6,5,'entry_SYSCALL_64_after_hwframe')
f(23,264,6,5,'do_syscall_64')
f(24,264,6,5,'__x64_sys_futex')
f(25,264,6,5,'do_futex')
f(26,264,6,5,'futex_wake')
f(27,264,6,5,'wake_up_q')
f(28,264,6,5,'_raw_spin_unlock_irqrestore')
f(7,270,1,2,'kyo/concurrent/scheduler/Queue.poll',1,0,0)
f(8,270,1,2,'kyo/concurrent/scheduler/Queue.modify',1,0,0)
f(9,270,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(10,270,1,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',1,0,0)
f(7,271,5,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,271,5,1,'kyo/concurrent/scheduler/Worker.park')
f(9,271,5,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,271,5,1,'jdk/internal/misc/Unsafe.park')
f(11,271,1,3,'Unsafe_Park')
f(12,271,1,3,'clock_gettime')
f(13,271,1,3,'[vdso]')
f(11,272,4,3,'[unknown]')
f(12,272,4,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,272,4,5,'entry_SYSCALL_64_after_hwframe')
f(14,272,4,5,'do_syscall_64')
f(15,272,3,5,'__x64_sys_futex')
f(16,272,3,5,'do_futex')
f(17,272,3,5,'futex_wait')
f(18,272,3,5,'futex_wait_queue_me')
f(19,272,2,5,'hrtimer_sleeper_start_expires')
f(20,272,2,5,'_raw_spin_unlock_irqrestore')
f(19,274,1,5,'schedule')
f(20,274,1,5,'__schedule')
f(21,274,1,5,'finish_task_switch.isra.0')
f(15,275,1,5,'syscall_exit_to_user_mode')
f(16,275,1,5,'exit_to_user_mode_prepare')
f(17,275,1,5,'exit_to_user_mode_loop')
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,19469,3,'all')
f(1,0,19466,1,'java/lang/Thread.run')
f(2,0,19466,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,19466,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,3075,1,'java/util/concurrent/FutureTask.run')
f(5,0,3075,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,3075,1,'java/util/concurrent/FutureTask.run')
f(7,0,3075,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,3075,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,3075,1,'java/lang/reflect/Method.invoke')
f(10,0,3075,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,3075,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,3075,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,3075,1,'kyo/bench/jmh_generated/CountdownLatchBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,3074,1,'kyo/bench/jmh_generated/CountdownLatchBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,3074,1,'kyo/bench/Bench.syncKyo')
f(16,0,1486,1,'kyo/bench/Bench.runLoop$1')
f(17,0,788,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,788,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,788,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,788,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,368,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,368,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,147,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,147,221,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,147,221,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,368,216,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,584,204,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,584,204,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,584,204,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,788,698,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,788,605,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,788,605,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,788,605,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,788,529,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,788,529,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,788,529,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(24,788,529,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,788,115,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(25,903,358,2,'kyo.concurrent.scheduler.IOTask')
f(25,1261,56,1,'kyo/concurrent/fibers$Fiber$.promise')
f(26,1261,56,2,'kyo.concurrent.fibers$Fiber')
f(21,1317,76,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,1317,76,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c88000.apply')
f(23,1317,76,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,1317,76,1,'kyo/concurrent/fibers$Fiber.join')
f(25,1317,76,1,'kyo/concurrent/fibers$Fibers.get')
f(26,1317,76,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,1317,76,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,1393,93,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,1393,93,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c885f8.apply')
f(20,1393,93,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,1393,93,1,'kyo/concurrent/fibers$Fiber.block')
f(22,1393,93,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,1486,1588,1,'kyo/bench/CountdownLatchBench.kyoBench')
f(17,1486,186,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1486,186,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1486,186,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1486,111,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(21,1486,111,2,'kyo.bench.CountdownLatchBench$$Lambda$37+0x0000000800c81148')
f(20,1597,75,2,'kyo.bench.CountdownLatchBench$$Lambda$37+0x0000000800c81148')
f(17,1672,723,1,'kyo/concurrent/fibers$Fibers.block')
f(18,1672,82,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,1672,82,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,1672,82,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,1672,82,2,'kyo.concurrent.fibers$Fibers$$Lambda$40+0x0000000800c885f8')
f(18,1754,99,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,1754,99,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,1853,389,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,1853,389,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,2242,153,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,2242,153,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,2395,679,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,2395,136,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,2395,136,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,2395,136,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,2395,136,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c88000')
f(18,2531,411,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,2531,119,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,2531,119,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,2531,119,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,2531,119,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c828a0')
f(19,2650,271,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,2650,271,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(19,2921,21,1,'kyo/locals$Locals$.save')
f(20,2921,21,2,'kyo.locals$Locals$$anon$3')
f(18,2942,132,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,2942,132,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(14,3074,1,2,'org.openjdk.jmh.results.RawResults')
f(4,3075,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ee58.run')
f(5,3075,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,3075,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,3075,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,3075,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,3075,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,3075,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,3075,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,3086,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1f080.run')
f(5,3086,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,3086,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,3086,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,3086,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,3086,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,3086,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,3086,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$69+0x0000000800d4ed20')
f(4,3097,16369,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23480.run')
f(5,3097,16369,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,3097,16369,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,3097,16367,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,3097,16367,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,3097,16208,1,'kyo/bench/CountdownLatchBench$$anon$1.apply')
f(10,3097,16201,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(11,3097,16201,1,'kyo/bench/CountdownLatchBench$$Lambda$63.0x0000000800d4d100.apply')
f(12,3097,16201,1,'kyo/bench/CountdownLatchBench.$anonfun$1')
f(13,3097,16201,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(14,3097,7077,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod')
f(15,3097,7077,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial')
f(16,3097,7077,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,3097,7077,2,'kyo.bench.CountdownLatchBench$$Lambda$63+0x0000000800d4d100')
f(14,10174,9124,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(15,10174,9124,2,'kyo.bench.CountdownLatchBench$$anon$1')
f(10,19298,7,1,'kyo/concurrent/latches$$anon$4.apply')
f(11,19298,7,1,'kyo/concurrent/latches$$anon$4.apply')
f(12,19298,7,1,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete')
f(13,19298,7,1,'kyo/concurrent/fibers$Fiber$Promise.loop$23')
f(14,19298,7,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(15,19298,7,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(16,19298,7,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(17,19298,7,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(18,19298,7,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(19,19298,7,1,'scala/runtime/function/JProcedure1.apply')
f(20,19298,7,1,'scala/runtime/function/JProcedure1.apply')
f(21,19298,7,1,'kyo/concurrent/scheduler/IOTask$$Lambda$65.0x0000000800d4dad8.applyVoid')
f(22,19298,7,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(23,19298,5,2,'kyo.concurrent.scheduler.IOTask')
f(23,19303,2,1,'kyo/concurrent/scheduler/IOPromise.become')
f(24,19303,2,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(25,19303,1,1,'kyo/concurrent/scheduler/IOPromise$Linked$.apply')
f(26,19303,1,2,'kyo.concurrent.scheduler.IOPromise$Linked')
f(25,19304,1,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(26,19304,1,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(27,19304,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(28,19304,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(9,19305,3,1,'kyo/bench/CountdownLatchBench$$anon$3.apply')
f(10,19305,3,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$3')
f(11,19305,3,1,'kyo/bench/CountdownLatchBench$$Lambda$60.0x0000000800d4c6a8.apply')
f(12,19305,3,1,'kyo/bench/CountdownLatchBench.$anonfun$4')
f(13,19305,3,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$2')
f(14,19305,3,2,'kyo.bench.CountdownLatchBench$$anon$2')
f(9,19308,10,1,'kyo/bench/CountdownLatchBench$$anon$4.apply')
f(10,19308,6,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$4')
f(11,19308,6,1,'kyo/bench/CountdownLatchBench$$Lambda$58.0x0000000800d4afb0.apply')
f(12,19308,6,1,'kyo/bench/CountdownLatchBench.$anonfun$2')
f(13,19308,3,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(14,19308,3,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(15,19308,3,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,19308,3,2,'kyo.bench.CountdownLatchBench$$Lambda$59+0x0000000800d4c3e8')
f(13,19311,3,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(14,19311,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(15,19311,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(16,19311,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,19311,1,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c828a0')
f(14,19312,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(15,19312,1,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(14,19313,1,1,'kyo/locals$Locals$.save')
f(15,19313,1,2,'kyo.locals$Locals$$anon$3')
f(10,19314,4,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(11,19314,4,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(12,19314,1,2,'kyo.concurrent.latches$$anon$3')
f(12,19315,3,1,'kyo/concurrent/latches$$anon$3.<init>')
f(13,19315,3,1,'kyo/concurrent/fibers$Fibers.unsafePromise')
f(14,19315,1,2,'kyo.concurrent.fibers$Fiber$Promise')
f(14,19316,2,2,'kyo.concurrent.scheduler.IOPromise')
f(9,19318,142,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,19318,142,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,19318,140,1,'kyo/bench/CountdownLatchBench$$Lambda$37.0x0000000800c81148.apply')
f(12,19318,140,1,'kyo/bench/CountdownLatchBench.kyoBench$$anonfun$1')
f(13,19318,140,1,'kyo/bench/CountdownLatchBench.kyoBenchFiber')
f(14,19318,1,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$4')
f(15,19318,1,2,'kyo.bench.CountdownLatchBench$$anon$4')
f(14,19319,139,1,'kyo/concurrent/latches$Latches$.init')
f(15,19319,139,1,'kyo/concurrent/latches$Latches$.kyo$concurrent$latches$Latches$$$_$transformLoop$1')
f(16,19319,139,1,'kyo/concurrent/latches$Latches$$$Lambda$57.0x0000000800d49f00.apply')
f(17,19319,139,1,'kyo/concurrent/latches$Latches$.$anonfun$adapted$1')
f(18,19319,139,1,'kyo/concurrent/latches$Latches$.$anonfun$1')
f(19,19319,139,2,'kyo.concurrent.latches$Latches$$anon$2')
f(11,19458,2,1,'kyo/bench/CountdownLatchBench$$Lambda$59.0x0000000800d4c3e8.apply')
f(12,19458,2,1,'kyo/bench/CountdownLatchBench.$anonfun$3')
f(13,19458,2,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(14,19458,2,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod')
f(15,19458,2,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial')
f(16,19458,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,19458,2,2,'kyo.bench.CountdownLatchBench$$Lambda$63+0x0000000800d4d100')
f(9,19460,3,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,19460,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,19460,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,19460,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,19460,2,2,'kyo.concurrent.scheduler.IOTask$$Lambda$64+0x0000000800d4d6d0')
f(10,19462,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,19462,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(9,19463,1,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,19463,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,19463,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,19464,2,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,19464,2,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,19464,2,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,19464,2,1,'scala/runtime/ObjectRef.create')
f(11,19464,2,2,'scala.runtime.ObjectRef')
f(1,19466,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,19466,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,19466,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,19466,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,19466,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,19466,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,19466,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,19466,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,19466,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,19466,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,19466,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,19466,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,19466,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 608px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(38);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,277,3,'all')
f(1,0,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,3,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(10,1,1,4,'PhaseCFG::do_global_code_motion()')
f(11,1,1,4,'PhaseCFG::global_code_motion()')
f(12,1,1,4,'PhaseChaitin::gather_lrg_masks(bool)')
f(10,2,1,4,'PhaseChaitin::Register_Allocate()')
f(11,2,1,4,'CProjNode::is_block_proj() const')
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,'PhaseIdealLoop::Dominators()')
f(13,3,1,4,'NTarjan::DFS(NTarjan*, VectorSet&, PhaseIdealLoop*, unsigned int*)')
f(10,4,1,4,'PhaseIterGVN::optimize()')
f(11,4,1,4,'PhaseIterGVN::transform_old(Node*)')
f(12,4,1,4,'PhiNode::Ideal(PhaseGVN*, bool)')
f(13,4,1,4,'PhiNode::unique_input(PhaseTransform*, bool)')
f(4,5,1,4,'VMThread::run()')
f(5,5,1,4,'VMThread::inner_execute(VM_Operation*)')
f(6,5,1,4,'SafepointSynchronize::begin()')
f(7,5,1,4,'SafepointSynchronize::do_cleanup_tasks()')
f(8,5,1,4,'WorkGang::run_task(AbstractGangTask*, unsigned int, bool)')
f(9,5,1,3,'sem_post')
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_wake')
f(15,5,1,5,'wake_up_q')
f(16,5,1,5,'_raw_spin_unlock_irqrestore')
f(1,6,271,1,'java/lang/Thread.run')
f(2,6,271,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,6,271,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,6,15,1,'java/util/concurrent/FutureTask.run')
f(5,6,15,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,6,15,1,'java/util/concurrent/FutureTask.run')
f(7,6,15,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,6,15,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,6,15,1,'java/lang/reflect/Method.invoke')
f(10,6,15,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,6,15,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,6,15,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,6,15,1,'kyo/bench/jmh_generated/CountdownLatchBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,6,15,1,'kyo/bench/jmh_generated/CountdownLatchBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub',0,1,0)
f(15,6,15,1,'kyo/bench/Bench.syncKyo',2,0,0)
f(16,6,13,1,'kyo/bench/Bench.runLoop$1')
f(17,6,7,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,6,7,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,6,7,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,6,7,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,6,7,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,6,7,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,7,6,1,'java/util/concurrent/locks/LockSupport.park')
f(24,7,6,1,'jdk/internal/misc/Unsafe.park')
f(25,7,6,3,'[unknown]')
f(26,7,6,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,7,6,5,'entry_SYSCALL_64_after_hwframe')
f(28,7,6,5,'do_syscall_64')
f(29,7,6,5,'__x64_sys_futex')
f(30,7,6,5,'do_futex')
f(31,7,6,5,'futex_wait')
f(32,7,6,5,'futex_wait_queue_me')
f(33,7,6,5,'schedule')
f(34,7,6,5,'__schedule')
f(35,7,6,5,'finish_task_switch.isra.0')
f(17,13,6,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,13,6,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,13,6,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,13,6,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,13,6,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,13,6,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,13,6,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(24,13,6,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,13,6,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,13,6,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,13,6,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(28,13,6,1,'java/util/concurrent/locks/LockSupport.unpark')
f(29,13,6,1,'jdk/internal/misc/Unsafe.unpark')
f(30,13,6,3,'pthread_cond_signal')
f(31,14,5,5,'entry_SYSCALL_64_after_hwframe')
f(32,14,5,5,'do_syscall_64')
f(33,14,5,5,'__x64_sys_futex')
f(34,14,5,5,'do_futex')
f(35,14,5,5,'futex_wake')
f(36,14,5,5,'wake_up_q')
f(37,14,5,5,'_raw_spin_unlock_irqrestore')
f(16,19,2,2,'kyo/bench/CountdownLatchBench.kyoBench',2,0,0)
f(17,19,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(18,19,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(19,19,1,2,'kyo/bench/CountdownLatchBench$$Lambda$37.0x0000000800c81148.<init>',1,0,0)
f(17,20,1,2,'kyo/concurrent/fibers$Fibers.fork',1,0,0)
f(18,20,1,2,'kyo/concurrent/fibers$Fibers.forkFiber',1,0,0)
f(19,20,1,2,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',1,0,0)
f(20,20,1,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',1,0,0)
f(4,21,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ee58.run')
f(5,21,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,21,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,21,1,1,'java/lang/Thread.sleep')
f(8,21,1,3,'[unknown]')
f(9,21,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,21,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,21,1,5,'do_syscall_64')
f(12,21,1,5,'__x64_sys_futex')
f(13,21,1,5,'do_futex')
f(14,21,1,5,'futex_wait')
f(15,21,1,5,'futex_wait_queue_me')
f(16,21,1,5,'schedule')
f(17,21,1,5,'__schedule')
f(18,21,1,5,'finish_task_switch.isra.0')
f(4,22,255,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23480.run')
f(5,22,255,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,22,255,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,22,244,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,22,244,2,'kyo/concurrent/scheduler/IOTask.eval',230,0,0)
f(9,25,227,2,'kyo/bench/CountdownLatchBench$$anon$1.apply',226,0,0)
f(10,80,171,2,'kyo/concurrent/latches$$anon$4.apply',170,0,0)
f(11,86,165,2,'kyo/concurrent/latches$$anon$4.apply',164,0,0)
f(12,97,154,2,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete',153,0,0)
f(13,100,151,2,'kyo/concurrent/fibers$Fiber$Promise.loop$23',150,0,0)
f(14,158,93,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',92,0,0)
f(15,158,93,2,'kyo/concurrent/scheduler/IOPromise.complete',92,0,0)
f(16,190,22,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',22,0,0)
f(17,190,22,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',22,0,0)
f(18,200,12,2,'java/lang/invoke/VarHandle.checkExactAccessMode',12,0,0)
f(16,212,39,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',38,0,0)
f(17,212,39,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',38,0,0)
f(18,227,9,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run',8,0,0)
f(19,235,1,1,'scala/runtime/function/JProcedure1.apply')
f(20,235,1,2,'scala/runtime/function/JProcedure1.apply',1,0,0)
f(21,235,1,2,'kyo/concurrent/scheduler/IOTask$$Lambda$65.0x0000000800d4dad8.applyVoid',1,0,0)
f(22,235,1,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',1,0,0)
f(23,235,1,2,'kyo/concurrent/scheduler/IOTask.st',1,0,0)
f(18,236,15,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$5.run',15,0,0)
f(10,251,1,2,'kyo/concurrent/scheduler/IOTask.apply',1,0,0)
f(9,252,2,1,'kyo/bench/CountdownLatchBench$$anon$4.apply')
f(10,253,1,2,'kyo/concurrent/latches$Latches$$anon$2.apply',1,0,0)
f(11,253,1,2,'kyo/concurrent/latches$Latches$$anon$2.apply',1,0,0)
f(12,253,1,2,'kyo/concurrent/latches$$anon$3.<init>',1,0,0)
f(13,253,1,2,'kyo/concurrent/fibers$Fibers.unsafePromise',1,0,0)
f(14,253,1,2,'kyo/concurrent/fibers$Fiber$Promise.<init>',1,0,0)
f(15,253,1,2,'kyo/concurrent/fibers$Fiber.<init>',1,0,0)
f(9,254,1,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',1,0,0)
f(9,255,11,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,255,11,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',1,0,0)
f(11,255,11,1,'kyo/concurrent/scheduler/IOPromise.complete',1,0,0)
f(12,255,11,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush',1,0,0)
f(13,255,11,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',1,0,0)
f(14,255,11,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run',1,0,0)
f(15,255,1,3,'itable stub')
f(15,256,10,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,256,10,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,256,10,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,256,10,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,256,10,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,256,10,1,'jdk/internal/misc/Unsafe.unpark')
f(21,256,10,3,'pthread_cond_signal')
f(22,256,10,5,'entry_SYSCALL_64_after_hwframe')
f(23,256,10,5,'do_syscall_64')
f(24,257,8,5,'__x64_sys_futex')
f(25,257,8,5,'do_futex')
f(26,257,8,5,'futex_wake')
f(27,257,8,5,'wake_up_q')
f(28,257,8,5,'_raw_spin_unlock_irqrestore')
f(24,265,1,5,'syscall_enter_from_user_mode')
f(7,266,2,2,'kyo/concurrent/scheduler/Queue.poll',2,0,0)
f(8,267,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(9,267,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(10,267,1,2,'kyo/concurrent/scheduler/Queue$$Lambda$56.0x0000000800d48230.<init>',1,0,0)
f(11,267,1,2,'java/lang/Object.<init>',1,0,0)
f(7,268,9,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,268,1,1,'java/util/AbstractQueue.add')
f(9,268,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.offer')
f(10,268,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.producerChunkForIndex')
f(11,268,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.appendNextChunks')
f(12,268,1,2,'org/jctools/queues/MpUnboundedXaddArrayQueueProducerChunk.casProducerChunkIndex',1,0,0)
f(13,268,1,2,'sun/misc/Unsafe.compareAndSwapLong',1,0,0)
f(8,269,8,1,'kyo/concurrent/scheduler/Worker.park')
f(9,269,8,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,269,8,1,'jdk/internal/misc/Unsafe.park')
f(11,269,8,3,'[unknown]')
f(12,269,8,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,269,8,5,'entry_SYSCALL_64_after_hwframe')
f(14,269,8,5,'do_syscall_64')
f(15,269,7,5,'__x64_sys_futex')
f(16,269,7,5,'do_futex')
f(17,269,7,5,'futex_wait')
f(18,269,6,5,'futex_wait_queue_me')
f(19,269,6,5,'schedule')
f(20,269,6,5,'__schedule')
f(21,270,5,5,'finish_task_switch.isra.0')
f(18,275,1,5,'futex_wait_setup')
f(15,276,1,5,'syscall_exit_to_user_mode')
f(16,276,1,5,'exit_to_user_mode_prepare')
f(17,276,1,5,'exit_to_user_mode_loop')
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,14113,3,'all')
f(1,0,14109,1,'java/lang/Thread.run')
f(2,0,14109,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,14109,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,1820,1,'java/util/concurrent/FutureTask.run')
f(5,0,1820,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,1820,1,'java/util/concurrent/FutureTask.run')
f(7,0,1820,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,1820,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1820,1,'java/lang/reflect/Method.invoke')
f(10,0,1820,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,1820,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,1820,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,1820,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,1820,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,1820,1,'kyo/bench/Bench.forkKyo')
f(16,0,149,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,149,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,149,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,62,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,0,62,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3e760')
f(19,62,87,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3e760')
f(16,149,156,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,149,156,2,'kyo.bench.Bench$$anon$1')
f(16,305,1167,1,'kyo/bench/Bench.runLoop$2')
f(17,305,523,1,'kyo/bench/Bench$$anon$1.apply')
f(18,305,53,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,305,53,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c82ba8.apply')
f(20,305,53,1,'kyo/bench/Bench.$anonfun$2')
f(21,305,53,1,'kyo/concurrent/fibers$Fiber.block')
f(22,305,53,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,358,470,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,358,470,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,358,470,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply')
f(21,358,470,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,358,42,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,400,311,2,'kyo.concurrent.scheduler.IOTask')
f(22,711,117,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,711,117,2,'kyo.concurrent.fibers$Fiber')
f(17,828,644,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,828,644,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,828,644,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,828,644,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,828,314,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,828,314,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,828,95,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,923,219,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,923,219,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,1142,181,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,1323,149,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,1323,149,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,1323,149,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,1472,348,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,1472,103,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1472,103,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1472,103,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1472,103,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84000')
f(17,1575,181,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,1575,181,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,1756,64,1,'kyo/locals$Locals$.save')
f(18,1756,64,2,'kyo.locals$Locals$$anon$3')
f(4,1820,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,1820,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,1820,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,1820,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,1820,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,1820,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,1820,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,1820,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,1831,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e5f8.run')
f(5,1831,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,1831,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,1831,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,1831,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,1831,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,1831,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,1831,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$57+0x0000000800d48590')
f(4,1842,12267,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,1842,12267,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,1842,12267,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,1842,12234,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,1842,12234,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,1842,12183,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(10,1842,12183,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(11,1842,12183,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(12,1842,12183,2,'kyo.bench.DeepBindBench$$anon$1')
f(9,14025,51,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,14025,51,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,14025,51,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e760.apply')
f(12,14025,51,1,'kyo/bench/Bench.$anonfun$1')
f(13,14025,51,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,14025,51,1,'kyo/bench/DeepBindBench.kyoBench')
f(15,14025,51,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(16,14025,51,2,'kyo.bench.DeepBindBench$$anon$1')
f(7,14076,33,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,14076,33,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,14076,33,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,14076,33,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,14076,33,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(12,14076,33,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d47148')
f(1,14109,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,14109,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,14109,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,14109,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,14109,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,14109,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,14109,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,14109,1,2,'org.openjdk.jmh.runner.InfraControl')
f(8,14110,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,14110,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,14110,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,14110,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,14110,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,14110,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,253,3,'all')
f(1,0,253,1,'java/lang/Thread.run')
f(2,0,253,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,253,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,28,1,'java/util/concurrent/FutureTask.run')
f(5,0,28,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,28,1,'java/util/concurrent/FutureTask.run')
f(7,0,28,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,28,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,28,1,'java/lang/reflect/Method.invoke')
f(10,0,28,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,28,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,28,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,28,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,28,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,28,1,'kyo/bench/Bench.forkKyo')
f(16,0,28,1,'kyo/bench/Bench.runLoop$2')
f(17,0,14,1,'kyo/bench/Bench$$anon$1.apply')
f(18,0,14,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,0,14,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,0,14,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply')
f(21,0,14,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,0,14,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,0,14,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,0,14,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,0,14,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,0,14,1,'jdk/internal/misc/Unsafe.unpark')
f(27,0,14,3,'pthread_cond_signal')
f(28,1,13,5,'entry_SYSCALL_64_after_hwframe')
f(29,1,1,5,'__x64_sys_futex')
f(29,2,12,5,'do_syscall_64')
f(30,2,11,5,'__x64_sys_futex')
f(31,2,11,5,'do_futex')
f(32,2,11,5,'futex_wake')
f(33,3,10,5,'wake_up_q')
f(34,3,10,5,'_raw_spin_unlock_irqrestore')
f(30,13,1,5,'syscall_enter_from_user_mode')
f(17,14,14,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,14,14,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,14,14,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,14,14,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,14,14,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,14,14,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,15,13,1,'java/util/concurrent/locks/LockSupport.park')
f(24,15,13,1,'jdk/internal/misc/Unsafe.park')
f(25,15,13,3,'[unknown]')
f(26,15,11,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,15,11,5,'entry_SYSCALL_64_after_hwframe')
f(28,15,11,5,'do_syscall_64')
f(29,15,11,5,'__x64_sys_futex')
f(30,15,11,5,'do_futex')
f(31,15,11,5,'futex_wait')
f(32,16,9,5,'futex_wait_queue_me')
f(33,16,9,5,'schedule')
f(34,16,9,5,'__schedule')
f(35,17,8,5,'finish_task_switch.isra.0')
f(32,25,1,5,'futex_wait_setup')
f(33,25,1,5,'get_futex_key')
f(26,26,2,3,'pthread_cond_wait')
f(4,28,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,28,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,28,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,28,1,1,'java/lang/Thread.sleep')
f(8,28,1,3,'[unknown]')
f(9,28,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,28,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,28,1,5,'do_syscall_64')
f(12,28,1,5,'__x64_sys_futex')
f(13,28,1,5,'do_futex')
f(14,28,1,5,'futex_wait')
f(15,28,1,5,'futex_wait_queue_me')
f(16,28,1,5,'schedule')
f(17,28,1,5,'__schedule')
f(18,28,1,5,'finish_task_switch.isra.0')
f(4,29,224,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,29,224,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,29,224,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,32,56,2,'kyo/concurrent/scheduler/IOTask.run',41,0,0)
f(8,32,9,2,'kyo/concurrent/scheduler/IOTask.curr_$eq',9,0,0)
f(8,41,15,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,41,15,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,41,15,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,41,15,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,41,15,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,41,15,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,41,15,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,41,15,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,41,15,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,41,15,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,41,15,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,41,15,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,41,15,1,'jdk/internal/misc/Unsafe.unpark')
f(21,41,1,3,'Unsafe_Unpark')
f(22,41,1,4,'ThreadsListHandle::cv_internal_thread_to_JavaThread(_jobject*, JavaThread**, oopDesc**)')
f(21,42,14,3,'pthread_cond_signal')
f(22,42,14,5,'entry_SYSCALL_64_after_hwframe')
f(23,42,14,5,'do_syscall_64')
f(24,42,14,5,'__x64_sys_futex')
f(25,42,14,5,'do_futex')
f(26,42,14,5,'futex_wake')
f(27,43,13,5,'wake_up_q')
f(28,43,13,5,'_raw_spin_unlock_irqrestore')
f(8,56,32,2,'scala/runtime/BoxesRunTime.equals',32,0,0)
f(9,56,32,2,'scala/runtime/BoxesRunTime.equals2',32,0,0)
f(7,88,152,2,'kyo/concurrent/scheduler/Queue.poll',152,0,0)
f(8,100,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(9,100,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(10,100,1,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47148.<init>',1,0,0)
f(8,101,139,2,'kyo/concurrent/scheduler/Queue.modify',139,0,0)
f(9,102,138,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47148.apply',138,0,0)
f(10,110,130,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',130,0,0)
f(11,110,76,2,'kyo/concurrent/scheduler/Queue.isEmpty',76,0,0)
f(11,186,54,2,'scala/collection/mutable/PriorityQueue.dequeue',54,0,0)
f(12,214,26,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',26,0,0)
f(7,240,13,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,240,13,1,'kyo/concurrent/scheduler/Worker.park')
f(9,240,13,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,240,13,1,'jdk/internal/misc/Unsafe.park')
f(11,241,12,3,'[unknown]')
f(12,241,12,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,241,12,5,'entry_SYSCALL_64_after_hwframe')
f(14,241,12,5,'do_syscall_64')
f(15,241,11,5,'__x64_sys_futex')
f(16,241,11,5,'do_futex')
f(17,241,11,5,'futex_wait')
f(18,241,11,5,'futex_wait_queue_me')
f(19,241,3,5,'hrtimer_sleeper_start_expires')
f(20,241,3,5,'_raw_spin_unlock_irqrestore')
f(19,244,8,5,'schedule')
f(20,244,8,5,'__schedule')
f(21,244,8,5,'finish_task_switch.isra.0')
f(15,252,1,5,'syscall_exit_to_user_mode')
f(16,252,1,5,'exit_to_user_mode_prepare')
f(17,252,1,5,'exit_to_user_mode_loop')
f(18,252,1,5,'__rseq_handle_notify_resume')
f(19,252,1,5,'__put_user_nocheck_8')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 336px}
</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(21);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,19969,3,'all')
f(1,0,19966,1,'java/lang/Thread.run')
f(2,0,19966,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,19966,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,19966,1,'java/util/concurrent/FutureTask.run')
f(5,0,19966,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,19966,1,'java/util/concurrent/FutureTask.run')
f(7,0,19966,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,19966,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,19966,1,'java/lang/reflect/Method.invoke')
f(10,0,19966,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,19966,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,19966,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,19966,1,'kyo/bench/jmh_generated/DeepBindBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,19966,1,'kyo/bench/jmh_generated/DeepBindBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,19966,1,'kyo/bench/Bench.syncKyo')
f(16,0,19964,1,'kyo/bench/Bench.runLoop$1')
f(17,0,19964,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(18,0,19964,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(19,0,19964,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(20,0,19964,2,'kyo.bench.DeepBindBench$$anon$1')
f(16,19964,2,1,'kyo/bench/DeepBindBench.kyoBench')
f(17,19964,2,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(18,19964,2,2,'kyo.bench.DeepBindBench$$anon$1')
f(1,19966,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,19966,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,19966,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,19966,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,19966,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,19966,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,19966,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,19966,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,19966,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,19966,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,19966,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,19966,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,19966,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: 336px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(21);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,298,3,'all')
f(1,0,298,1,'java/lang/Thread.run')
f(2,0,298,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,298,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,298,1,'java/util/concurrent/FutureTask.run')
f(5,0,298,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,298,1,'java/util/concurrent/FutureTask.run')
f(7,0,298,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,298,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,298,1,'java/lang/reflect/Method.invoke')
f(10,0,298,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,298,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,298,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,298,1,'kyo/bench/jmh_generated/DeepBindBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,298,1,'kyo/bench/jmh_generated/DeepBindBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(16,0,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(17,0,1,4,'MemAllocator::allocate() const')
f(18,0,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(15,1,172,2,'kyo/bench/Bench.syncKyo',172,0,0)
f(16,1,172,2,'kyo/bench/Bench.runLoop$1',172,0,0)
f(17,120,53,2,'kyo/bench/DeepBindBench$$anon$1.apply',53,0,0)
f(18,120,53,2,'kyo/bench/DeepBindBench$$anon$1.apply',53,0,0)
f(19,154,19,2,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1',19,0,0)
f(20,169,4,2,'kyo/bench/DeepBindBench$$anon$1.<init>',4,0,0)
f(15,173,125,2,'org/openjdk/jmh/infra/Blackhole.consume',125,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,16115,3,'all')
f(1,0,16111,1,'java/lang/Thread.run')
f(2,0,16111,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,16111,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,637,1,'java/util/concurrent/FutureTask.run')
f(5,0,637,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,637,1,'java/util/concurrent/FutureTask.run')
f(7,0,637,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,637,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,637,1,'java/lang/reflect/Method.invoke')
f(10,0,637,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,637,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,637,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,637,1,'kyo/bench/jmh_generated/DeepBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,637,1,'kyo/bench/jmh_generated/DeepBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,637,1,'kyo/bench/Bench.forkKyo')
f(16,0,49,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,49,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,49,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,49,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3e730')
f(16,49,583,1,'kyo/bench/Bench.runLoop$2')
f(17,49,305,1,'kyo/bench/Bench$$anon$1.apply')
f(18,49,8,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,49,8,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c82ba8.apply')
f(20,49,8,1,'kyo/bench/Bench.$anonfun$2')
f(21,49,8,1,'kyo/concurrent/fibers$Fiber.block')
f(22,49,8,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,57,297,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,57,297,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,57,297,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply')
f(21,57,297,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,57,1,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,58,296,2,'kyo.concurrent.scheduler.IOTask')
f(17,354,278,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,354,278,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,354,278,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,354,278,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,354,276,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,354,276,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,354,276,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,354,276,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,630,2,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(16,632,5,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,632,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,632,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,632,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,632,2,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84000')
f(17,634,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,634,2,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,636,1,1,'kyo/locals$Locals$.save')
f(18,636,1,2,'kyo.locals$Locals$$anon$3')
f(4,637,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,637,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,637,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,637,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,637,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,637,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,637,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,637,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,648,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e5f8.run')
f(5,648,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,648,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,648,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,648,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,648,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,648,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,648,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$69+0x0000000800d4e950')
f(4,659,15452,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,659,15452,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,659,15452,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,659,15451,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,659,15451,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,659,13948,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(10,659,13948,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(11,659,702,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(12,659,702,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(13,659,702,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(14,659,702,2,'kyo.bench.DeepBindMapBench$$anon$1$$Lambda$66+0x0000000800d4e000')
f(11,1361,415,2,'kyo.bench.DeepBindMapBench$$anon$1$$anon$2')
f(11,1776,1140,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(12,1776,1140,2,'kyo.bench.DeepBindMapBench$$anon$3')
f(11,2916,1106,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$transformLoop$2')
f(12,2916,1106,2,'kyo.bench.DeepBindMapBench$$anon$4')
f(11,4022,1129,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$transformLoop$3')
f(12,4022,1129,2,'kyo.bench.DeepBindMapBench$$anon$5')
f(11,5151,1284,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$transformLoop$4')
f(12,5151,1284,2,'kyo.bench.DeepBindMapBench$$anon$6')
f(11,6435,1058,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$transformLoop$5')
f(12,6435,1058,2,'kyo.bench.DeepBindMapBench$$anon$7')
f(11,7493,1280,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$transformLoop$6')
f(12,7493,1280,2,'kyo.bench.DeepBindMapBench$$anon$8')
f(11,8773,1225,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$transformLoop$7')
f(12,8773,1225,2,'kyo.bench.DeepBindMapBench$$anon$9')
f(11,9998,1080,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$transformLoop$8')
f(12,9998,1080,2,'kyo.bench.DeepBindMapBench$$anon$10')
f(11,11078,1158,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$transformLoop$9')
f(12,11078,1158,2,'kyo.bench.DeepBindMapBench$$anon$11')
f(11,12236,1127,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$transformLoop$10')
f(12,12236,1127,2,'kyo.bench.DeepBindMapBench$$anon$12')
f(11,13363,1244,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(12,13363,1244,2,'kyo.bench.DeepBindMapBench$$anon$13')
f(9,14607,1374,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(10,14607,941,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(11,14607,941,1,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$66.0x0000000800d4e000.apply')
f(12,14607,941,1,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$$anonfun$adapted$11')
f(13,14607,941,1,'kyo/bench/DeepBindMapBench.$anonfun$11')
f(14,14607,941,1,'kyo/bench/DeepBindMapBench.loop$1')
f(15,14607,941,2,'kyo.bench.DeepBindMapBench$$anon$1')
f(10,15548,433,1,'kyo/bench/DeepBindMapBench$$anon$12.apply')
f(11,15548,433,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$transformLoop$10')
f(12,15548,433,1,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$65.0x0000000800d4bc38.apply')
f(13,15548,433,1,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$$anonfun$adapted$10')
f(14,15548,433,1,'kyo/bench/DeepBindMapBench.$anonfun$10')
f(15,15548,433,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(16,15548,433,1,'java/lang/Integer.valueOf')
f(17,15548,433,2,'java.lang.Integer')
f(9,15981,129,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,15981,129,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,15981,129,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e730.apply')
f(12,15981,129,1,'kyo/bench/Bench.$anonfun$1')
f(13,15981,129,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,15981,129,1,'kyo/bench/DeepBindMapBench.kyoBench')
f(15,15981,129,1,'kyo/bench/DeepBindMapBench.loop$1')
f(16,15981,129,2,'kyo.bench.DeepBindMapBench$$anon$1')
f(7,16110,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,16110,1,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,16110,1,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,16110,1,1,'scala/runtime/ObjectRef.create')
f(11,16110,1,2,'scala.runtime.ObjectRef')
f(1,16111,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,16111,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,16111,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,16111,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,16111,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,16111,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,16111,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,16111,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,16111,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,16111,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,16111,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,16111,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,16111,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,16114,1,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,16114,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,16114,1,1,'java/lang/ClassLoader.loadClass')
f(10,16114,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,16114,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,16114,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,16114,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,16114,1,1,'jdk/internal/loader/URLClassPath.getResource')
f(15,16114,1,1,'jdk/internal/loader/URLClassPath$JarLoader.getResource')
f(16,16114,1,1,'java/util/jar/JarFile.getJarEntry')
f(17,16114,1,1,'java/util/jar/JarFile.getEntry')
f(18,16114,1,1,'java/util/zip/ZipFile.getEntry')
f(19,16114,1,1,'java/util/zip/ZipFile$Source.getEntryPos')
f(20,16114,1,1,'java/util/zip/ZipCoder$UTF8ZipCoder.toString')
f(21,16114,1,1,'java/lang/System$2.newStringUTF8NoRepl')
f(22,16114,1,1,'java/lang/String.newStringUTF8NoRepl')
f(23,16114,1,1,'java/util/Arrays.copyOfRange')
f(24,16114,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,295,3,'all')
f(1,0,8,3,'[unknown_Java]')
f(2,0,1,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(2,1,3,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(2,4,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(2,5,3,1,'kyo/ios$KyoIO.effect')
f(1,8,287,1,'java/lang/Thread.run')
f(2,8,287,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,8,287,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,8,2,1,'java/util/concurrent/FutureTask.run')
f(5,8,2,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,8,2,1,'java/util/concurrent/FutureTask.run')
f(7,8,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,8,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,8,2,1,'java/lang/reflect/Method.invoke')
f(10,8,2,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,8,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,8,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,8,2,1,'kyo/bench/jmh_generated/DeepBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,8,2,1,'kyo/bench/jmh_generated/DeepBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,8,2,1,'kyo/bench/Bench.forkKyo')
f(16,8,2,1,'kyo/bench/Bench.runLoop$2')
f(17,8,2,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,8,2,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,8,2,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,8,2,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,8,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,8,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,8,2,1,'java/util/concurrent/locks/LockSupport.park')
f(24,8,2,1,'jdk/internal/misc/Unsafe.park')
f(25,8,2,3,'[unknown]')
f(26,8,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,8,2,5,'entry_SYSCALL_64_after_hwframe')
f(28,8,2,5,'do_syscall_64')
f(29,8,2,5,'__x64_sys_futex')
f(30,8,2,5,'do_futex')
f(31,8,2,5,'futex_wait')
f(32,8,2,5,'futex_wait_queue_me')
f(33,8,2,5,'schedule')
f(34,8,2,5,'__schedule')
f(35,8,2,5,'finish_task_switch.isra.0')
f(4,10,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,10,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,10,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,10,1,1,'java/lang/Thread.sleep')
f(8,10,1,3,'[unknown]')
f(9,10,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(4,11,284,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,11,284,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,11,284,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,11,282,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,11,282,1,'kyo/concurrent/scheduler/IOTask.eval',30,0,0)
f(9,30,147,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(10,33,144,2,'kyo/bench/DeepBindMapBench$$anon$1.apply',143,0,0)
f(11,37,8,2,'kyo/bench/DeepBindMapBench$$anon$1$$anon$2.<init>',8,0,0)
f(12,37,8,2,'kyo/ios$KyoIO.<init>',8,0,0)
f(13,44,1,5,'asm_sysvec_hyperv_stimer0')
f(14,44,1,5,'sysvec_hyperv_stimer0')
f(15,44,1,5,'irq_exit_rcu')
f(16,44,1,5,'__irq_exit_rcu')
f(17,44,1,5,'__softirqentry_text_start')
f(11,45,72,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1',72,0,0)
f(12,46,71,2,'kyo/bench/DeepBindMapBench$$anon$3.<init>',71,0,0)
f(13,67,50,2,'kyo/core$internal$KyoCont.<init>',50,0,0)
f(14,71,42,2,'kyo/core$internal$Kyo.<init>',42,0,0)
f(15,100,13,2,'java/lang/Object.<init>',13,0,0)
f(14,113,4,2,'kyo/ios$KyoIO.effect',4,0,0)
f(15,113,4,2,'kyo/ios$KyoIO.effect',4,0,0)
f(11,117,1,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$transformLoop$9')
f(12,117,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(13,117,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(14,117,1,4,'MemAllocator::allocate() const')
f(11,118,59,2,'scala/runtime/BoxesRunTime.boxToInteger',59,0,0)
f(9,177,98,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(10,179,96,2,'kyo/bench/DeepBindMapBench$$anon$12.apply',96,0,0)
f(11,179,96,2,'kyo/bench/DeepBindMapBench$$anon$11.apply',96,0,0)
f(12,179,96,2,'kyo/bench/DeepBindMapBench$$anon$10.apply',96,0,0)
f(13,179,96,2,'kyo/bench/DeepBindMapBench$$anon$9.apply',96,0,0)
f(14,179,96,2,'kyo/bench/DeepBindMapBench$$anon$8.apply',96,0,0)
f(15,189,86,2,'kyo/bench/DeepBindMapBench$$anon$7.apply',86,0,0)
f(16,193,82,2,'kyo/bench/DeepBindMapBench$$anon$6.apply',82,0,0)
f(17,205,70,2,'kyo/bench/DeepBindMapBench$$anon$5.apply',70,0,0)
f(18,254,21,2,'kyo/bench/DeepBindMapBench$$anon$4.apply',21,0,0)
f(19,271,4,2,'kyo/bench/DeepBindMapBench$$anon$3.apply',4,0,0)
f(20,272,1,2,'kyo/bench/DeepBindMapBench$$anon$1$$anon$2.apply',1,0,0)
f(20,273,2,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1',2,0,0)
f(21,273,2,2,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$56.0x0000000800d49a30.apply',2,0,0)
f(22,273,2,2,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$_$$anonfun$adapted$1',2,0,0)
f(9,275,1,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',1,0,0)
f(9,276,3,2,'kyo/concurrent/scheduler/IOTask.st',3,0,0)
f(9,279,5,6,'kyo/core$internal$KyoCont.effect',0,5,0)
f(9,284,2,1,'kyo/ios$KyoIO.effect')
f(9,286,7,3,'vtable stub')
f(7,293,1,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,293,1,1,'kyo/concurrent/scheduler/Worker.park')
f(9,293,1,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,293,1,1,'jdk/internal/misc/Unsafe.park')
f(11,293,1,3,'[unknown]')
f(12,293,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,293,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,293,1,5,'do_syscall_64')
f(15,293,1,5,'__x64_sys_futex')
f(16,293,1,5,'do_futex')
f(17,293,1,5,'futex_wait')
f(18,293,1,5,'futex_wait_queue_me')
f(19,293,1,5,'schedule')
f(20,293,1,5,'__schedule')
f(21,293,1,5,'finish_task_switch.isra.0')
f(7,294,1,1,'kyo/concurrent/scheduler/Worker.stop$1')
f(8,294,1,2,'kyo/concurrent/scheduler/Scheduler$.stopWorker',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: 384px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(24);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,14321,3,'all')
f(1,0,14318,1,'java/lang/Thread.run')
f(2,0,14318,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,14318,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,14318,1,'java/util/concurrent/FutureTask.run')
f(5,0,14318,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,14318,1,'java/util/concurrent/FutureTask.run')
f(7,0,14318,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,14318,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,14318,1,'java/lang/reflect/Method.invoke')
f(10,0,14318,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,14318,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,14318,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,14318,1,'kyo/bench/jmh_generated/DeepBindMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,14318,1,'kyo/bench/jmh_generated/DeepBindMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,14318,1,'kyo/bench/Bench.syncKyo')
f(16,0,14317,1,'kyo/bench/Bench.runLoop$1')
f(17,0,13701,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(18,0,13701,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(19,0,535,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,0,535,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,0,535,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,0,535,2,'kyo.bench.DeepBindMapBench$$anon$1$$Lambda$49+0x0000000800d07778')
f(19,535,599,2,'kyo.bench.DeepBindMapBench$$anon$1$$anon$2')
f(19,1134,899,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(20,1134,899,2,'kyo.bench.DeepBindMapBench$$anon$3')
f(19,2033,1464,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$transformLoop$2')
f(20,2033,1464,2,'kyo.bench.DeepBindMapBench$$anon$4')
f(19,3497,1220,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$transformLoop$3')
f(20,3497,1220,2,'kyo.bench.DeepBindMapBench$$anon$5')
f(19,4717,864,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$transformLoop$4')
f(20,4717,864,2,'kyo.bench.DeepBindMapBench$$anon$6')
f(19,5581,1208,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$transformLoop$5')
f(20,5581,1208,2,'kyo.bench.DeepBindMapBench$$anon$7')
f(19,6789,923,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$transformLoop$6')
f(20,6789,923,2,'kyo.bench.DeepBindMapBench$$anon$8')
f(19,7712,1204,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$transformLoop$7')
f(20,7712,1204,2,'kyo.bench.DeepBindMapBench$$anon$9')
f(19,8916,1417,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$transformLoop$8')
f(20,8916,1417,2,'kyo.bench.DeepBindMapBench$$anon$10')
f(19,10333,926,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$transformLoop$9')
f(20,10333,926,2,'kyo.bench.DeepBindMapBench$$anon$11')
f(19,11259,1239,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$transformLoop$10')
f(20,11259,1239,2,'kyo.bench.DeepBindMapBench$$anon$12')
f(19,12498,1203,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(20,12498,1203,2,'kyo.bench.DeepBindMapBench$$anon$13')
f(17,13701,616,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(18,13701,616,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(19,13701,616,1,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$49.0x0000000800d07778.apply')
f(20,13701,616,1,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$$anonfun$adapted$11')
f(21,13701,616,1,'kyo/bench/DeepBindMapBench.$anonfun$11')
f(22,13701,616,1,'kyo/bench/DeepBindMapBench.loop$1')
f(23,13701,616,2,'kyo.bench.DeepBindMapBench$$anon$1')
f(16,14317,1,1,'kyo/bench/DeepBindMapBench.kyoBench')
f(17,14317,1,1,'kyo/bench/DeepBindMapBench.loop$1')
f(18,14317,1,2,'kyo.bench.DeepBindMapBench$$anon$1')
f(1,14318,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,14318,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,14318,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,14318,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,14318,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,14318,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,14318,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,14318,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,14318,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,14318,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,14318,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,14318,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,14318,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 448px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(28);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,298,3,'all')
f(1,0,2,3,'[unknown_Java]')
f(2,0,2,1,'kyo/bench/DeepBindMapBench$$anon$12.apply')
f(1,2,296,1,'java/lang/Thread.run')
f(2,2,296,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,2,296,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,2,296,1,'java/util/concurrent/FutureTask.run')
f(5,2,296,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,2,296,1,'java/util/concurrent/FutureTask.run')
f(7,2,296,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,2,296,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,2,296,1,'java/lang/reflect/Method.invoke')
f(10,2,296,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,2,296,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,2,296,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,2,296,1,'kyo/bench/jmh_generated/DeepBindMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,2,296,1,'kyo/bench/jmh_generated/DeepBindMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,2,296,1,'kyo/bench/Bench.syncKyo')
f(16,2,296,1,'kyo/bench/Bench.runLoop$1')
f(17,5,56,2,'kyo/bench/DeepBindMapBench$$anon$1.apply',56,0,0)
f(18,5,56,2,'kyo/bench/DeepBindMapBench$$anon$1.apply',56,0,0)
f(19,5,56,2,'scala/runtime/BoxesRunTime.boxToInteger',56,0,0)
f(17,61,237,2,'kyo/bench/DeepBindMapBench$$anon$13.apply',144,0,0)
f(18,79,126,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11',126,0,0)
f(19,101,10,2,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$49.0x0000000800d07778.apply',10,0,0)
f(20,101,10,2,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$$anonfun$adapted$11',10,0,0)
f(21,110,1,2,'scala/runtime/BoxesRunTime.unboxToInt',1,0,0)
f(19,111,28,2,'scala/runtime/BoxesRunTime.boxToInteger',28,0,0)
f(19,139,66,2,'scala/runtime/BoxesRunTime.unboxToInt',66,0,0)
f(20,204,1,2,'java/lang/Integer.intValue',1,0,0)
f(18,205,93,1,'kyo/bench/DeepBindMapBench$$anon$12.apply')
f(19,205,76,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$transformLoop$10',76,0,0)
f(20,205,76,2,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$48.0x0000000800d073b0.apply',76,0,0)
f(21,205,76,2,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$$anonfun$adapted$10',76,0,0)
f(22,205,76,2,'kyo/bench/DeepBindMapBench.$anonfun$10',76,0,0)
f(23,205,76,2,'scala/runtime/BoxesRunTime.boxToInteger',76,0,0)
f(19,281,17,2,'kyo/bench/DeepBindMapBench$$anon$11.apply',17,0,0)
f(20,281,17,2,'kyo/bench/DeepBindMapBench$$anon$10.apply',17,0,0)
f(21,282,16,2,'kyo/bench/DeepBindMapBench$$anon$9.apply',16,0,0)
f(22,295,3,2,'kyo/bench/DeepBindMapBench$$anon$8.apply',3,0,0)
f(23,297,1,2,'kyo/bench/DeepBindMapBench$$anon$7.apply',1,0,0)
f(24,297,1,2,'kyo/bench/DeepBindMapBench$$anon$6.apply',1,0,0)
f(25,297,1,2,'kyo/bench/DeepBindMapBench$$anon$5.apply',1,0,0)
f(26,297,1,2,'kyo/bench/DeepBindMapBench$$anon$4.apply',1,0,0)
f(27,297,1,2,'kyo/bench/DeepBindMapBench$$anon$3.apply',1,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 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,13141,3,'all')
f(1,0,13138,1,'java/lang/Thread.run')
f(2,0,13138,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,13138,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,1003,1,'java/util/concurrent/FutureTask.run')
f(5,0,1003,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,1003,1,'java/util/concurrent/FutureTask.run')
f(7,0,1003,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,1003,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1003,1,'java/lang/reflect/Method.invoke')
f(10,0,1003,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,1003,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,1003,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,1003,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,1003,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,1003,1,'kyo/bench/Bench.forkKyo')
f(16,0,75,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,75,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,75,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,75,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c81148')
f(16,75,141,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,75,141,2,'kyo.bench.Bench$$anon$1')
f(16,216,606,1,'kyo/bench/Bench.runLoop$2')
f(17,216,287,1,'kyo/bench/Bench$$anon$1.apply')
f(18,216,115,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,216,115,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c88000.apply')
f(20,216,115,1,'kyo/bench/Bench.$anonfun$2')
f(21,216,115,1,'kyo/concurrent/fibers$Fiber.block')
f(22,216,115,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,331,172,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,331,172,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,331,172,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(21,331,172,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,331,172,2,'kyo.concurrent.scheduler.IOTask')
f(17,503,319,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,503,319,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,503,319,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,503,319,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,503,133,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,503,133,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,503,17,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,520,116,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,520,116,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,636,39,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,675,147,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,675,147,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,675,147,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,822,181,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,822,180,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,822,180,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,822,180,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,822,180,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c828a0')
f(17,1002,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,1002,1,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(4,1003,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ea20.run')
f(5,1003,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,1003,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,1003,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,1003,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,1003,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,1003,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,1003,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,1014,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec48.run')
f(5,1014,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,1014,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,1014,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,1014,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,1014,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,1014,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$65+0x0000000800d553c0')
f(4,1025,12113,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d230f8.run')
f(5,1025,12113,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,1025,12113,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,1025,12113,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,1025,12113,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,1025,6625,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,1025,6625,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(11,1025,6625,1,'kyo/bench/EnqueueDequeueBench$$Lambda$62.0x0000000800d54a70.apply')
f(12,1025,6625,1,'kyo/bench/EnqueueDequeueBench.$anonfun$2')
f(13,1025,6625,1,'kyo/bench/EnqueueDequeueBench.loop$2')
f(14,1025,1306,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(15,1025,1306,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(16,1025,1306,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,1025,1306,2,'kyo.bench.EnqueueDequeueBench$$Lambda$60+0x0000000800d54000')
f(14,2331,1796,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(15,2331,1796,2,'kyo.bench.EnqueueDequeueBench$$anon$2')
f(14,4127,3523,1,'kyo/concurrent/channels$Channels$$anon$14.put')
f(15,4127,3523,1,'kyo/concurrent/channels$Channels$Blocking.put$')
f(16,4127,3523,1,'kyo/concurrent/channels$Channels$Blocking.put')
f(17,4127,935,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,4127,935,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,4127,935,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,4127,935,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$59+0x0000000800d4f8c0')
f(17,5062,949,1,'kyo/concurrent/channels$Channels$$anon$14.putFiber')
f(18,5062,949,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$_$transformLoop$10')
f(19,5062,949,1,'kyo/concurrent/channels$Channels$$anon$14$$Lambda$58.0x0000000800d4f4f0.apply')
f(20,5062,949,1,'kyo/concurrent/channels$Channels$$anon$14.$anonfun$11')
f(21,5062,949,2,'kyo.concurrent.channels$$anon$19')
f(17,6011,1639,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1')
f(18,6011,1639,2,'kyo.concurrent.channels$Channels$Blocking$$anon$1')
f(9,7650,5298,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,7650,5298,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(11,7650,5298,1,'kyo/bench/EnqueueDequeueBench$$Lambda$60.0x0000000800d54000.apply')
f(12,7650,5298,1,'kyo/bench/EnqueueDequeueBench.$anonfun$1')
f(13,7650,1256,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(14,7650,1256,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(15,7650,1256,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,7650,1256,2,'kyo.bench.EnqueueDequeueBench$$Lambda$62+0x0000000800d54a70')
f(13,8906,1813,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(14,8906,1813,2,'kyo.bench.EnqueueDequeueBench$$anon$1')
f(13,10719,2229,1,'kyo/concurrent/channels$Channels$$anon$14.take')
f(14,10719,2229,1,'kyo/concurrent/channels$Channels$Blocking.take$')
f(15,10719,2229,1,'kyo/concurrent/channels$Channels$Blocking.take')
f(16,10719,642,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,10719,642,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,10719,642,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,10719,642,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$61+0x0000000800d546a0')
f(16,11361,1587,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2')
f(17,11361,1587,2,'kyo.concurrent.channels$Channels$Blocking$$anon$2')
f(9,12948,62,1,'kyo/bench/EnqueueDequeueBench$$anon$3.apply')
f(10,12948,1,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$3')
f(11,12948,1,1,'kyo/bench/EnqueueDequeueBench$$Lambda$57.0x0000000800d4c7f8.apply')
f(12,12948,1,1,'kyo/bench/EnqueueDequeueBench.$anonfun$3')
f(13,12948,1,1,'kyo/bench/EnqueueDequeueBench.loop$2')
f(14,12948,1,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(15,12948,1,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(16,12948,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,12948,1,2,'kyo.bench.EnqueueDequeueBench$$Lambda$60+0x0000000800d54000')
f(10,12949,61,1,'kyo/concurrent/channels$Channels$$anon$21.apply')
f(11,12949,60,1,'kyo/concurrent/channels$Channels$.kyo$concurrent$channels$Channels$$$_$transformLoop$11')
f(12,12949,60,1,'kyo/concurrent/channels$Channels$$$Lambda$56.0x0000000800d4c028.apply')
f(13,12949,60,1,'kyo/concurrent/channels$Channels$.$anonfun$9')
f(14,12949,60,1,'kyo/concurrent/channels$Channels$$anon$14.<init>')
f(15,12949,7,2,'org.jctools.queues.MpmcUnboundedXaddArrayQueue')
f(15,12956,53,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(16,12956,53,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(17,12956,53,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.<init>')
f(18,12956,5,2,'org.jctools.queues.SpscArrayQueue')
f(18,12961,48,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(19,12961,48,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(20,12961,48,1,'org/jctools/queues/MpmcUnboundedXaddChunk.<init>')
f(21,12961,3,1,'org/jctools/queues/MpUnboundedXaddChunk.<init>')
f(22,12961,3,1,'org/jctools/util/UnsafeRefArrayAccess.allocateRefArray')
f(23,12961,3,2,'java.lang.Object[]')
f(21,12964,45,1,'org/jctools/util/UnsafeLongArrayAccess.allocateLongArray')
f(22,12964,45,2,'long[]')
f(11,13009,1,1,'kyo/concurrent/queues$Queues$$anon$11.apply')
f(12,13009,1,1,'kyo/concurrent/queues$Queues$$anon$11.apply')
f(13,13009,1,2,'kyo.concurrent.queues$Queue')
f(9,13010,128,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,13010,128,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,13010,128,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c81148.apply')
f(12,13010,128,1,'kyo/bench/Bench.$anonfun$1')
f(13,13010,128,1,'kyo/bench/EnqueueDequeueBench.kyoBenchFiber')
f(14,13010,128,1,'kyo/concurrent/channels$Channels$.blocking')
f(15,13010,1,1,'kyo/concurrent/channels$Channels$.kyo$concurrent$channels$Channels$$$_$transformLoop$11')
f(16,13010,1,2,'kyo.concurrent.channels$Channels$$anon$21')
f(15,13011,127,1,'kyo/concurrent/queues$Queues$.bounded')
f(16,13011,127,2,'kyo.concurrent.queues$Queues$$anon$11')
f(1,13138,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,13138,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,13138,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,13138,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,13138,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,13138,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,13138,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,13138,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,13138,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,13138,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,13138,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,13138,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,13138,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 560px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(35);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,294,3,'all')
f(1,0,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/EnqueueDequeueBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,2,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_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.0x0000000800c828a0.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,'hash_futex')
f(4,2,292,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d230f8.run')
f(5,2,292,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,2,292,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,2,292,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,2,292,1,'kyo/concurrent/scheduler/IOTask.eval',25,0,0)
f(9,23,156,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,31,148,2,'kyo/concurrent/channels$Channels$Blocking$$anon$2.apply',130,0,0)
f(11,39,128,2,'kyo/concurrent/channels$$anon$16.apply',110,0,0)
f(12,55,112,2,'kyo/concurrent/channels$$anon$16.apply',94,0,0)
f(13,65,18,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(14,81,2,2,'kyo/concurrent/channels$Channels$$anon$14.q',2,0,0)
f(13,83,48,2,'kyo/concurrent/fibers$Fibers.value',48,0,0)
f(14,83,48,2,'kyo/concurrent/fibers$Fiber$.done',48,0,0)
f(15,83,48,2,'kyo/concurrent/fibers$Fiber.<init>',48,0,0)
f(13,131,35,2,'kyo/concurrent/queues$$anon$12.poll',35,0,0)
f(14,141,23,2,'java/util/concurrent/atomic/AtomicReference.getAndSet',23,0,0)
f(15,141,23,2,'java/lang/invoke/VarHandleGuards.guard_LL_L',23,0,0)
f(16,145,2,2,'java/lang/invoke/VarForm.getMemberName',2,0,0)
f(16,147,3,2,'java/lang/invoke/VarHandle.checkExactAccessMode',3,0,0)
f(16,150,14,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.getAndSet',14,0,0)
f(14,164,2,2,'scala/Option$.apply',2,0,0)
f(15,164,2,2,'scala/Some.<init>',2,0,0)
f(16,164,2,2,'scala/Option.<init>',2,0,0)
f(17,164,2,2,'java/lang/Object.<init>',2,0,0)
f(13,166,1,2,'scala/Some.value',1,0,0)
f(11,167,12,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2',12,0,0)
f(12,168,11,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$61.0x0000000800d544d8.apply',11,0,0)
f(13,168,11,2,'kyo/concurrent/channels$Channels$Blocking.$anonfun$2',11,0,0)
f(14,168,11,2,'kyo/concurrent/fibers$Fiber.join',11,0,0)
f(9,179,96,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,183,10,2,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2',10,0,0)
f(11,188,3,2,'kyo/bench/EnqueueDequeueBench$$Lambda$60.0x0000000800d4fc00.apply',3,0,0)
f(12,188,3,2,'kyo/bench/EnqueueDequeueBench.$anonfun$1',3,0,0)
f(13,189,2,2,'kyo/concurrent/channels$Channels$$anon$14.take',2,0,0)
f(14,189,2,2,'kyo/concurrent/channels$Channels$Blocking.take$',2,0,0)
f(15,190,1,2,'kyo/concurrent/channels$Channels$Blocking.take',1,0,0)
f(11,191,2,2,'kyo/bench/EnqueueDequeueBench$$anon$2.<init>',2,0,0)
f(12,192,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(10,193,82,2,'kyo/concurrent/channels$Channels$Blocking$$anon$1.apply',76,0,0)
f(11,197,40,2,'kyo/concurrent/channels$$anon$19.apply',34,0,0)
f(12,197,40,2,'kyo/concurrent/channels$$anon$19.apply',34,0,0)
f(13,204,6,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(13,210,27,2,'kyo/concurrent/queues$$anon$12.offer',27,0,0)
f(14,210,27,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',27,0,0)
f(15,212,25,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',25,0,0)
f(16,224,1,2,'java/lang/invoke/VarForm.getMemberName',1,0,0)
f(16,225,3,2,'java/lang/invoke/VarHandle.checkExactAccessMode',3,0,0)
f(16,228,9,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',9,0,0)
f(11,237,38,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1',38,0,0)
f(12,240,35,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$59.0x0000000800d4f830.apply',35,0,0)
f(13,256,19,2,'kyo/concurrent/channels$Channels$Blocking.$anonfun$1',19,0,0)
f(9,275,15,6,'kyo/core$internal$KyoCont.effect',0,15,0)
f(9,290,4,3,'vtable stub')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 448px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(28);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,14744,3,'all')
f(1,0,14741,1,'java/lang/Thread.run')
f(2,0,14741,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,14741,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,1331,1,'java/util/concurrent/FutureTask.run')
f(5,0,1331,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,1331,1,'java/util/concurrent/FutureTask.run')
f(7,0,1331,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,1331,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1331,1,'java/lang/reflect/Method.invoke')
f(10,0,1331,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,1331,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,1331,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,1331,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,1329,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,1329,1,'kyo/bench/Bench.syncKyo')
f(16,0,653,1,'kyo/bench/Bench.runLoop$1')
f(17,0,347,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,347,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,347,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,347,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,261,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,261,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,176,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,176,85,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,176,85,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,261,73,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,334,13,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,334,13,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,334,13,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,347,306,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,347,286,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,347,286,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,347,286,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,347,218,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,347,218,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,347,218,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(24,347,218,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,347,218,2,'kyo.concurrent.scheduler.IOTask')
f(21,565,68,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,565,68,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c88000.apply')
f(23,565,68,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,565,68,1,'kyo/concurrent/fibers$Fiber.join')
f(25,565,68,1,'kyo/concurrent/fibers$Fibers.get')
f(26,565,68,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,565,68,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,633,20,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,633,20,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c885f8.apply')
f(20,633,20,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,633,20,1,'kyo/concurrent/fibers$Fiber.block')
f(22,633,20,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,653,676,1,'kyo/bench/EnqueueDequeueBench.kyoBench')
f(17,653,70,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,653,70,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,653,70,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,653,70,2,'kyo.bench.EnqueueDequeueBench$$Lambda$37+0x0000000800c81148')
f(17,723,270,1,'kyo/concurrent/fibers$Fibers.block')
f(18,723,82,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,723,82,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,805,82,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,805,82,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,887,106,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,887,106,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,993,336,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,993,139,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,993,139,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,993,139,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,993,139,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c88000')
f(18,1132,86,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,1132,64,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,1132,64,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,1132,64,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,1132,64,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c828a0')
f(19,1196,22,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,1196,22,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(18,1218,111,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,1218,111,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(14,1329,1,1,'org/openjdk/jmh/results/BenchmarkTaskResult.add')
f(15,1329,1,1,'java/util/ArrayList.add')
f(16,1329,1,1,'java/util/ArrayList.add')
f(17,1329,1,1,'java/util/ArrayList.grow')
f(18,1329,1,1,'java/util/ArrayList.grow')
f(19,1329,1,2,'java.lang.Object[]')
f(14,1330,1,1,'org/openjdk/jmh/results/ThroughputResult.<init>')
f(15,1330,1,1,'java/lang/StringBuilder.<init>')
f(16,1330,1,1,'java/lang/AbstractStringBuilder.<init>')
f(17,1330,1,2,'byte[]')
f(4,1331,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec30.run')
f(5,1331,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,1331,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,1331,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,1331,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,1331,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,1331,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,1331,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,1342,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1ee58.run')
f(5,1342,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,1342,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,1342,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,1342,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,1342,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,1342,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$66+0x0000000800d55790')
f(4,1353,13388,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23480.run')
f(5,1353,13388,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,1353,13388,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,1353,13388,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,1353,13388,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,1353,7743,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,1353,6812,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(11,1353,6812,1,'kyo/bench/EnqueueDequeueBench$$Lambda$63.0x0000000800d54e40.apply')
f(12,1353,6812,1,'kyo/bench/EnqueueDequeueBench.$anonfun$2')
f(13,1353,6812,1,'kyo/bench/EnqueueDequeueBench.loop$2')
f(14,1353,1482,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(15,1353,1482,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(16,1353,1482,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,1353,1482,2,'kyo.bench.EnqueueDequeueBench$$Lambda$61+0x0000000800d543d0')
f(14,2835,1492,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(15,2835,1492,2,'kyo.bench.EnqueueDequeueBench$$anon$2')
f(14,4327,3838,1,'kyo/concurrent/channels$Channels$$anon$14.put')
f(15,4327,3838,1,'kyo/concurrent/channels$Channels$Blocking.put$')
f(16,4327,3838,1,'kyo/concurrent/channels$Channels$Blocking.put')
f(17,4327,998,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,4327,998,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,4327,998,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,4327,998,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$60+0x0000000800d54000')
f(17,5325,1266,1,'kyo/concurrent/channels$Channels$$anon$14.putFiber')
f(18,5325,1266,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$_$transformLoop$10')
f(19,5325,1266,1,'kyo/concurrent/channels$Channels$$anon$14$$Lambda$59.0x0000000800d4f950.apply')
f(20,5325,1266,1,'kyo/concurrent/channels$Channels$$anon$14.$anonfun$11')
f(21,5325,1266,2,'kyo.concurrent.channels$$anon$19')
f(17,6591,1574,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1')
f(18,6591,1574,2,'kyo.concurrent.channels$Channels$Blocking$$anon$1')
f(10,8165,931,1,'kyo/concurrent/channels$Channels$Blocking$$anon$2.apply')
f(11,8165,931,1,'kyo/concurrent/channels$$anon$16.apply')
f(12,8165,931,1,'kyo/concurrent/channels$$anon$16.apply')
f(13,8165,931,1,'kyo/concurrent/fibers$Fibers.value')
f(14,8165,931,1,'kyo/concurrent/fibers$Fiber$.done')
f(15,8165,931,2,'kyo.concurrent.fibers$Fiber')
f(9,9096,5476,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,9096,5476,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(11,9096,5476,1,'kyo/bench/EnqueueDequeueBench$$Lambda$61.0x0000000800d543d0.apply')
f(12,9096,5476,1,'kyo/bench/EnqueueDequeueBench.$anonfun$1')
f(13,9096,1385,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(14,9096,1385,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(15,9096,1385,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,9096,1385,2,'kyo.bench.EnqueueDequeueBench$$Lambda$63+0x0000000800d54e40')
f(13,10481,1483,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(14,10481,1483,2,'kyo.bench.EnqueueDequeueBench$$anon$1')
f(13,11964,2608,1,'kyo/concurrent/channels$Channels$$anon$14.take')
f(14,11964,2608,1,'kyo/concurrent/channels$Channels$Blocking.take$')
f(15,11964,2608,1,'kyo/concurrent/channels$Channels$Blocking.take')
f(16,11964,1009,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,11964,1009,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,11964,1009,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,11964,1009,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$62+0x0000000800d54a70')
f(16,12973,1599,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2')
f(17,12973,1599,2,'kyo.concurrent.channels$Channels$Blocking$$anon$2')
f(9,14572,38,1,'kyo/bench/EnqueueDequeueBench$$anon$3.apply')
f(10,14572,2,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$3')
f(11,14572,2,1,'kyo/bench/EnqueueDequeueBench$$Lambda$58.0x0000000800d4cc58.apply')
f(12,14572,2,1,'kyo/bench/EnqueueDequeueBench.$anonfun$3')
f(13,14572,2,1,'kyo/bench/EnqueueDequeueBench.loop$2')
f(14,14572,1,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(15,14572,1,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(16,14572,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,14572,1,2,'kyo.bench.EnqueueDequeueBench$$Lambda$61+0x0000000800d543d0')
f(14,14573,1,1,'kyo/concurrent/channels$Channels$$anon$14.put')
f(15,14573,1,1,'kyo/concurrent/channels$Channels$Blocking.put$')
f(16,14573,1,1,'kyo/concurrent/channels$Channels$Blocking.put')
f(17,14573,1,1,'kyo/concurrent/channels$Channels$$anon$14.putFiber')
f(18,14573,1,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$_$transformLoop$10')
f(19,14573,1,1,'kyo/concurrent/channels$Channels$$anon$14$$Lambda$59.0x0000000800d4f950.apply')
f(20,14573,1,1,'kyo/concurrent/channels$Channels$$anon$14.$anonfun$11')
f(21,14573,1,2,'kyo.concurrent.channels$$anon$19')
f(10,14574,36,1,'kyo/concurrent/channels$Channels$$anon$21.apply')
f(11,14574,36,1,'kyo/concurrent/channels$Channels$.kyo$concurrent$channels$Channels$$$_$transformLoop$11')
f(12,14574,36,1,'kyo/concurrent/channels$Channels$$$Lambda$57.0x0000000800d4c488.apply')
f(13,14574,36,1,'kyo/concurrent/channels$Channels$.$anonfun$9')
f(14,14574,36,1,'kyo/concurrent/channels$Channels$$anon$14.<init>')
f(15,14574,8,2,'org.jctools.queues.MpmcUnboundedXaddArrayQueue')
f(15,14582,28,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(16,14582,28,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(17,14582,28,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.<init>')
f(18,14582,3,2,'org.jctools.queues.SpscArrayQueue')
f(18,14585,24,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(19,14585,24,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(20,14585,1,2,'org.jctools.queues.MpmcUnboundedXaddChunk')
f(20,14586,23,1,'org/jctools/queues/MpmcUnboundedXaddChunk.<init>')
f(21,14586,23,1,'org/jctools/util/UnsafeLongArrayAccess.allocateLongArray')
f(22,14586,23,2,'long[]')
f(18,14609,1,1,'org/jctools/queues/SpscArrayQueue.<init>')
f(19,14609,1,1,'org/jctools/queues/SpscArrayQueueL3Pad.<init>')
f(20,14609,1,1,'org/jctools/queues/SpscArrayQueueConsumerIndexField.<init>')
f(21,14609,1,1,'org/jctools/queues/SpscArrayQueueL2Pad.<init>')
f(22,14609,1,1,'org/jctools/queues/SpscArrayQueueProducerIndexFields.<init>')
f(23,14609,1,1,'org/jctools/queues/SpscArrayQueueL1Pad.<init>')
f(24,14609,1,1,'org/jctools/queues/SpscArrayQueueColdField.<init>')
f(25,14609,1,1,'org/jctools/queues/ConcurrentCircularArrayQueue.<init>')
f(26,14609,1,1,'org/jctools/util/UnsafeRefArrayAccess.allocateRefArray')
f(27,14609,1,2,'java.lang.Object[]')
f(9,14610,131,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,14610,131,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,14610,131,1,'kyo/bench/EnqueueDequeueBench$$Lambda$37.0x0000000800c81148.apply')
f(12,14610,131,1,'kyo/bench/EnqueueDequeueBench.kyoBench$$anonfun$1')
f(13,14610,131,1,'kyo/bench/EnqueueDequeueBench.kyoBenchFiber')
f(14,14610,131,1,'kyo/concurrent/channels$Channels$.blocking')
f(15,14610,131,1,'kyo/concurrent/queues$Queues$.bounded')
f(16,14610,131,2,'kyo.concurrent.queues$Queues$$anon$11')
f(1,14741,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,14741,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,14741,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,14741,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,14741,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,14741,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,14741,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,14741,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,14741,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,14741,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,14741,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,14741,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,14741,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 608px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(38);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,294,3,'all')
f(1,0,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,1,3,'thread_native_entry(Thread*)')
f(3,0,1,4,'Thread::call_run()')
f(4,0,1,4,'VMThread::run()')
f(5,0,1,4,'VMThread::inner_execute(VM_Operation*)')
f(6,0,1,4,'VMThread::evaluate_operation(VM_Operation*)')
f(7,0,1,4,'VM_Operation::evaluate()')
f(8,0,1,4,'VM_G1CollectForAllocation::doit()')
f(9,0,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint(double)')
f(10,0,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint_helper(double)')
f(11,0,1,4,'G1CollectedHeap::post_evacuate_collection_set(G1EvacuationInfo&, G1RedirtyCardsQueueSet*, G1ParScanThreadStateSet*)')
f(12,0,1,4,'G1CollectedHeap::post_evacuate_cleanup_2(PreservedMarksSet*, G1RedirtyCardsQueueSet*, G1EvacuationInfo*, unsigned long const*)')
f(13,0,1,4,'WorkGang::run_task(AbstractGangTask*, unsigned int, bool)')
f(14,0,1,3,'sem_post')
f(15,0,1,5,'entry_SYSCALL_64_after_hwframe')
f(16,0,1,5,'do_syscall_64')
f(17,0,1,5,'__x64_sys_futex')
f(18,0,1,5,'do_futex')
f(19,0,1,5,'futex_wake')
f(20,0,1,5,'wake_up_q')
f(21,0,1,5,'_raw_spin_unlock_irqrestore')
f(1,1,3,3,'[unknown_Java]')
f(2,1,1,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(2,2,2,6,'kyo/core$internal$KyoCont.effect',0,2,0)
f(1,4,290,1,'java/lang/Thread.run')
f(2,4,290,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,4,290,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,4,2,1,'java/util/concurrent/FutureTask.run')
f(5,4,2,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,4,2,1,'java/util/concurrent/FutureTask.run')
f(7,4,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,4,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,4,2,1,'java/lang/reflect/Method.invoke')
f(10,4,2,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,4,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,4,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,4,2,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,4,2,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,4,2,1,'kyo/bench/Bench.syncKyo')
f(16,4,2,1,'kyo/bench/Bench.runLoop$1')
f(17,4,2,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,4,2,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,4,2,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,4,2,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,4,2,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,4,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,4,2,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(24,4,2,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,4,2,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,4,2,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,4,2,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(28,4,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(29,4,2,1,'jdk/internal/misc/Unsafe.unpark')
f(30,4,2,3,'pthread_cond_signal')
f(31,4,2,5,'entry_SYSCALL_64_after_hwframe')
f(32,4,2,5,'do_syscall_64')
f(33,4,2,5,'__x64_sys_futex')
f(34,4,2,5,'do_futex')
f(35,4,2,5,'futex_wake')
f(36,4,2,5,'wake_up_q')
f(37,4,2,5,'_raw_spin_unlock_irqrestore')
f(4,6,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec30.run')
f(5,6,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,6,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,6,1,1,'java/lang/Thread.sleep')
f(8,6,1,3,'[unknown]')
f(9,6,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(4,7,287,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23480.run')
f(5,7,287,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,7,287,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,7,285,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,7,285,1,'kyo/concurrent/scheduler/IOTask.eval',44,0,0)
f(9,35,117,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,41,111,2,'kyo/concurrent/channels$Channels$Blocking$$anon$2.apply',101,0,0)
f(11,53,94,2,'kyo/concurrent/channels$$anon$16.apply',84,0,0)
f(12,64,83,2,'kyo/concurrent/channels$$anon$16.apply',73,0,0)
f(13,110,10,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(14,117,3,2,'kyo/concurrent/channels$Channels$$anon$14.q',3,0,0)
f(13,120,1,2,'kyo/concurrent/fibers$.Fibers',1,0,0)
f(13,121,15,2,'kyo/concurrent/fibers$Fibers.value',15,0,0)
f(14,121,15,2,'kyo/concurrent/fibers$Fiber$.done',15,0,0)
f(15,121,15,2,'kyo/concurrent/fibers$Fiber.<init>',15,0,0)
f(16,121,15,2,'java/lang/Object.<init>',15,0,0)
f(13,136,11,2,'kyo/concurrent/queues$$anon$12.poll',11,0,0)
f(14,138,9,2,'java/util/concurrent/atomic/AtomicReference.getAndSet',9,0,0)
f(15,140,7,2,'java/lang/invoke/VarHandleGuards.guard_LL_L',7,0,0)
f(16,143,4,2,'java/lang/invoke/VarForm.getMemberName',4,0,0)
f(17,146,1,2,'java/lang/invoke/VarForm.getMemberNameOrNull',1,0,0)
f(11,147,5,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2',5,0,0)
f(12,148,4,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$62.0x0000000800d54a70.apply',4,0,0)
f(9,152,99,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,167,18,2,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2',17,0,0)
f(11,171,13,2,'kyo/bench/EnqueueDequeueBench$$Lambda$61.0x0000000800d543d0.apply',12,0,0)
f(12,179,5,2,'kyo/bench/EnqueueDequeueBench.$anonfun$1',4,0,0)
f(13,179,1,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(14,179,1,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(15,179,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,179,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(17,179,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(18,179,1,4,'MemAllocator::allocate() const')
f(19,179,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(20,179,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(21,179,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(22,179,1,4,'G1AllocRegion::new_alloc_region_and_allocate(unsigned long, bool)')
f(23,179,1,4,'G1CollectedHeap::new_mutator_alloc_region(unsigned long, bool, unsigned int)')
f(24,179,1,4,'G1RemSetTrackingPolicy::update_at_allocate(HeapRegion*)')
f(25,179,1,4,'G1FromCardCache::clear(unsigned int)')
f(13,180,4,2,'kyo/concurrent/channels$Channels$$anon$14.take',4,0,0)
f(14,180,4,2,'kyo/concurrent/channels$Channels$Blocking.take$',4,0,0)
f(15,180,4,2,'kyo/concurrent/channels$Channels$Blocking.take',4,0,0)
f(16,180,4,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',4,0,0)
f(17,182,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',2,0,0)
f(18,182,2,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$62.0x0000000800d54a70.<init>',2,0,0)
f(11,184,1,2,'kyo/bench/EnqueueDequeueBench$$anon$2.<init>',1,0,0)
f(12,184,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(10,185,66,2,'kyo/concurrent/channels$Channels$Blocking$$anon$1.apply',58,0,0)
f(11,186,35,2,'kyo/concurrent/channels$$anon$19.apply',27,0,0)
f(12,186,35,2,'kyo/concurrent/channels$$anon$19.apply',27,0,0)
f(13,193,8,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(14,196,1,2,'kyo/concurrent/channels$Channels$$anon$14.q',1,0,0)
f(14,197,3,2,'kyo/concurrent/queues$$anon$12.isFull',3,0,0)
f(15,197,3,2,'java/util/concurrent/atomic/AtomicReference.get',3,0,0)
f(14,200,1,2,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.isEmpty',1,0,0)
f(15,200,1,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.isEmpty',1,0,0)
f(16,200,1,2,'org/jctools/queues/IndexedQueueSizeUtil.isEmpty',1,0,0)
f(17,200,1,2,'org/jctools/queues/MpUnboundedXaddArrayQueueProducerFields.lvProducerIndex',1,0,0)
f(13,201,1,2,'kyo/concurrent/channels$Channels$$anon$14.q',1,0,0)
f(13,202,1,2,'kyo/concurrent/fibers$Fibers.value',1,0,0)
f(13,203,18,2,'kyo/concurrent/queues$$anon$12.offer',18,0,0)
f(14,203,18,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',18,0,0)
f(15,203,18,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',18,0,0)
f(16,214,7,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',7,0,0)
f(17,220,1,2,'java/util/Objects.requireNonNull',1,0,0)
f(11,221,30,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1',30,0,0)
f(12,225,26,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$60.0x0000000800d54000.apply',26,0,0)
f(13,230,21,2,'kyo/concurrent/channels$Channels$Blocking.$anonfun$1',21,0,0)
f(14,230,21,2,'kyo/concurrent/fibers$Fiber.join',21,0,0)
f(9,251,1,1,'kyo/bench/EnqueueDequeueBench$$anon$3.apply')
f(10,251,1,1,'kyo/concurrent/channels$Channels$$anon$21.apply')
f(11,251,1,1,'kyo/concurrent/channels$Channels$.kyo$concurrent$channels$Channels$$$_$transformLoop$11')
f(12,251,1,1,'kyo/concurrent/channels$Channels$$$Lambda$57.0x0000000800d4c488.apply')
f(13,251,1,1,'kyo/concurrent/channels$Channels$.$anonfun$9')
f(14,251,1,1,'kyo/concurrent/channels$Channels$$anon$14.<init>')
f(15,251,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(16,251,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(17,251,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.<init>')
f(18,251,1,2,'org/jctools/queues/SpscArrayQueue.<init>',1,0,0)
f(19,251,1,2,'org/jctools/queues/SpscArrayQueueL3Pad.<init>',1,0,0)
f(20,251,1,2,'org/jctools/queues/SpscArrayQueueConsumerIndexField.<init>',1,0,0)
f(21,251,1,2,'org/jctools/queues/SpscArrayQueueL2Pad.<init>',1,0,0)
f(22,251,1,2,'org/jctools/queues/SpscArrayQueueProducerIndexFields.<init>',1,0,0)
f(23,251,1,2,'org/jctools/queues/SpscArrayQueueL1Pad.<init>',1,0,0)
f(24,251,1,2,'org/jctools/queues/SpscArrayQueueColdField.<init>',1,0,0)
f(25,251,1,2,'org/jctools/queues/ConcurrentCircularArrayQueue.<init>',1,0,0)
f(9,252,3,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',3,0,0)
f(9,255,3,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,255,3,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,255,3,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,255,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,255,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,255,3,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,255,3,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,255,3,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,255,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,255,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,255,3,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,255,3,1,'jdk/internal/misc/Unsafe.unpark')
f(21,255,3,3,'pthread_cond_signal')
f(22,256,2,5,'entry_SYSCALL_64_after_hwframe')
f(23,256,2,5,'do_syscall_64')
f(24,256,2,5,'__x64_sys_futex')
f(25,256,2,5,'do_futex')
f(26,256,2,5,'futex_wake')
f(27,256,2,5,'wake_up_q')
f(28,256,2,5,'_raw_spin_unlock_irqrestore')
f(9,258,1,2,'kyo/concurrent/scheduler/IOTask.st',1,0,0)
f(9,259,21,6,'kyo/core$internal$KyoCont.effect',0,21,0)
f(9,280,12,3,'vtable stub')
f(7,292,2,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,292,2,1,'kyo/concurrent/scheduler/Worker.park')
f(9,292,2,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,292,2,1,'jdk/internal/misc/Unsafe.park')
f(11,292,1,3,'Unsafe_Park')
f(12,292,1,3,'pthread_mutex_trylock')
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,'hrtimer_cancel')
f(19,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,20815,3,'all')
f(1,0,20812,1,'java/lang/Thread.run')
f(2,0,20812,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,20812,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,268,1,'java/util/concurrent/FutureTask.run')
f(5,0,267,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,267,1,'java/util/concurrent/FutureTask.run')
f(7,0,267,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,267,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,267,1,'java/lang/reflect/Method.invoke')
f(10,0,267,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,267,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,267,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,267,1,'kyo/bench/jmh_generated/ForkManyBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,267,1,'kyo/bench/jmh_generated/ForkManyBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,266,1,'kyo/bench/Bench.forkKyo')
f(16,0,10,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,10,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,10,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,10,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3f718')
f(16,10,255,1,'kyo/bench/Bench.runLoop$2')
f(17,10,131,1,'kyo/bench/Bench$$anon$1.apply')
f(18,10,131,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,10,131,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,10,131,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(21,10,131,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,10,1,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,11,130,2,'kyo.concurrent.scheduler.IOTask')
f(17,141,124,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,141,124,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,141,124,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,141,124,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,141,124,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,141,124,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,141,124,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,141,124,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(16,265,1,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,265,1,1,'kyo/locals$Locals$.save')
f(18,265,1,2,'kyo.locals$Locals$$anon$3')
f(15,266,1,1,'org/openjdk/jmh/infra/Blackhole.consume')
f(16,266,1,2,'byte[]')
f(5,267,1,1,'java/util/concurrent/FutureTask.set')
f(6,267,1,1,'java/util/concurrent/FutureTask.finishCompletion')
f(7,267,1,1,'java/util/concurrent/ExecutorCompletionService$QueueingFuture.done')
f(8,267,1,1,'java/util/AbstractQueue.add')
f(9,267,1,1,'java/util/concurrent/LinkedBlockingQueue.offer')
f(10,267,1,1,'java/util/concurrent/LinkedBlockingQueue.signalNotEmpty')
f(11,267,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject.signal')
f(12,267,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject.doSignal')
f(13,267,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.enqueue')
f(14,267,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(15,267,1,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(4,268,10,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f2b8.run')
f(5,268,10,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,268,10,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,268,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,268,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,268,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,268,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,268,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,278,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f4e0.run')
f(5,278,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,278,1,1,'kyo/concurrent/scheduler/Scheduler$.addWorker')
f(7,278,1,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers')
f(8,278,1,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(9,278,1,1,'java/util/concurrent/ThreadPoolExecutor.addWorker')
f(10,278,1,1,'java/util/concurrent/ThreadPoolExecutor$Worker.<init>')
f(11,278,1,1,'kyo/concurrent/scheduler/Threads$$anon$1.newThread')
f(12,278,1,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$51.0x0000000800d23ff0.apply')
f(13,278,1,1,'kyo/concurrent/scheduler/Scheduler$.$init$$$anonfun$1')
f(14,278,1,1,'kyo/concurrent/scheduler/Worker.<init>')
f(15,278,1,1,'java/lang/Thread.<init>')
f(16,278,1,1,'java/lang/Thread.<init>')
f(17,278,1,1,'java/lang/Thread.<init>')
f(18,278,1,1,'java/security/AccessController.getContext')
f(19,278,1,1,'java/security/AccessControlContext.optimize')
f(20,278,1,1,'java/security/AccessControlContext.combine')
f(21,278,1,2,'java.security.ProtectionDomain[]')
f(6,279,10,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,279,10,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,279,10,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,279,10,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,279,10,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$71+0x0000000800d4fd88')
f(4,289,20523,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fda8.run')
f(5,289,20523,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,289,20523,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,289,11,1,'java/util/concurrent/CopyOnWriteArrayList.add')
f(8,289,11,1,'java/util/Arrays.copyOf')
f(9,289,11,1,'java/util/Arrays.copyOf')
f(10,289,11,2,'java.lang.Object[]')
f(7,300,19067,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,300,19067,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,300,18933,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,300,15523,1,'kyo/bench/ForkManyBench$$anon$1.apply')
f(11,300,6132,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(12,300,6132,1,'kyo/bench/ForkManyBench$$Lambda$61.0x0000000800d4b0c0.apply')
f(13,300,6132,1,'kyo/bench/ForkManyBench.$anonfun$2')
f(14,300,6132,1,'kyo/bench/ForkManyBench.repeat$2')
f(15,300,2741,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4cc00.linkToTargetMethod')
f(16,300,2741,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c400.newInvokeSpecial')
f(17,300,2741,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,300,2741,2,'kyo.bench.ForkManyBench$$Lambda$61+0x0000000800d4b0c0')
f(15,3041,3391,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(16,3041,3391,2,'kyo.bench.ForkManyBench$$anon$1')
f(11,6432,9391,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,6432,9391,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,6432,9391,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(14,6432,9391,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,6432,1262,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,7694,6648,2,'kyo.concurrent.scheduler.IOTask')
f(15,14342,1470,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,14342,1470,2,'kyo.concurrent.fibers$Fiber')
f(15,15812,11,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(16,15812,11,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(17,15812,11,1,'kyo/concurrent/scheduler/Queue.offer')
f(18,15812,11,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(19,15812,11,1,'scala/Function0.apply$mcZ$sp')
f(20,15812,11,1,'kyo/concurrent/scheduler/Queue$$Lambda$54.0x0000000800d474b0.apply')
f(21,15812,11,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1')
f(22,15812,11,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,15812,11,1,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize')
f(24,15812,11,1,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize')
f(25,15812,11,1,'scala/collection/mutable/ArrayBuffer$.scala$collection$mutable$ArrayBuffer$$ensureSize')
f(26,15812,2,2,'java.lang.Object[]')
f(26,15814,9,5,'java.lang.Object[]')
f(10,15823,3409,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5')
f(11,15823,3408,2,'kyo.bench.ForkManyBench$$anon$6')
f(11,19231,1,1,'kyo/bench/ForkManyBench$$Lambda$62.0x0000000800d4b490.apply')
f(12,19231,1,1,'kyo/bench/ForkManyBench.$anonfun$8')
f(13,19231,1,1,'kyo/concurrent/fibers$Fiber.join')
f(14,19231,1,1,'kyo/concurrent/fibers$Fibers.get')
f(15,19231,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(16,19231,1,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(10,19232,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,19232,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,19232,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(13,19232,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,19232,1,1,'kyo/concurrent/fibers$Fiber$.promise')
f(15,19232,1,2,'kyo.concurrent.fibers$Fiber')
f(9,19233,3,1,'kyo/bench/ForkManyBench$$anon$7.apply')
f(10,19233,1,1,'kyo/bench/ForkManyBench$$anon$4.apply')
f(11,19233,1,1,'kyo/concurrent/atomics$Atomics$$anon$1.apply')
f(12,19233,1,1,'kyo/concurrent/atomics$Atomics$$anon$1.apply')
f(13,19233,1,2,'kyo.concurrent.atomics$AtomicInt')
f(10,19234,2,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$6')
f(11,19234,2,1,'kyo/bench/ForkManyBench$$Lambda$58.0x0000000800d4a450.apply')
f(12,19234,2,1,'kyo/bench/ForkManyBench.$anonfun$6')
f(13,19234,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(14,19234,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(15,19234,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,19234,1,2,'kyo.bench.ForkManyBench$$Lambda$62+0x0000000800d4b490')
f(13,19235,1,1,'kyo/bench/ForkManyBench.repeat$2')
f(14,19235,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(15,19235,1,2,'kyo.bench.ForkManyBench$$anon$1')
f(9,19236,2,1,'kyo/bench/ForkManyBench$$anon$8.apply')
f(10,19236,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$7')
f(11,19236,1,1,'kyo/bench/ForkManyBench$$Lambda$56.0x0000000800d44400.apply')
f(12,19236,1,1,'kyo/bench/ForkManyBench.$anonfun$3')
f(13,19236,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$6')
f(14,19236,1,2,'kyo.bench.ForkManyBench$$anon$7')
f(10,19237,1,1,'kyo/concurrent/fibers$Fibers$$anon$31.apply')
f(11,19237,1,1,'kyo/concurrent/fibers$Fibers$$anon$31.apply')
f(12,19237,1,2,'kyo.concurrent.fibers$Fiber$Promise')
f(9,19238,1,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(10,19238,1,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(11,19238,1,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$Promise$$anon$26$$_$loop$22')
f(12,19238,1,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(13,19238,1,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(14,19238,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(15,19238,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(16,19238,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(17,19238,1,1,'scala/runtime/function/JProcedure1.apply')
f(18,19238,1,1,'scala/runtime/function/JProcedure1.apply')
f(19,19238,1,1,'kyo/concurrent/scheduler/IOTask$$Lambda$66.0x0000000800d4ebd8.applyVoid')
f(20,19238,1,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(21,19238,1,1,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1')
f(22,19238,1,2,'kyo.concurrent.scheduler.IOTask$$anon$4')
f(9,19239,128,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,19239,128,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,19239,128,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3f718.apply')
f(12,19239,128,1,'kyo/bench/Bench.$anonfun$1')
f(13,19239,128,1,'kyo/bench/ForkManyBench.kyoBenchFiber')
f(14,19239,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$7')
f(15,19239,1,2,'kyo.bench.ForkManyBench$$anon$8')
f(14,19240,127,1,'kyo/concurrent/fibers$Fibers.promise')
f(15,19240,127,2,'kyo.concurrent.fibers$Fibers$$anon$31')
f(7,19367,1445,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,19367,1445,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,19367,1445,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,19367,1445,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,19367,1445,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d45230')
f(1,20812,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,20812,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,20812,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,20812,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,20812,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,20812,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,20812,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,20812,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,20812,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,20812,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,20812,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,20812,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,20812,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,271,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,1,4,'Compile::Code_Gen()')
f(10,0,1,4,'Matcher::match()')
f(11,0,1,4,'Matcher::xform(Node*, int)')
f(12,0,1,4,'Matcher::match_tree(Node const*)')
f(13,0,1,4,'Matcher::ReduceInst(State*, int, Node*&)')
f(9,1,2,4,'Compile::Optimize()')
f(10,1,1,4,'PhaseIdealLoop::optimize(PhaseIterGVN&, LoopOptsMode)')
f(11,1,1,4,'PhaseIdealLoop::build_and_optimize(LoopOptsMode)')
f(12,1,1,4,'PhaseIdealLoop::build_loop_early(VectorSet&, Node_List&, Node_Stack&)')
f(13,1,1,4,'PhaseIdealLoop::get_early_ctrl(Node*)')
f(10,2,1,4,'PhaseIterGVN::optimize()')
f(11,2,1,4,'PhaseIterGVN::transform_old(Node*)')
f(12,2,1,4,'RegionNode::Ideal(PhaseGVN*, bool)')
f(13,2,1,4,'Node::is_dead_loop_safe() const')
f(1,3,2,3,'[unknown_Java]')
f(2,3,1,1,'kyo/bench/ForkManyBench$$anon$3.apply')
f(2,4,1,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(1,5,266,1,'java/lang/Thread.run')
f(2,5,266,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,5,266,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,5,1,1,'java/util/concurrent/FutureTask.run')
f(5,5,1,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,5,1,1,'java/util/concurrent/FutureTask.run')
f(7,5,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,5,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,5,1,1,'java/lang/reflect/Method.invoke')
f(10,5,1,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,5,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,5,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,5,1,1,'kyo/bench/jmh_generated/ForkManyBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,5,1,1,'kyo/bench/jmh_generated/ForkManyBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,5,1,1,'kyo/bench/Bench.forkKyo')
f(16,5,1,1,'kyo/bench/Bench.runLoop$2')
f(17,5,1,1,'kyo/bench/Bench$$anon$1.apply')
f(18,5,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,5,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,5,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(21,5,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,5,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,5,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,5,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,5,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,5,1,1,'jdk/internal/misc/Unsafe.unpark')
f(27,5,1,3,'pthread_cond_signal')
f(28,5,1,5,'entry_SYSCALL_64_after_hwframe')
f(29,5,1,5,'do_syscall_64')
f(30,5,1,5,'__x64_sys_futex')
f(31,5,1,5,'do_futex')
f(32,5,1,5,'futex_wake')
f(33,5,1,5,'wake_up_q')
f(34,5,1,5,'_raw_spin_unlock_irqrestore')
f(4,6,265,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fda8.run')
f(5,6,265,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,6,265,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,11,9,2,'kyo/concurrent/scheduler/IOTask.reenqueue',9,0,0)
f(8,11,9,2,'kyo/concurrent/scheduler/IOTask.curr',9,0,0)
f(7,20,216,1,'kyo/concurrent/scheduler/IOTask.run',27,0,0)
f(8,22,5,2,'kyo/concurrent/scheduler/Coordinator$.tick',5,0,0)
f(8,27,209,1,'kyo/concurrent/scheduler/IOTask.eval',20,0,0)
f(9,41,5,1,'kyo/bench/ForkManyBench$$anon$3.apply')
f(10,44,2,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$2',2,0,0)
f(11,44,2,2,'kyo/bench/ForkManyBench$$Lambda$59.0x0000000800d4ac60.apply',2,0,0)
f(12,44,2,2,'kyo/bench/ForkManyBench.$anonfun$adapted$2',2,0,0)
f(13,44,2,2,'kyo/bench/ForkManyBench.$anonfun$5',2,0,0)
f(14,44,2,2,'scala/runtime/BoxesRunTime.boxToBoolean',2,0,0)
f(9,46,169,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,46,163,1,'kyo/bench/ForkManyBench$$anon$1.apply',35,0,0)
f(11,46,163,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',35,0,0)
f(12,52,157,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',29,0,0)
f(13,55,150,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply',22,0,0)
f(14,55,150,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',22,0,0)
f(15,57,5,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',5,0,0)
f(16,57,5,2,'kyo/ios$KyoIO.<init>',5,0,0)
f(17,57,5,2,'kyo/core$internal$Kyo.<init>',5,0,0)
f(18,57,5,2,'java/lang/Object.<init>',5,0,0)
f(15,62,12,2,'kyo/concurrent/scheduler/IOTask.<init>',12,0,0)
f(16,73,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(15,74,131,1,'kyo/concurrent/scheduler/Scheduler$.schedule',3,0,0)
f(16,74,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(17,74,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(18,74,1,1,'kyo/concurrent/scheduler/Queue.offer')
f(19,74,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(16,75,1,2,'kyo/concurrent/scheduler/Worker$.apply',1,0,0)
f(16,76,129,1,'kyo/concurrent/scheduler/Worker.enqueueLocal',2,0,0)
f(17,76,129,1,'kyo/concurrent/scheduler/Queue.offer',2,0,0)
f(18,76,129,1,'kyo/concurrent/scheduler/Queue.tryModify',2,0,0)
f(19,76,129,1,'scala/Function0.apply$mcZ$sp',2,0,0)
f(20,76,129,1,'kyo/concurrent/scheduler/Queue$$Lambda$54.0x0000000800d474b0.apply',2,0,0)
f(21,77,128,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1',1,0,0)
f(22,77,1,2,'kyo/concurrent/scheduler/Queue.items_$eq',1,0,0)
f(22,78,127,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,83,29,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize',29,0,0)
f(24,83,29,2,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize',29,0,0)
f(25,83,29,2,'scala/collection/mutable/ArrayBuffer.array_$eq',29,0,0)
f(23,112,93,2,'scala/collection/mutable/PriorityQueue.fixUp',93,0,0)
f(24,128,17,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',17,0,0)
f(25,140,5,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',5,0,0)
f(24,145,59,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_swap',59,0,0)
f(25,198,6,2,'scala/collection/mutable/ArrayBuffer.array',6,0,0)
f(24,204,1,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',1,0,0)
f(13,205,4,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',4,0,0)
f(14,205,4,2,'kyo/core$internal$KyoCont.<init>',4,0,0)
f(15,207,2,2,'kyo/ios$KyoIO.effect',2,0,0)
f(16,207,2,2,'kyo/ios$KyoIO.effect',2,0,0)
f(10,209,6,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5')
f(11,209,6,1,'kyo/bench/ForkManyBench$$anon$6.<init>')
f(12,209,6,1,'kyo/core$internal$KyoCont.<init>')
f(13,209,4,6,'kyo/core$internal$KyoCont.effect',0,4,0)
f(13,213,2,6,'kyo/core$internal$KyoCont.value',0,2,0)
f(9,215,2,1,'kyo/concurrent/scheduler/IOTask.finalize$1')
f(9,217,13,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,217,13,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',13,0,0)
f(11,217,13,2,'kyo/concurrent/scheduler/IOPromise.complete',13,0,0)
f(12,217,10,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',10,0,0)
f(13,217,10,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',10,0,0)
f(14,217,10,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',10,0,0)
f(12,227,2,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',2,0,0)
f(13,227,2,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',2,0,0)
f(12,229,1,2,'kyo/concurrent/scheduler/IOTask.onComplete',1,0,0)
f(13,229,1,2,'kyo/concurrent/scheduler/IOTask.preempt',1,0,0)
f(9,230,6,3,'vtable stub')
f(7,236,34,1,'kyo/concurrent/scheduler/Queue.poll',4,0,0)
f(8,236,4,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',4,0,0)
f(9,236,4,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',4,0,0)
f(8,240,30,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,240,4,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',4,0,0)
f(10,240,4,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',4,0,0)
f(11,242,2,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',2,0,0)
f(9,244,26,2,'kyo/concurrent/scheduler/Queue$$Lambda$63.0x0000000800d4ba90.apply',26,0,0)
f(10,247,23,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',23,0,0)
f(11,256,8,2,'kyo/concurrent/scheduler/Queue.isEmpty',8,0,0)
f(11,264,6,2,'scala/collection/mutable/PriorityQueue.dequeue',6,0,0)
f(12,269,1,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',1,0,0)
f(7,270,1,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,270,1,1,'kyo/concurrent/scheduler/Worker.park')
f(9,270,1,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,270,1,1,'jdk/internal/misc/Unsafe.park')
f(11,270,1,3,'[unknown]')
f(12,270,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 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,21745,3,'all')
f(1,0,1,2,'java.lang.String')
f(1,1,21741,1,'java/lang/Thread.run')
f(2,1,21741,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,1,21741,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,1,400,1,'java/util/concurrent/FutureTask.run')
f(5,1,400,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,1,400,1,'java/util/concurrent/FutureTask.run')
f(7,1,400,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,1,400,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,1,400,1,'java/lang/reflect/Method.invoke')
f(10,1,400,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,1,400,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,1,400,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,1,400,1,'kyo/bench/jmh_generated/ForkManyBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,1,398,1,'kyo/bench/jmh_generated/ForkManyBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,1,398,1,'kyo/bench/Bench.syncKyo')
f(16,1,188,1,'kyo/bench/Bench.runLoop$1')
f(17,1,114,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,1,114,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,1,114,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,1,114,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,1,73,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,1,73,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,1,41,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,42,32,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,42,32,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,74,40,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,114,1,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,114,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,114,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,115,74,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,115,74,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,115,74,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,115,74,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,115,42,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,115,42,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,115,42,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(24,115,42,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,115,42,2,'kyo.concurrent.scheduler.IOTask')
f(21,157,32,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,157,32,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c83b00.apply')
f(23,157,32,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,157,32,1,'kyo/concurrent/fibers$Fiber.join')
f(25,157,32,1,'kyo/concurrent/fibers$Fibers.get')
f(26,157,32,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,157,32,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(16,189,210,1,'kyo/bench/ForkManyBench.kyoBench')
f(17,189,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,189,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,189,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,189,11,2,'kyo.bench.ForkManyBench$$Lambda$37+0x0000000800c3f718')
f(17,200,89,1,'kyo/concurrent/fibers$Fibers.block')
f(18,200,12,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,200,12,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,212,37,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,212,37,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,249,40,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,249,40,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,289,110,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,289,40,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,289,40,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,289,40,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,289,40,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c83b00')
f(18,329,38,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,329,37,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,329,37,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,329,37,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,329,37,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c85068')
f(19,366,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,366,1,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(18,367,32,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,367,32,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(14,399,1,1,'org/openjdk/jmh/results/BenchmarkTaskResult.<init>')
f(15,399,1,2,'java.util.ArrayList')
f(14,400,1,1,'org/openjdk/jmh/results/ThroughputResult.<init>')
f(15,400,1,1,'org/openjdk/jmh/results/Result.of')
f(16,400,1,2,'org.openjdk.jmh.util.SingletonStatistics')
f(4,401,10,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f4b8.run')
f(5,401,10,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,401,10,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,401,10,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,401,10,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,401,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,401,10,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,401,10,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,411,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1f6e0.run')
f(5,411,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,411,1,1,'kyo/concurrent/scheduler/Scheduler$.addWorker')
f(7,411,1,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers')
f(8,411,1,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(9,411,1,1,'java/util/concurrent/ThreadPoolExecutor.addWorker')
f(10,411,1,1,'java/util/concurrent/ThreadPoolExecutor$Worker.<init>')
f(11,411,1,1,'kyo/concurrent/scheduler/Threads$$anon$1.newThread')
f(12,411,1,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23ff0.apply')
f(13,411,1,1,'kyo/concurrent/scheduler/Scheduler$.$init$$$anonfun$1')
f(14,411,1,1,'kyo/concurrent/scheduler/Worker.<init>')
f(15,411,1,1,'java/lang/Thread.<init>')
f(16,411,1,1,'java/lang/Thread.<init>')
f(17,411,1,1,'java/lang/Thread.<init>')
f(18,411,1,1,'java/security/AccessController.getContext')
f(19,411,1,1,'java/security/AccessControlContext.optimize')
f(20,411,1,1,'java/security/AccessControlContext.combine')
f(21,411,1,2,'java.security.ProtectionDomain[]')
f(6,412,10,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,412,10,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,412,10,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,412,10,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,412,10,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$72+0x0000000800d4fd88')
f(4,422,21320,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d243c0.run')
f(5,422,21320,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,422,21320,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,422,10,1,'java/util/concurrent/CopyOnWriteArrayList.add')
f(8,422,10,1,'java/util/Arrays.copyOf')
f(9,422,10,1,'java/util/Arrays.copyOf')
f(10,422,10,2,'java.lang.Object[]')
f(7,432,19103,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,432,19103,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,432,1,1,'kyo/bench/ForkManyBench$$anon$3.apply')
f(10,432,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$2')
f(11,432,1,1,'kyo/bench/ForkManyBench$$Lambda$60.0x0000000800d4aa30.apply')
f(12,432,1,1,'kyo/bench/ForkManyBench.$anonfun$adapted$2')
f(13,432,1,1,'kyo/bench/ForkManyBench.$anonfun$5')
f(14,432,1,1,'kyo/concurrent/fibers$Fiber$Promise.complete')
f(15,432,1,2,'kyo.concurrent.fibers$Fiber$Promise$$anon$26')
f(9,433,19091,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,433,15520,1,'kyo/bench/ForkManyBench$$anon$1.apply')
f(11,433,6452,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(12,433,6452,1,'kyo/bench/ForkManyBench$$Lambda$62.0x0000000800d4b0c0.apply')
f(13,433,6452,1,'kyo/bench/ForkManyBench.$anonfun$2')
f(14,433,6452,1,'kyo/bench/ForkManyBench.repeat$2')
f(15,433,2810,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4cc00.linkToTargetMethod')
f(16,433,2810,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c400.newInvokeSpecial')
f(17,433,2810,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,433,2810,2,'kyo.bench.ForkManyBench$$Lambda$62+0x0000000800d4b0c0')
f(15,3243,3642,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(16,3243,3642,2,'kyo.bench.ForkManyBench$$anon$1')
f(11,6885,9068,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,6885,9068,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,6885,9068,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(14,6885,9068,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,6885,1229,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,8114,6272,2,'kyo.concurrent.scheduler.IOTask')
f(15,14386,1562,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,14386,1562,2,'kyo.concurrent.fibers$Fiber')
f(15,15948,5,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(16,15948,5,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(17,15948,5,1,'kyo/concurrent/scheduler/Queue.offer')
f(18,15948,5,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(19,15948,5,1,'scala/Function0.apply$mcZ$sp')
f(20,15948,5,1,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d476b8.apply')
f(21,15948,5,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1')
f(22,15948,5,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,15948,5,1,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize')
f(24,15948,5,1,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize')
f(25,15948,5,1,'scala/collection/mutable/ArrayBuffer$.scala$collection$mutable$ArrayBuffer$$ensureSize')
f(26,15948,5,5,'java.lang.Object[]')
f(10,15953,3571,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5')
f(11,15953,3568,2,'kyo.bench.ForkManyBench$$anon$6')
f(11,19521,3,1,'kyo/bench/ForkManyBench$$Lambda$63.0x0000000800d4b490.apply')
f(12,19521,3,1,'kyo/bench/ForkManyBench.$anonfun$8')
f(13,19521,3,1,'kyo/concurrent/fibers$Fiber.join')
f(14,19521,3,1,'kyo/concurrent/fibers$Fibers.get')
f(15,19521,3,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(16,19521,3,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(9,19524,4,1,'kyo/bench/ForkManyBench$$anon$7.apply')
f(10,19524,4,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$6')
f(11,19524,4,1,'kyo/bench/ForkManyBench$$Lambda$59.0x0000000800d4a450.apply')
f(12,19524,4,1,'kyo/bench/ForkManyBench.$anonfun$6')
f(13,19524,2,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5')
f(14,19524,2,2,'kyo.bench.ForkManyBench$$anon$6')
f(13,19526,2,1,'kyo/bench/ForkManyBench.repeat$2')
f(14,19526,2,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4cc00.linkToTargetMethod')
f(15,19526,2,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c400.newInvokeSpecial')
f(16,19526,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,19526,2,2,'kyo.bench.ForkManyBench$$Lambda$62+0x0000000800d4b0c0')
f(9,19528,3,1,'kyo/bench/ForkManyBench$$anon$8.apply')
f(10,19528,3,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$7')
f(11,19528,3,1,'kyo/bench/ForkManyBench$$Lambda$57.0x0000000800d44400.apply')
f(12,19528,3,1,'kyo/bench/ForkManyBench.$anonfun$3')
f(13,19528,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(14,19528,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(15,19528,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,19528,1,2,'kyo.bench.ForkManyBench$$Lambda$59+0x0000000800d4a450')
f(13,19529,2,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$6')
f(14,19529,2,2,'kyo.bench.ForkManyBench$$anon$7')
f(9,19531,2,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,19531,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,19531,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,19531,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,19531,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$66+0x0000000800d4e7d0')
f(10,19532,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,19532,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(9,19533,2,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,19533,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,19533,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,19533,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,19533,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(14,19533,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$67+0x0000000800d4ebd8')
f(10,19534,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,19534,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,19535,2202,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,19535,2202,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,19535,2202,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,19535,2202,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,19535,9,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(12,19535,9,2,'kyo.concurrent.scheduler.Queue$$Lambda$56+0x0000000800d45230')
f(11,19544,2193,2,'kyo.concurrent.scheduler.Queue$$Lambda$56+0x0000000800d45230')
f(7,21737,5,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,21737,5,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,21737,5,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,21737,1,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(11,21737,1,1,'scala/Function0.apply$mcZ$sp')
f(12,21737,1,1,'kyo/concurrent/scheduler/Queue$$Lambda$70.0x0000000800d4d800.apply')
f(13,21737,1,1,'kyo/concurrent/scheduler/Queue.steal$$anonfun$1')
f(14,21737,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(15,21737,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(16,21737,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,21737,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(18,21737,1,2,'kyo.concurrent.scheduler.Queue$$Lambda$71+0x0000000800d4dac0')
f(10,21738,4,1,'scala/runtime/ObjectRef.create')
f(11,21738,4,2,'scala.runtime.ObjectRef')
f(1,21742,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,21742,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,21742,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,21742,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,21742,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,21742,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,21742,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,21742,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,21742,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,21742,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,21742,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,21742,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,21742,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 496px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(31);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,271,3,'all')
f(1,0,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,1,3,'thread_native_entry(Thread*)')
f(3,0,1,4,'Thread::call_run()')
f(4,0,1,4,'JavaThread::thread_main_inner()')
f(5,0,1,4,'CompileBroker::compiler_thread_loop()')
f(6,0,1,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,1,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,1,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,1,4,'Compile::Code_Gen()')
f(10,0,1,4,'Matcher::match()')
f(11,0,1,4,'ParmNode::Opcode() const')
f(1,1,3,3,'[unknown_Java]')
f(2,1,1,1,'kyo/bench/ForkManyBench$$anon$1.apply')
f(2,2,1,1,'kyo/bench/ForkManyBench$$anon$3.apply')
f(2,3,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(1,4,267,1,'java/lang/Thread.run')
f(2,4,267,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,4,267,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,4,1,1,'java/util/concurrent/FutureTask.run')
f(5,4,1,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,4,1,1,'java/util/concurrent/FutureTask.run')
f(7,4,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,4,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,4,1,1,'java/lang/reflect/Method.invoke')
f(10,4,1,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,4,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,4,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,4,1,1,'kyo/bench/jmh_generated/ForkManyBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,4,1,1,'kyo/bench/jmh_generated/ForkManyBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,4,1,1,'kyo/bench/Bench.syncKyo')
f(16,4,1,1,'kyo/bench/Bench.runLoop$1')
f(17,4,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,4,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,4,1,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,4,1,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,4,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,4,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,4,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(4,5,266,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d243c0.run')
f(5,5,266,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,5,266,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,5,216,1,'kyo/concurrent/scheduler/IOTask.run',8,0,0)
f(8,5,216,1,'kyo/concurrent/scheduler/IOTask.eval',8,0,0)
f(9,11,3,1,'kyo/bench/ForkManyBench$$anon$3.apply')
f(10,13,1,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$2',1,0,0)
f(11,13,1,2,'kyo/bench/ForkManyBench$$Lambda$60.0x0000000800d4ac60.apply',1,0,0)
f(12,13,1,2,'kyo/bench/ForkManyBench.$anonfun$adapted$2',1,0,0)
f(13,13,1,2,'kyo/bench/ForkManyBench.$anonfun$5',1,0,0)
f(14,13,1,2,'scala/runtime/BoxesRunTime.boxToBoolean',1,0,0)
f(9,14,194,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,20,178,1,'kyo/bench/ForkManyBench$$anon$1.apply')
f(11,20,178,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',37,0,0)
f(12,25,173,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',32,0,0)
f(13,26,163,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply',22,0,0)
f(14,26,163,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',22,0,0)
f(15,26,2,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',2,0,0)
f(16,26,2,2,'kyo/ios$KyoIO.<init>',2,0,0)
f(17,26,2,2,'kyo/core$internal$Kyo.<init>',2,0,0)
f(15,28,13,2,'kyo/concurrent/scheduler/IOTask.<init>',13,0,0)
f(16,31,10,2,'kyo/concurrent/scheduler/IOPromise.<init>',10,0,0)
f(15,41,148,1,'kyo/concurrent/scheduler/Scheduler$.schedule',7,0,0)
f(16,42,3,2,'kyo/concurrent/scheduler/Scheduler$.submit',3,0,0)
f(17,42,3,2,'kyo/concurrent/scheduler/Worker.enqueue',3,0,0)
f(18,42,3,2,'kyo/concurrent/scheduler/Queue.offer',3,0,0)
f(19,43,2,2,'kyo/concurrent/scheduler/Queue.tryModify',2,0,0)
f(20,43,2,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',2,0,0)
f(21,44,1,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',1,0,0)
f(22,44,1,2,'java/lang/invoke/VarForm.getMemberName',1,0,0)
f(23,44,1,2,'java/lang/invoke/VarForm.getMemberNameOrNull',1,0,0)
f(16,45,144,1,'kyo/concurrent/scheduler/Worker.enqueueLocal',3,0,0)
f(17,47,142,1,'kyo/concurrent/scheduler/Queue.offer',1,0,0)
f(18,47,142,1,'kyo/concurrent/scheduler/Queue.tryModify',1,0,0)
f(19,47,142,1,'scala/Function0.apply$mcZ$sp',1,0,0)
f(20,47,142,1,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d476b8.apply',1,0,0)
f(21,47,142,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1',1,0,0)
f(22,48,141,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,49,46,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize',46,0,0)
f(24,49,46,2,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize',46,0,0)
f(25,49,45,2,'scala/collection/mutable/ArrayBuffer.array_$eq',45,0,0)
f(26,93,1,5,'asm_sysvec_hyperv_stimer0')
f(27,93,1,5,'sysvec_hyperv_stimer0')
f(28,93,1,5,'irq_exit_rcu')
f(29,93,1,5,'__irq_exit_rcu')
f(30,93,1,5,'__softirqentry_text_start')
f(25,94,1,2,'scala/collection/mutable/ArrayBuffer.size0',1,0,0)
f(23,95,94,2,'scala/collection/mutable/PriorityQueue.fixUp',94,0,0)
f(24,107,17,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',17,0,0)
f(25,122,2,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',2,0,0)
f(24,124,65,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_swap',65,0,0)
f(25,175,14,2,'scala/collection/mutable/ArrayBuffer.array',14,0,0)
f(13,189,9,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',9,0,0)
f(14,197,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(15,197,1,2,'kyo/core$internal$Kyo.<init>',1,0,0)
f(10,198,10,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5',4,0,0)
f(11,198,10,2,'kyo/bench/ForkManyBench$$anon$6.<init>',4,0,0)
f(12,198,10,2,'kyo/core$internal$KyoCont.<init>',4,0,0)
f(13,202,5,6,'kyo/core$internal$KyoCont.effect',0,5,0)
f(13,207,1,6,'kyo/core$internal$KyoCont.value',0,1,0)
f(9,208,2,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(9,210,1,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',1,0,0)
f(9,211,3,6,'kyo/core$internal$KyoCont.effect',0,3,0)
f(9,214,1,1,'kyo/ios$KyoIO.effect')
f(9,215,6,3,'vtable stub')
f(7,221,49,2,'kyo/concurrent/scheduler/Queue.poll',34,0,0)
f(8,221,5,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',3,0,0)
f(9,221,5,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',3,0,0)
f(10,224,2,1,'kyo/concurrent/scheduler/Queue$$Lambda$56.0x0000000800d45230.<init>')
f(8,226,1,1,'kyo/concurrent/scheduler/Queue.isEmpty')
f(8,227,43,2,'kyo/concurrent/scheduler/Queue.modify',31,0,0)
f(9,233,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(9,234,36,2,'kyo/concurrent/scheduler/Queue$$Lambda$56.0x0000000800d45230.apply',28,0,0)
f(10,248,22,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',17,0,0)
f(11,252,3,2,'kyo/concurrent/scheduler/Queue.isEmpty',3,0,0)
f(11,255,15,2,'scala/collection/mutable/PriorityQueue.dequeue',10,0,0)
f(12,267,2,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',2,0,0)
f(12,269,1,2,'scala/collection/mutable/PriorityQueue.fixDown',1,0,0)
f(13,269,1,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',1,0,0)
f(7,270,1,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,270,1,1,'kyo/concurrent/scheduler/Worker.park')
f(9,270,1,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,270,1,1,'jdk/internal/misc/Unsafe.park')
f(11,270,1,3,'[unknown]')
f(12,270,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,270,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,270,1,5,'do_syscall_64')
f(15,270,1,5,'__x64_sys_futex')
f(16,270,1,5,'do_futex')
f(17,270,1,5,'futex_wait')
f(18,270,1,5,'futex_wait_queue_me')
f(19,270,1,5,'schedule')
f(20,270,1,5,'__schedule')
f(21,270,1,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: 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,3641,3,'all')
f(1,0,3637,1,'java/lang/Thread.run')
f(2,0,3637,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,3637,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,763,1,'java/util/concurrent/FutureTask.run')
f(5,0,763,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,763,1,'java/util/concurrent/FutureTask.run')
f(7,0,763,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,763,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,763,1,'java/lang/reflect/Method.invoke')
f(10,0,763,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,763,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,763,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,763,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,763,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,763,1,'kyo/bench/Bench.forkKyo')
f(16,0,80,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,80,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,80,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,80,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3e9f8')
f(16,80,13,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,80,13,2,'kyo.bench.Bench$$anon$1')
f(16,93,490,1,'kyo/bench/Bench.runLoop$2')
f(17,93,274,1,'kyo/bench/Bench$$anon$1.apply')
f(18,93,18,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,93,18,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c82da8.apply')
f(20,93,18,1,'kyo/bench/Bench.$anonfun$2')
f(21,93,18,1,'kyo/concurrent/fibers$Fiber.block')
f(22,93,18,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,111,256,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,111,256,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,111,256,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(21,111,256,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,111,34,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,145,132,2,'kyo.concurrent.scheduler.IOTask')
f(22,277,90,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,277,90,2,'kyo.concurrent.fibers$Fiber')
f(17,367,216,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,367,216,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,367,216,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,367,216,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,367,102,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,367,102,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,367,32,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,399,70,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,399,70,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,469,34,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,503,80,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,503,80,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,503,80,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,583,180,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,583,42,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,583,42,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,583,42,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,583,42,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(17,625,86,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,625,86,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,711,52,1,'kyo/locals$Locals$.save')
f(18,711,52,2,'kyo.locals$Locals$$anon$3')
f(4,763,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,763,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,763,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,763,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,763,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,763,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,763,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,763,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,774,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e5f8.run')
f(5,774,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,774,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,774,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,774,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,774,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,774,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$68+0x0000000800d4b9f8')
f(4,785,2852,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,785,2852,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,785,2852,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,785,2722,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,785,2722,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,785,1347,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,785,344,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,785,67,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(12,785,67,1,'kyo/bench/InterruptBench$$Lambda$57.0x0000000800d45460.apply')
f(13,785,67,1,'kyo/bench/InterruptBench.$anonfun$2')
f(14,785,67,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(15,785,67,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(16,785,67,2,'kyo.concurrent.fibers$Fiber$$anon$11')
f(11,852,277,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,852,277,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,852,277,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(14,852,277,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,852,67,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,919,144,2,'kyo.concurrent.scheduler.IOTask')
f(15,1063,66,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,1063,66,2,'kyo.concurrent.fibers$Fiber')
f(10,1129,361,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(11,1129,361,2,'kyo.bench.InterruptBench$$anon$3')
f(10,1490,180,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,1490,122,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(12,1490,122,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$61.0x0000000800d494c0.apply')
f(13,1490,122,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$_$$anonfun$adapted$1')
f(14,1490,122,1,'kyo/concurrent/fibers$.$anonfun$3')
f(15,1490,48,2,'kyo.concurrent.fibers$Fiber')
f(15,1538,74,1,'kyo/concurrent/fibers$Fiber.join')
f(16,1538,74,1,'kyo/concurrent/fibers$Fibers.get')
f(17,1538,74,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(18,1538,74,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(11,1612,58,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(12,1612,58,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(13,1612,58,1,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10')
f(14,1612,58,2,'kyo.concurrent.fibers$Fiber$$anon$13$$anon$14')
f(10,1670,462,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,1670,462,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(12,1670,119,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(13,1670,119,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(14,1670,119,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(15,1670,61,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$60+0x0000000800d48fb0')
f(15,1731,58,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$61+0x0000000800d494c0')
f(12,1789,103,2,'kyo.concurrent.scheduler.IOPromise')
f(12,1892,137,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(13,1892,137,2,'kyo.concurrent.fibers$$anon$12')
f(12,2029,103,1,'kyo/concurrent/fibers$Fiber.interrupt')
f(13,2029,103,2,'kyo.concurrent.fibers$Fiber$$anon$13')
f(9,2132,1040,1,'kyo/concurrent/scheduler/IOTask.finalize$1')
f(10,2132,1040,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$60.0x0000000800d48fb0.apply$mcV$sp')
f(11,2132,1040,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1')
f(12,2132,1040,1,'kyo/concurrent/fibers$.loop$9')
f(13,2132,1040,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(14,2132,1040,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(15,2132,1040,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,2132,1040,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,2132,1040,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,2132,1040,1,'scala/runtime/function/JProcedure1.apply')
f(19,2132,1040,1,'scala/runtime/function/JProcedure1.apply')
f(20,2132,1040,1,'kyo/concurrent/scheduler/IOTask$$Lambda$66.0x0000000800d4b220.applyVoid')
f(21,2132,1040,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(22,2132,162,2,'kyo.concurrent.scheduler.IOTask')
f(22,2294,157,1,'kyo/concurrent/scheduler/IOPromise.become')
f(23,2294,157,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(24,2294,53,1,'kyo/concurrent/scheduler/IOPromise$Linked$.apply')
f(25,2294,53,2,'kyo.concurrent.scheduler.IOPromise$Linked')
f(24,2347,104,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(25,2347,104,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(26,2347,104,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(27,2347,104,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(22,2451,721,1,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1')
f(23,2451,721,1,'kyo/concurrent/scheduler/IOTask$$Lambda$67.0x0000000800d4b628.apply')
f(24,2451,721,1,'kyo/concurrent/scheduler/IOTask.$anonfun$1')
f(25,2451,721,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(26,2451,721,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(27,2451,721,1,'kyo/bench/InterruptBench$$Lambda$58.0x0000000800d44400.apply')
f(28,2451,721,1,'kyo/bench/InterruptBench.$anonfun$adapted$1')
f(29,2451,721,1,'kyo/bench/InterruptBench.$anonfun$3')
f(30,2451,721,1,'kyo/bench/InterruptBench.iterate$2')
f(31,2451,146,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(32,2451,58,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(33,2451,58,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,2451,58,2,'kyo.bench.InterruptBench$$Lambda$56+0x0000000800d47a98')
f(32,2509,88,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(33,2509,88,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,2509,88,2,'kyo.bench.InterruptBench$$Lambda$58+0x0000000800d44400')
f(31,2597,142,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(32,2597,142,2,'kyo.bench.InterruptBench$$anon$2')
f(31,2739,128,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(32,2739,128,2,'kyo.bench.InterruptBench$$anon$3')
f(31,2867,305,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(32,2867,71,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(33,2867,71,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(34,2867,71,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(35,2867,71,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(32,2938,142,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(33,2938,142,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(32,3080,92,1,'kyo/locals$Locals$.save')
f(33,3080,92,2,'kyo.locals$Locals$$anon$3')
f(9,3172,154,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,3172,63,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,3172,63,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,3172,63,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,3172,63,2,'kyo.concurrent.scheduler.IOTask$$Lambda$62+0x0000000800d4a2a8')
f(10,3235,91,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,3235,91,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(9,3326,181,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,3326,97,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,3326,97,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,3326,97,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,3326,97,2,'kyo.concurrent.scheduler.IOTask$$Lambda$66+0x0000000800d4b220')
f(10,3423,84,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,3423,84,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,3507,130,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,3507,130,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,3507,130,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,3507,130,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,3507,130,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d47148')
f(1,3637,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,3637,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,3637,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,3637,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,3637,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,3637,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,3637,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,3637,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,3637,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,3637,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,3637,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,3637,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,3637,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,3640,1,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,3640,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,3640,1,1,'java/lang/ClassLoader.loadClass')
f(10,3640,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,3640,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,3640,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,3640,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,3640,1,1,'jdk/internal/loader/URLClassPath.getResource')
f(15,3640,1,1,'jdk/internal/loader/URLClassPath$JarLoader.getResource')
f(16,3640,1,1,'java/util/jar/JarFile.getJarEntry')
f(17,3640,1,1,'java/util/jar/JarFile.getEntry')
f(18,3640,1,1,'java/util/zip/ZipFile.getEntry')
f(19,3640,1,1,'java/util/zip/ZipFile$Source.getEntryPos')
f(20,3640,1,1,'java/util/zip/ZipCoder$UTF8ZipCoder.toString')
f(21,3640,1,1,'java/lang/System$2.newStringUTF8NoRepl')
f(22,3640,1,1,'java/lang/String.newStringUTF8NoRepl')
f(23,3640,1,1,'java/util/Arrays.copyOfRange')
f(24,3640,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,279,3,'all')
f(1,0,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,2,3,'thread_native_entry(Thread*)')
f(3,0,2,4,'Thread::call_run()')
f(4,0,2,4,'JavaThread::thread_main_inner()')
f(5,0,2,4,'CompileBroker::compiler_thread_loop()')
f(6,0,2,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,2,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,2,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,2,4,'Compile::Code_Gen()')
f(10,0,2,4,'PhaseChaitin::Register_Allocate()')
f(11,0,1,4,'PhaseChaitin::build_ifg_physical(ResourceArea*)')
f(12,0,1,4,'PhaseChaitin::remove_bound_register_from_interfering_live_ranges(LRG&, IndexSet*, unsigned int&) [clone .part.0]')
f(11,1,1,4,'PhaseChaitin::stretch_base_pointer_live_ranges(ResourceArea*)')
f(12,1,1,4,'IndexSet::IndexSet(IndexSet*)')
f(1,2,2,3,'[unknown_Java]')
f(2,2,1,1,'kyo/concurrent/scheduler/IOTask.eval')
f(2,3,1,1,'kyo/ios$KyoIO.effect')
f(1,4,275,1,'java/lang/Thread.run')
f(2,4,275,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,4,275,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,4,6,1,'java/util/concurrent/FutureTask.run')
f(5,4,6,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,4,6,1,'java/util/concurrent/FutureTask.run')
f(7,4,6,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,4,6,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,4,6,1,'java/lang/reflect/Method.invoke')
f(10,4,6,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,4,6,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,4,6,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,4,6,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,4,6,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,4,6,1,'kyo/bench/Bench.forkKyo')
f(16,4,6,1,'kyo/bench/Bench.runLoop$2')
f(17,4,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.0x0000000800c84200.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,5,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,5,5,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,5,5,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,5,5,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,5,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,5,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,5,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(24,5,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(25,5,1,4,'MemAllocator::allocate() const')
f(26,5,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(27,5,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(28,5,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(23,6,4,1,'java/util/concurrent/locks/LockSupport.park')
f(24,6,4,1,'jdk/internal/misc/Unsafe.park')
f(25,6,4,3,'[unknown]')
f(26,6,4,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,6,4,5,'entry_SYSCALL_64_after_hwframe')
f(28,6,4,5,'do_syscall_64')
f(29,6,3,5,'__x64_sys_futex')
f(30,6,3,5,'do_futex')
f(31,6,3,5,'futex_wait')
f(32,6,3,5,'futex_wait_queue_me')
f(33,6,3,5,'schedule')
f(34,6,3,5,'__schedule')
f(35,6,3,5,'finish_task_switch.isra.0')
f(29,9,1,5,'syscall_exit_to_user_mode')
f(30,9,1,5,'exit_to_user_mode_prepare')
f(31,9,1,5,'mem_cgroup_handle_over_high')
f(4,10,269,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,10,269,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,10,269,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,15,6,2,'kyo/concurrent/scheduler/IOTask.reenqueue',6,0,0)
f(8,15,6,2,'kyo/concurrent/scheduler/IOTask.curr',6,0,0)
f(7,21,227,1,'kyo/concurrent/scheduler/IOTask.run',12,0,0)
f(8,21,1,1,'jdk/internal/misc/Unsafe.park')
f(9,21,1,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,21,1,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',1,0,0)
f(11,21,1,2,'scala/runtime/BoxesRunTime.unboxToBoolean',1,0,0)
f(8,22,8,2,'kyo/concurrent/scheduler/Coordinator$.tick',8,0,0)
f(8,30,4,2,'kyo/concurrent/scheduler/IOTask.curr',4,0,0)
f(8,34,214,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,45,103,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,51,37,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,57,1,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1',1,0,0)
f(12,57,1,2,'kyo/bench/InterruptBench$$Lambda$57.0x0000000800d45690.apply',1,0,0)
f(13,57,1,2,'kyo/bench/InterruptBench.$anonfun$2',1,0,0)
f(14,57,1,2,'kyo/concurrent/fibers$Fiber.interruptAwait',1,0,0)
f(15,57,1,2,'kyo/concurrent/fibers$Fiber.interruptAwait',1,0,0)
f(11,58,30,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',2,0,0)
f(12,59,28,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,60,27,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(14,63,24,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',24,0,0)
f(15,72,5,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',5,0,0)
f(15,77,10,2,'kyo/concurrent/scheduler/IOTask.<init>',10,0,0)
f(16,86,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(17,86,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(12,87,1,2,'kyo/locals$Locals$$anon$3.apply',1,0,0)
f(10,88,22,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',14,0,0)
f(11,96,14,2,'kyo/bench/InterruptBench$$anon$3.<init>',6,0,0)
f(12,96,14,2,'kyo/core$internal$KyoCont.<init>',6,0,0)
f(13,100,2,6,'kyo/core$internal$KyoCont.effect',0,2,0)
f(13,102,2,6,'kyo/core$internal$KyoCont.value',0,2,0)
f(13,104,3,6,'kyo/core$internal$KyoRoot.value',0,3,0)
f(13,107,1,1,'kyo/ios$KyoIO.effect')
f(13,108,2,3,'vtable stub')
f(10,110,13,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,114,1,2,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1',1,0,0)
f(12,114,1,2,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$61.0x0000000800d494c0.apply',1,0,0)
f(13,114,1,2,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$_$$anonfun$adapted$1',1,0,0)
f(14,114,1,2,'kyo/concurrent/fibers$.$anonfun$3',1,0,0)
f(15,114,1,2,'kyo/concurrent/fibers$Fiber.join',1,0,0)
f(16,114,1,2,'kyo/concurrent/fibers$Fibers.get',1,0,0)
f(17,114,1,2,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1',1,0,0)
f(11,115,8,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',8,0,0)
f(12,115,8,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',8,0,0)
f(13,115,8,2,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10',8,0,0)
f(14,115,8,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',8,0,0)
f(15,115,8,2,'kyo/concurrent/scheduler/IOPromise.complete',8,0,0)
f(16,115,6,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',6,0,0)
f(17,115,6,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',6,0,0)
f(18,115,6,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',6,0,0)
f(16,121,2,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',2,0,0)
f(17,121,2,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',2,0,0)
f(10,123,20,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,123,20,2,'kyo/concurrent/fibers$Fiber$$anon$11.apply',19,0,0)
f(12,128,3,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',3,0,0)
f(13,128,3,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',3,0,0)
f(14,128,3,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',3,0,0)
f(12,131,2,2,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1',2,0,0)
f(12,133,2,2,'kyo/concurrent/fibers$Fiber.interrupt',2,0,0)
f(12,135,5,2,'kyo/concurrent/scheduler/IOPromise.<init>',5,0,0)
f(13,135,5,2,'kyo/concurrent/scheduler/IOPromise.<init>',5,0,0)
f(14,135,5,2,'java/util/concurrent/atomic/AtomicReference.<init>',5,0,0)
f(12,140,3,2,'kyo/concurrent/scheduler/IOTask.ensure',2,0,0)
f(13,140,1,2,'kyo/concurrent/scheduler/IOTask.curr',1,0,0)
f(13,141,1,2,'kyo/concurrent/scheduler/IOTask.ensures_$eq',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,5,3,'vtable stub')
f(9,148,1,2,'kyo/concurrent/scheduler/Coordinator$.tick',1,0,0)
f(9,149,76,1,'kyo/concurrent/scheduler/IOTask.finalize$1',11,0,0)
f(10,149,73,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$60.0x0000000800d48fb0.apply$mcV$sp',8,0,0)
f(11,149,73,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1',8,0,0)
f(12,149,73,1,'kyo/concurrent/fibers$.loop$9',8,0,0)
f(13,149,65,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(14,149,65,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(15,149,65,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,149,65,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,149,65,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,149,65,1,'scala/runtime/function/JProcedure1.apply')
f(19,149,1,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(20,149,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(19,150,64,1,'scala/runtime/function/JProcedure1.apply')
f(20,151,63,1,'kyo/concurrent/scheduler/IOTask$$Lambda$66.0x0000000800d4b220.applyVoid')
f(21,152,62,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(22,154,57,2,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1',22,0,0)
f(23,155,56,2,'kyo/concurrent/scheduler/IOTask$$Lambda$67.0x0000000800d4b628.apply',21,0,0)
f(24,155,56,2,'kyo/concurrent/scheduler/IOTask.$anonfun$1',21,0,0)
f(25,157,54,2,'kyo/bench/InterruptBench$$anon$3.apply',19,0,0)
f(26,163,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(27,163,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(26,164,46,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',12,0,0)
f(27,169,34,1,'kyo/bench/InterruptBench$$Lambda$58.0x0000000800d44400.apply')
f(28,169,34,1,'kyo/bench/InterruptBench.$anonfun$adapted$1')
f(29,169,34,1,'kyo/bench/InterruptBench.$anonfun$3')
f(30,169,34,1,'kyo/bench/InterruptBench.iterate$2')
f(31,169,3,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',3,0,0)
f(32,169,3,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',3,0,0)
f(33,169,3,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',3,0,0)
f(31,172,8,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1',8,0,0)
f(32,179,1,2,'kyo/bench/InterruptBench$$anon$2.<init>',1,0,0)
f(31,180,12,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',7,0,0)
f(32,183,9,2,'kyo/bench/InterruptBench$$anon$3.<init>',4,0,0)
f(33,184,8,2,'kyo/core$internal$KyoCont.<init>',3,0,0)
f(34,187,5,6,'kyo/core$internal$KyoCont.value',0,5,0)
f(31,192,11,2,'kyo/concurrent/fibers$Fibers.forkFiber',4,0,0)
f(32,192,4,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',4,0,0)
f(33,192,4,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',4,0,0)
f(34,192,4,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',4,0,0)
f(32,196,7,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(33,201,2,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',2,0,0)
f(27,203,7,2,'kyo/bench/InterruptBench$$anon$3.<init>',7,0,0)
f(28,204,6,2,'kyo/core$internal$KyoCont.<init>',6,0,0)
f(26,210,1,1,'kyo/core$internal$KyoRoot.apply')
f(22,211,3,2,'kyo/concurrent/scheduler/Scheduler$.schedule',3,0,0)
f(23,211,3,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',3,0,0)
f(24,211,3,2,'kyo/concurrent/scheduler/Queue.offer',3,0,0)
f(25,211,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(26,211,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(25,212,2,2,'kyo/concurrent/scheduler/Queue.tryModify',2,0,0)
f(26,212,2,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',2,0,0)
f(13,214,8,2,'scala/runtime/BoxesRunTime.boxToBoolean',8,0,0)
f(10,222,1,2,'kyo/concurrent/scheduler/IOTask.ensures',1,0,0)
f(10,223,2,2,'kyo/concurrent/scheduler/IOTask.ensures_$eq',2,0,0)
f(9,225,1,2,'kyo/concurrent/scheduler/IOTask.loop$2',1,0,0)
f(10,225,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(11,225,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(12,225,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(9,226,5,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,226,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(11,226,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',2,0,0)
f(12,226,2,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',2,0,0)
f(10,228,2,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',2,0,0)
f(11,228,2,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',2,0,0)
f(12,228,2,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',2,0,0)
f(13,228,2,2,'java/util/Objects.requireNonNull',2,0,0)
f(10,230,1,2,'kyo/concurrent/scheduler/Scheduler$.schedule',1,0,0)
f(11,230,1,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',1,0,0)
f(12,230,1,2,'kyo/concurrent/scheduler/Queue.offer',1,0,0)
f(13,230,1,2,'kyo/concurrent/scheduler/Queue.tryModify',1,0,0)
f(14,230,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(15,230,1,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',1,0,0)
f(16,230,1,2,'java/lang/invoke/VarForm.getMemberName',1,0,0)
f(17,230,1,2,'java/lang/invoke/VarForm.getMemberNameOrNull',1,0,0)
f(9,231,14,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,231,14,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',11,0,0)
f(11,231,14,2,'kyo/concurrent/scheduler/IOPromise.complete',11,0,0)
f(12,231,14,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',11,0,0)
f(13,231,14,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',11,0,0)
f(14,237,8,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run',5,0,0)
f(15,237,5,3,'itable stub')
f(15,242,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,242,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,242,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,242,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,242,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,242,2,1,'jdk/internal/misc/Unsafe.unpark')
f(21,242,2,3,'pthread_cond_signal')
f(22,242,2,5,'entry_SYSCALL_64_after_hwframe')
f(23,242,2,5,'do_syscall_64')
f(24,242,2,5,'__x64_sys_futex')
f(25,242,2,5,'do_futex')
f(26,242,2,5,'futex_wake')
f(27,242,2,5,'wake_up_q')
f(28,242,2,5,'_raw_spin_unlock_irqrestore')
f(15,244,1,1,'scala/runtime/function/JProcedure1.apply')
f(9,245,3,6,'kyo/core$internal$KyoCont.effect',0,3,0)
f(7,248,27,1,'kyo/concurrent/scheduler/Queue.poll',1,0,0)
f(8,249,26,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,250,10,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',10,0,0)
f(10,255,5,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',5,0,0)
f(11,259,1,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(12,259,1,2,'java/util/Objects.requireNonNull',1,0,0)
f(9,260,15,2,'kyo/concurrent/scheduler/Queue$$Lambda$59.0x0000000800d48af0.apply',15,0,0)
f(10,260,15,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',15,0,0)
f(11,262,13,2,'scala/collection/mutable/PriorityQueue.dequeue',13,0,0)
f(12,270,4,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',4,0,0)
f(12,274,1,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',1,0,0)
f(7,275,3,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,275,3,1,'kyo/concurrent/scheduler/Worker.park')
f(9,275,3,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,275,3,1,'jdk/internal/misc/Unsafe.park')
f(11,275,3,3,'[unknown]')
f(12,275,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,275,2,5,'entry_SYSCALL_64_after_hwframe')
f(14,275,2,5,'do_syscall_64')
f(15,275,2,5,'__x64_sys_futex')
f(16,275,2,5,'do_futex')
f(17,275,2,5,'futex_wait')
f(18,275,2,5,'futex_wait_queue_me')
f(19,275,1,5,'hrtimer_sleeper_start_expires')
f(20,275,1,5,'_raw_spin_unlock_irqrestore')
f(19,276,1,5,'schedule')
f(20,276,1,5,'__schedule')
f(21,276,1,5,'finish_task_switch.isra.0')
f(12,277,1,3,'pthread_mutex_trylock')
f(7,278,1,2,'kyo/concurrent/scheduler/Worker.stop$1',1,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 576px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(36);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,6530,3,'all')
f(1,0,6527,1,'java/lang/Thread.run')
f(2,0,6527,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,6527,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,1311,1,'java/util/concurrent/FutureTask.run')
f(5,0,1311,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,1311,1,'java/util/concurrent/FutureTask.run')
f(7,0,1311,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,1311,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1311,1,'java/lang/reflect/Method.invoke')
f(10,0,1311,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,1311,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,1311,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,1311,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,1311,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,1311,1,'kyo/bench/Bench.syncKyo')
f(16,0,631,1,'kyo/bench/Bench.runLoop$1')
f(17,0,296,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,296,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,296,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,296,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,170,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,170,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,78,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,78,92,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,78,92,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,170,96,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,266,30,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,266,30,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,266,30,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,296,335,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,296,257,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,296,257,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,296,257,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,296,213,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,296,213,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,296,213,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(24,296,213,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,296,1,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(25,297,185,2,'kyo.concurrent.scheduler.IOTask')
f(25,482,27,1,'kyo/concurrent/fibers$Fiber$.promise')
f(26,482,27,2,'kyo.concurrent.fibers$Fiber')
f(21,509,44,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,509,44,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c82da8.apply')
f(23,509,44,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,509,44,1,'kyo/concurrent/fibers$Fiber.join')
f(25,509,44,1,'kyo/concurrent/fibers$Fibers.get')
f(26,509,44,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,509,44,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,553,78,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,553,78,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c835a8.apply')
f(20,553,78,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,553,78,1,'kyo/concurrent/fibers$Fiber.block')
f(22,553,78,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,631,680,1,'kyo/bench/InterruptBench.kyoBench')
f(17,631,61,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,631,61,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,631,61,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,631,61,2,'kyo.bench.InterruptBench$$Lambda$37+0x0000000800c3e9f8')
f(17,692,319,1,'kyo/concurrent/fibers$Fibers.block')
f(18,692,16,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,692,16,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,692,16,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,692,16,2,'kyo.concurrent.fibers$Fibers$$Lambda$40+0x0000000800c835a8')
f(18,708,25,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,708,25,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,733,204,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,733,204,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,937,74,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,937,74,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,1011,300,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,1011,65,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,1011,65,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,1011,65,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,1011,65,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c82da8')
f(18,1076,190,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,1076,28,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,1076,28,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,1076,28,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,1076,28,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(19,1104,148,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,1104,148,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(19,1252,14,1,'kyo/locals$Locals$.save')
f(20,1252,14,2,'kyo.locals$Locals$$anon$3')
f(18,1266,45,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,1266,45,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(4,1311,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec28.run')
f(5,1311,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,1311,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,1311,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,1311,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,1311,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,1311,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,1311,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,1322,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1ee50.run')
f(5,1322,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,1322,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,1322,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,1322,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,1322,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,1322,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$70+0x0000000800d4e7d8')
f(4,1333,5194,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23cb0.run')
f(5,1333,5194,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,1333,5194,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,1333,4952,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,1333,4952,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,1333,2414,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,1333,688,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,1333,185,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(12,1333,185,1,'kyo/bench/InterruptBench$$Lambda$58.0x0000000800d44a30.apply')
f(13,1333,185,1,'kyo/bench/InterruptBench.$anonfun$2')
f(14,1333,185,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(15,1333,185,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(16,1333,185,2,'kyo.concurrent.fibers$Fiber$$anon$11')
f(11,1518,503,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,1518,503,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,1518,503,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(14,1518,503,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,1518,140,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,1658,303,2,'kyo.concurrent.scheduler.IOTask')
f(15,1961,60,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,1961,60,2,'kyo.concurrent.fibers$Fiber')
f(10,2021,623,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(11,2021,623,2,'kyo.bench.InterruptBench$$anon$3')
f(10,2644,353,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,2644,273,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(12,2644,273,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$62.0x0000000800d49f40.apply')
f(13,2644,273,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$_$$anonfun$adapted$1')
f(14,2644,273,1,'kyo/concurrent/fibers$.$anonfun$3')
f(15,2644,104,2,'kyo.concurrent.fibers$Fiber')
f(15,2748,169,1,'kyo/concurrent/fibers$Fiber.join')
f(16,2748,169,1,'kyo/concurrent/fibers$Fibers.get')
f(17,2748,169,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(18,2748,169,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(11,2917,80,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(12,2917,80,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(13,2917,80,1,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10')
f(14,2917,80,2,'kyo.concurrent.fibers$Fiber$$anon$13$$anon$14')
f(10,2997,750,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,2997,750,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(12,2997,241,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(13,2997,241,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(14,2997,241,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(15,2997,134,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$61+0x0000000800d49a30')
f(15,3131,107,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$62+0x0000000800d49f40')
f(12,3238,173,2,'kyo.concurrent.scheduler.IOPromise')
f(12,3411,210,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(13,3411,210,2,'kyo.concurrent.fibers$$anon$12')
f(12,3621,126,1,'kyo/concurrent/fibers$Fiber.interrupt')
f(13,3621,126,2,'kyo.concurrent.fibers$Fiber$$anon$13')
f(9,3747,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,3747,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,3747,1,1,'kyo/bench/InterruptBench$$Lambda$37.0x0000000800c3e9f8.apply')
f(12,3747,1,1,'kyo/bench/InterruptBench.kyoBench$$anonfun$1')
f(13,3747,1,1,'kyo/bench/InterruptBench.kyoBenchFiber')
f(14,3747,1,1,'kyo/bench/InterruptBench.iterate$2')
f(15,3747,1,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(16,3747,1,2,'kyo.bench.InterruptBench$$anon$3')
f(9,3748,1965,1,'kyo/concurrent/scheduler/IOTask.finalize$1')
f(10,3748,1965,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$61.0x0000000800d49a30.apply$mcV$sp')
f(11,3748,1965,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1')
f(12,3748,1965,1,'kyo/concurrent/fibers$.loop$9')
f(13,3748,1965,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(14,3748,1965,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(15,3748,1965,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,3748,1965,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,3748,1965,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,3748,1965,1,'scala/runtime/function/JProcedure1.apply')
f(19,3748,1965,1,'scala/runtime/function/JProcedure1.apply')
f(20,3748,1965,1,'kyo/concurrent/scheduler/IOTask$$Lambda$68.0x0000000800d4e000.applyVoid')
f(21,3748,1965,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(22,3748,167,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(23,3748,167,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(24,3748,167,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(25,3748,167,2,'kyo.concurrent.scheduler.IOTask$$Lambda$69+0x0000000800d4e408')
f(22,3915,343,2,'kyo.concurrent.scheduler.IOTask')
f(22,4258,241,1,'kyo/concurrent/scheduler/IOPromise.become')
f(23,4258,241,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(24,4258,84,1,'kyo/concurrent/scheduler/IOPromise$Linked$.apply')
f(25,4258,84,2,'kyo.concurrent.scheduler.IOPromise$Linked')
f(24,4342,157,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(25,4342,157,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(26,4342,157,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(27,4342,157,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(22,4499,1214,1,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1')
f(23,4499,1214,1,'kyo/concurrent/scheduler/IOTask$$Lambda$69.0x0000000800d4e408.apply')
f(24,4499,1214,1,'kyo/concurrent/scheduler/IOTask.$anonfun$1')
f(25,4499,1214,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(26,4499,1214,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(27,4499,1214,1,'kyo/bench/InterruptBench$$Lambda$59.0x0000000800d48d10.apply')
f(28,4499,1214,1,'kyo/bench/InterruptBench.$anonfun$adapted$1')
f(29,4499,1214,1,'kyo/bench/InterruptBench.$anonfun$3')
f(30,4499,1214,1,'kyo/bench/InterruptBench.iterate$2')
f(31,4499,270,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(32,4499,121,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(33,4499,121,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,4499,121,2,'kyo.bench.InterruptBench$$Lambda$57+0x0000000800d45690')
f(32,4620,149,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(33,4620,149,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,4620,149,2,'kyo.bench.InterruptBench$$Lambda$59+0x0000000800d48d10')
f(31,4769,259,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(32,4769,259,2,'kyo.bench.InterruptBench$$anon$2')
f(31,5028,252,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(32,5028,252,2,'kyo.bench.InterruptBench$$anon$3')
f(31,5280,433,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(32,5280,130,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(33,5280,130,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(34,5280,130,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(35,5280,130,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(32,5410,224,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(33,5410,224,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(32,5634,79,1,'kyo/locals$Locals$.save')
f(33,5634,79,2,'kyo.locals$Locals$$anon$3')
f(9,5713,240,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,5713,105,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,5713,105,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,5713,105,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,5713,105,2,'kyo.concurrent.scheduler.IOTask$$Lambda$63+0x0000000800d4ad28')
f(10,5818,135,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,5818,135,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(9,5953,332,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,5953,151,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,5953,151,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,5953,151,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,5953,151,2,'kyo.concurrent.scheduler.IOTask$$Lambda$68+0x0000000800d4e000')
f(10,6104,181,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,6104,181,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,6285,242,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,6285,242,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,6285,242,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,6285,242,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,6285,242,2,'kyo.concurrent.scheduler.Queue$$Lambda$56+0x0000000800d47ca0')
f(1,6527,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,6527,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,6527,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,6527,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,6527,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,6527,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,6527,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,6527,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,6527,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,6527,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,6527,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,6527,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,6527,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,287,3,'all')
f(1,0,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,2,3,'thread_native_entry(Thread*)')
f(3,0,2,4,'Thread::call_run()')
f(4,0,2,4,'JavaThread::thread_main_inner()')
f(5,0,2,4,'CompileBroker::compiler_thread_loop()')
f(6,0,2,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,2,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,2,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,1,4,'Compile::Code_Gen()')
f(10,0,1,4,'PhaseCFG::do_global_code_motion()')
f(11,0,1,4,'PhaseCFG::build_dominator_tree()')
f(9,1,1,4,'Compile::Optimize()')
f(10,1,1,4,'PhaseMacroExpand::expand_macro_nodes()')
f(11,1,1,4,'OuterStripMinedLoopNode::adjust_strip_mined_loop(PhaseIterGVN*)')
f(12,1,1,4,'Node::clone() const')
f(1,2,2,3,'[unknown_Java]')
f(2,2,1,1,'kyo/concurrent/scheduler/IOTask$$Lambda$68.0x0000000800d4e580.applyVoid')
f(2,3,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(1,4,283,1,'java/lang/Thread.run')
f(2,4,283,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,4,283,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,4,6,1,'java/util/concurrent/FutureTask.run')
f(5,4,6,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,4,6,1,'java/util/concurrent/FutureTask.run')
f(7,4,6,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,4,6,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,4,6,1,'java/lang/reflect/Method.invoke')
f(10,4,6,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,4,6,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,4,6,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,4,6,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,4,6,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,4,6,1,'kyo/bench/Bench.syncKyo')
f(16,4,6,1,'kyo/bench/Bench.runLoop$1')
f(17,4,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,4,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,4,1,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,4,1,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,4,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,4,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,4,1,1,'java/util/concurrent/locks/LockSupport.park')
f(24,4,1,1,'jdk/internal/misc/Unsafe.park')
f(25,4,1,3,'[unknown]')
f(26,4,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,4,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,4,1,5,'do_syscall_64')
f(29,4,1,5,'__x64_sys_futex')
f(30,4,1,5,'do_futex')
f(31,4,1,5,'futex_wait')
f(17,5,5,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,5,5,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,5,5,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,5,5,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,5,5,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,5,5,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,5,5,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(24,5,5,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,5,5,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,5,5,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,5,3,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(28,5,3,1,'java/util/concurrent/locks/LockSupport.unpark')
f(29,5,3,1,'jdk/internal/misc/Unsafe.unpark')
f(30,5,3,3,'pthread_cond_signal')
f(31,5,3,5,'entry_SYSCALL_64_after_hwframe')
f(32,5,3,5,'do_syscall_64')
f(33,5,3,5,'__x64_sys_futex')
f(34,5,3,5,'do_futex')
f(35,5,3,5,'futex_wake')
f(36,5,3,5,'wake_up_q')
f(37,5,3,5,'_raw_spin_unlock_irqrestore')
f(27,8,2,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.poll')
f(28,8,2,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.switchToNextConsumerChunkAndPoll')
f(29,8,2,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.moveToNextConsumerChunk')
f(30,8,1,1,'org/jctools/queues/MpUnboundedXaddChunk.soNext')
f(31,8,1,2,'sun/misc/Unsafe.putOrderedObject',1,0,0)
f(30,9,1,1,'org/jctools/queues/SpscArrayQueue.offer')
f(31,9,1,6,'org/jctools/queues/SpscArrayQueue.offerSlowPath',0,1,0)
f(4,10,277,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23cb0.run')
f(5,10,277,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,10,277,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,10,234,1,'kyo/concurrent/scheduler/IOTask.run',24,0,0)
f(8,10,234,1,'kyo/concurrent/scheduler/IOTask.eval',24,0,0)
f(9,14,78,1,'kyo/bench/InterruptBench$$anon$3.apply',6,0,0)
f(10,16,20,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,17,2,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1',2,0,0)
f(12,18,1,2,'kyo/bench/InterruptBench$$Lambda$58.0x0000000800d48230.apply',1,0,0)
f(13,18,1,2,'kyo/bench/InterruptBench.$anonfun$2',1,0,0)
f(14,18,1,2,'kyo/concurrent/fibers$Fiber.interruptAwait',1,0,0)
f(15,18,1,2,'kyo/concurrent/fibers$Fiber.interruptAwait',1,0,0)
f(11,19,17,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,19,17,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,23,9,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply',9,0,0)
f(14,23,9,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',9,0,0)
f(15,26,2,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',2,0,0)
f(16,26,2,2,'kyo/ios$KyoIO.<init>',2,0,0)
f(15,28,3,2,'kyo/concurrent/scheduler/IOTask.<init>',3,0,0)
f(16,28,3,2,'kyo/concurrent/scheduler/IOPromise.<init>',3,0,0)
f(17,28,3,2,'kyo/concurrent/scheduler/IOPromise.<init>',3,0,0)
f(18,28,3,2,'java/util/concurrent/atomic/AtomicReference.<init>',3,0,0)
f(15,31,1,2,'kyo/concurrent/scheduler/Scheduler$.schedule',1,0,0)
f(13,32,4,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',4,0,0)
f(10,36,15,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',5,0,0)
f(11,37,2,2,'kyo/bench/InterruptBench$$Lambda$59.0x0000000800d490d8.apply',1,0,0)
f(12,37,2,2,'kyo/bench/InterruptBench.$anonfun$adapted$1',1,0,0)
f(13,38,1,1,'scala/runtime/BoxesRunTime.unboxToBoolean')
f(11,39,12,1,'kyo/bench/InterruptBench$$anon$3.<init>',3,0,0)
f(12,39,12,1,'kyo/core$internal$KyoCont.<init>',3,0,0)
f(13,41,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(13,42,1,6,'kyo/core$internal$KyoCont.value',0,1,0)
f(13,43,2,6,'kyo/core$internal$KyoRoot.effect',0,2,0)
f(13,45,3,6,'kyo/core$internal$KyoRoot.value',0,3,0)
f(13,48,3,3,'vtable stub')
f(10,51,20,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,58,1,2,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1',1,0,0)
f(12,58,1,2,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$62.0x0000000800d4a2d8.apply',1,0,0)
f(13,58,1,2,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$_$$anonfun$adapted$1',1,0,0)
f(14,58,1,2,'kyo/concurrent/fibers$.$anonfun$3',1,0,0)
f(15,58,1,2,'kyo/concurrent/fibers$Fiber.join',1,0,0)
f(16,58,1,2,'kyo/concurrent/fibers$Fibers.get',1,0,0)
f(17,58,1,2,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1',1,0,0)
f(11,59,12,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',12,0,0)
f(12,59,12,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',12,0,0)
f(13,60,11,2,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10',11,0,0)
f(14,60,11,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',11,0,0)
f(15,60,11,2,'kyo/concurrent/scheduler/IOPromise.complete',11,0,0)
f(16,60,9,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',9,0,0)
f(17,60,9,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',9,0,0)
f(18,60,9,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',9,0,0)
f(16,69,2,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',2,0,0)
f(17,69,2,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',2,0,0)
f(10,71,20,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,71,20,2,'kyo/concurrent/fibers$Fiber$$anon$11.apply',20,0,0)
f(12,78,5,2,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1',5,0,0)
f(13,80,3,2,'kyo/concurrent/fibers$$anon$12.<init>',3,0,0)
f(14,82,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(12,83,1,2,'kyo/concurrent/fibers$Fiber.interrupt',1,0,0)
f(12,84,5,2,'kyo/concurrent/scheduler/IOPromise.<init>',5,0,0)
f(13,84,5,2,'kyo/concurrent/scheduler/IOPromise.<init>',5,0,0)
f(14,84,5,2,'java/util/concurrent/atomic/AtomicReference.<init>',5,0,0)
f(12,89,2,2,'kyo/concurrent/scheduler/IOTask.ensure',2,0,0)
f(13,89,1,2,'kyo/concurrent/scheduler/IOTask.curr',1,0,0)
f(13,90,1,2,'kyo/concurrent/scheduler/IOTask.ensures',1,0,0)
f(10,91,1,3,'vtable stub')
f(9,92,1,1,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf')
f(9,93,129,1,'kyo/concurrent/scheduler/IOTask.finalize$1',16,0,0)
f(10,93,129,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$61.0x0000000800d49dc8.apply$mcV$sp',16,0,0)
f(11,93,129,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1',16,0,0)
f(12,93,129,1,'kyo/concurrent/fibers$.loop$9',16,0,0)
f(13,93,66,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(14,93,66,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(15,93,65,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,93,65,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,93,65,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,93,65,1,'scala/runtime/function/JProcedure1.apply')
f(19,94,64,1,'scala/runtime/function/JProcedure1.apply')
f(20,94,64,1,'kyo/concurrent/scheduler/IOTask$$Lambda$68.0x0000000800d4e580.applyVoid')
f(21,96,62,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(22,96,1,2,'kyo/concurrent/scheduler/IOTask.<init>',1,0,0)
f(23,96,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(22,97,54,2,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1',34,0,0)
f(23,105,46,2,'kyo/concurrent/scheduler/IOTask$$Lambda$69.0x0000000800d4e988.apply',26,0,0)
f(24,105,46,2,'kyo/concurrent/scheduler/IOTask.$anonfun$1',26,0,0)
f(25,108,43,2,'kyo/bench/InterruptBench$$anon$3.apply',23,0,0)
f(26,112,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(27,113,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(26,114,36,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',17,0,0)
f(27,115,19,1,'kyo/bench/InterruptBench$$Lambda$59.0x0000000800d490d8.apply')
f(28,115,19,1,'kyo/bench/InterruptBench.$anonfun$adapted$1')
f(29,115,19,1,'kyo/bench/InterruptBench.$anonfun$3')
f(30,115,19,1,'kyo/bench/InterruptBench.iterate$2')
f(31,115,3,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1',3,0,0)
f(31,118,10,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',6,0,0)
f(32,121,7,2,'kyo/bench/InterruptBench$$anon$3.<init>',3,0,0)
f(33,121,7,2,'kyo/core$internal$KyoCont.<init>',3,0,0)
f(34,124,4,6,'kyo/core$internal$KyoCont.value',0,4,0)
f(31,128,6,2,'kyo/concurrent/fibers$Fibers.forkFiber',2,0,0)
f(32,130,4,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(33,132,2,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply',2,0,0)
f(34,133,1,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',1,0,0)
f(27,134,12,2,'kyo/bench/InterruptBench$$anon$3.<init>',12,0,0)
f(28,136,10,2,'kyo/core$internal$KyoCont.<init>',10,0,0)
f(27,146,4,2,'scala/runtime/BoxesRunTime.unboxToBoolean',4,0,0)
f(26,150,1,1,'kyo/core$internal$KyoRoot.apply')
f(22,151,7,2,'kyo/concurrent/scheduler/Scheduler$.schedule',7,0,0)
f(23,153,5,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',5,0,0)
f(24,153,5,2,'kyo/concurrent/scheduler/Queue.offer',5,0,0)
f(25,153,5,2,'kyo/concurrent/scheduler/Queue.tryModify',5,0,0)
f(26,154,3,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',3,0,0)
f(27,155,2,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',2,0,0)
f(26,157,1,2,'scala/Function0.apply$mcZ$sp',1,0,0)
f(27,157,1,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47258.apply',1,0,0)
f(15,158,1,1,'kyo/concurrent/scheduler/IOPromise.onComplete')
f(13,159,63,1,'scala/runtime/BoxesRunTime.boxToBoolean',16,0,0)
f(9,222,4,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,223,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,223,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,223,1,1,'kyo/concurrent/scheduler/IOTask$$Lambda$63.0x0000000800d4b0c0.<init>')
f(13,223,1,1,'java/lang/Object.<init>')
f(10,224,2,1,'java/util/concurrent/atomic/AtomicReference.compareAndSet')
f(11,224,2,1,'java/lang/invoke/VarHandleGuards.guard_LLL_Z')
f(12,224,2,1,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet')
f(9,226,4,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,226,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(11,226,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(10,227,3,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',3,0,0)
f(11,227,3,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',3,0,0)
f(12,227,3,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',3,0,0)
f(9,230,14,1,'kyo/concurrent/scheduler/IOTask.loop$8',1,0,0)
f(10,230,14,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',1,0,0)
f(11,230,14,1,'kyo/concurrent/scheduler/IOPromise.complete',1,0,0)
f(12,231,13,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush',1,0,0)
f(13,231,13,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',1,0,0)
f(14,231,13,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run',1,0,0)
f(15,231,4,3,'itable stub')
f(15,235,5,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,235,5,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,235,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,235,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,235,5,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,235,5,1,'jdk/internal/misc/Unsafe.unpark')
f(21,235,1,4,'ThreadsListHandle::~ThreadsListHandle()')
f(21,236,4,3,'pthread_cond_signal')
f(22,236,4,5,'entry_SYSCALL_64_after_hwframe')
f(23,236,3,5,'do_syscall_64')
f(24,236,3,5,'__x64_sys_futex')
f(25,236,3,5,'do_futex')
f(26,236,3,5,'futex_wake')
f(27,236,3,5,'wake_up_q')
f(28,236,3,5,'_raw_spin_unlock_irqrestore')
f(23,239,1,5,'syscall_exit_to_user_mode')
f(15,240,4,1,'scala/runtime/function/JProcedure1.apply')
f(16,242,2,1,'scala/runtime/function/JProcedure1.apply')
f(17,242,2,2,'kyo/concurrent/scheduler/IOTask$$Lambda$63.0x0000000800d4b0c0.applyVoid',2,0,0)
f(18,242,2,2,'kyo/concurrent/scheduler/IOTask.loop$2$$anonfun$1',2,0,0)
f(19,242,2,2,'kyo/concurrent/scheduler/IOTask.loop$3',2,0,0)
f(20,242,2,2,'java/util/concurrent/atomic/AtomicReference.get',2,0,0)
f(7,244,35,1,'kyo/concurrent/scheduler/Queue.poll',1,0,0)
f(8,244,8,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(9,244,8,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(10,244,8,1,'kyo/concurrent/scheduler/Queue$$Lambda$56.0x0000000800d45000.<init>',1,0,0)
f(11,251,1,2,'java/lang/Object.<init>',1,0,0)
f(8,252,27,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,253,12,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',12,0,0)
f(10,257,8,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',8,0,0)
f(11,262,1,2,'java/lang/invoke/VarForm.getMemberName',1,0,0)
f(12,262,1,2,'java/lang/invoke/VarForm.getMemberNameOrNull',1,0,0)
f(11,263,2,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',2,0,0)
f(12,263,2,2,'java/util/Objects.requireNonNull',2,0,0)
f(9,265,14,2,'kyo/concurrent/scheduler/Queue$$Lambda$60.0x0000000800d49908.apply',14,0,0)
f(10,265,14,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',14,0,0)
f(11,266,13,2,'scala/collection/mutable/PriorityQueue.dequeue',13,0,0)
f(12,273,4,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',4,0,0)
f(12,277,2,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',2,0,0)
f(7,279,8,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,279,1,1,'java/util/AbstractQueue.add')
f(9,279,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.offer')
f(10,279,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.producerChunkForIndex')
f(11,279,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.appendNextChunks')
f(12,279,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.newOrPooledChunk')
f(13,279,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(14,279,1,6,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk',0,1,0)
f(8,280,7,1,'kyo/concurrent/scheduler/Worker.park')
f(9,280,7,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,280,7,1,'jdk/internal/misc/Unsafe.park')
f(11,280,1,3,'Unsafe_Park')
f(12,280,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,280,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,280,1,5,'do_syscall_64')
f(15,280,1,5,'syscall_enter_from_user_mode')
f(11,281,6,3,'[unknown]')
f(12,281,6,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,281,6,5,'entry_SYSCALL_64_after_hwframe')
f(14,281,6,5,'do_syscall_64')
f(15,281,6,5,'__x64_sys_futex')
f(16,282,5,5,'do_futex')
f(17,282,5,5,'futex_wait')
f(18,282,3,5,'futex_wait_queue_me')
f(19,282,3,5,'schedule')
f(20,282,3,5,'__schedule')
f(21,282,3,5,'finish_task_switch.isra.0')
f(18,285,1,5,'hash_futex')
f(18,286,1,5,'schedule')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 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,13930,3,'all')
f(1,0,13926,1,'java/lang/Thread.run')
f(2,0,13926,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,13926,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,1275,1,'java/util/concurrent/FutureTask.run')
f(5,0,1275,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,1275,1,'java/util/concurrent/FutureTask.run')
f(7,0,1275,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,1275,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1275,1,'java/lang/reflect/Method.invoke')
f(10,0,1275,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,1275,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,1275,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,1275,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,1275,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,1275,1,'kyo/bench/Bench.forkKyo')
f(16,0,55,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,55,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,55,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,23,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,0,23,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3ee58')
f(19,23,32,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3ee58')
f(16,55,81,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,55,81,2,'kyo.bench.Bench$$anon$1')
f(16,136,812,1,'kyo/bench/Bench.runLoop$2')
f(17,136,364,1,'kyo/bench/Bench$$anon$1.apply')
f(18,136,18,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,136,18,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c83220.apply')
f(20,136,18,1,'kyo/bench/Bench.$anonfun$2')
f(21,136,18,1,'kyo/concurrent/fibers$Fiber.block')
f(22,136,18,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,154,346,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,154,346,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,154,346,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84600.apply')
f(21,154,346,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,154,17,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,171,282,2,'kyo.concurrent.scheduler.IOTask')
f(22,453,47,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,453,47,2,'kyo.concurrent.fibers$Fiber')
f(17,500,448,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,500,448,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,500,448,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,500,448,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,500,149,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,500,149,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,500,58,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,558,91,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,558,91,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,649,85,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,734,214,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,734,214,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,734,214,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,948,327,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,948,226,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,948,226,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,948,226,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,948,226,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84600')
f(17,1174,74,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,1174,74,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,1248,27,1,'kyo/locals$Locals$.save')
f(18,1248,27,2,'kyo.locals$Locals$$anon$3')
f(4,1275,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ee28.run')
f(5,1275,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,1275,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,1275,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,1275,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,1275,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,1275,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,1275,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,1286,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f050.run')
f(5,1286,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,1286,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,1286,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,1286,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,1286,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,1286,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$59+0x0000000800d49430')
f(4,1297,12629,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fd98.run')
f(5,1297,12629,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,1297,12629,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,1297,12628,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,1297,12628,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,1297,12575,1,'kyo/bench/NarrowBindBench$$anon$2.apply')
f(10,1297,12575,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(11,1297,12575,1,'kyo/bench/NarrowBindBench$$Lambda$57.0x0000000800d44400.apply')
f(12,1297,12575,1,'kyo/bench/NarrowBindBench.$anonfun$adapted$1')
f(13,1297,12575,1,'kyo/bench/NarrowBindBench.$anonfun$1')
f(14,1297,12575,1,'kyo/bench/NarrowBindBench.loop$1')
f(15,1297,1788,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,1297,1788,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,1297,1788,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,1297,1788,2,'kyo.bench.NarrowBindBench$$Lambda$57+0x0000000800d44400')
f(15,3085,4752,2,'kyo.bench.NarrowBindBench$$anon$1')
f(15,7837,6035,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(16,7837,6035,2,'kyo.bench.NarrowBindBench$$anon$2')
f(9,13872,1,1,'kyo/bench/NarrowBindBench$$anon$3.apply')
f(10,13872,1,1,'kyo/bench/NarrowBindBench$$anon$3.apply')
f(11,13872,1,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(12,13872,1,1,'java/lang/Integer.valueOf')
f(13,13872,1,2,'java.lang.Integer')
f(9,13873,1,1,'kyo/bench/NarrowBindBench$$anon$5.apply')
f(10,13873,1,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$2')
f(11,13873,1,1,'kyo/bench/NarrowBindBench$$Lambda$56.0x0000000800d45b80.apply')
f(12,13873,1,1,'kyo/bench/NarrowBindBench.$anonfun$adapted$2')
f(13,13873,1,1,'kyo/bench/NarrowBindBench.$anonfun$2')
f(14,13873,1,1,'kyo/bench/NarrowBindBench.loop$1')
f(15,13873,1,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(16,13873,1,2,'kyo.bench.NarrowBindBench$$anon$2')
f(9,13874,51,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,13874,51,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,13874,51,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3ee58.apply')
f(12,13874,51,1,'kyo/bench/Bench.$anonfun$1')
f(13,13874,51,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,13874,51,1,'kyo/bench/NarrowBindBench.kyoBench')
f(15,13874,51,2,'kyo.bench.NarrowBindBench$$anon$4')
f(7,13925,1,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,13925,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,13925,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,13925,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,13925,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(12,13925,1,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d45000')
f(1,13926,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,13926,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,13926,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,13926,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,13926,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,13926,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,13926,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,13926,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,13926,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,13926,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,13926,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,13926,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,13926,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,13929,1,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,13929,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,13929,1,1,'java/lang/ClassLoader.loadClass')
f(10,13929,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,13929,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,13929,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,13929,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,13929,1,1,'jdk/internal/loader/URLClassPath.getResource')
f(15,13929,1,1,'jdk/internal/loader/URLClassPath$JarLoader.getResource')
f(16,13929,1,1,'java/util/jar/JarFile.getJarEntry')
f(17,13929,1,1,'java/util/jar/JarFile.getEntry')
f(18,13929,1,1,'java/util/zip/ZipFile.getEntry')
f(19,13929,1,1,'java/util/zip/ZipFile.getZipEntry')
f(20,13929,1,1,'java/util/jar/JavaUtilJarAccessImpl.entryFor')
f(21,13929,1,1,'java/util/jar/JarFile.entryFor')
f(22,13929,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: 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,279,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,'Matcher::match()')
f(11,0,1,4,'Matcher::xform(Node*, int)')
f(12,0,1,4,'Matcher::match_tree(Node const*)')
f(10,1,1,4,'PhaseChaitin::Register_Allocate()')
f(11,1,1,4,'PhaseChaitin::Split(unsigned int, ResourceArea*)')
f(9,2,1,4,'Compile::Optimize()')
f(10,2,1,4,'PhaseIdealLoop::optimize(PhaseIterGVN&, LoopOptsMode)')
f(11,2,1,4,'PhaseIdealLoop::build_and_optimize(LoopOptsMode)')
f(12,2,1,4,'PhaseIdealLoop::build_loop_late(VectorSet&, Node_List&, Node_Stack&)')
f(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,'ParseGenerator::generate(JVMState*)')
f(21,3,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(22,3,1,4,'Parse::do_all_blocks()')
f(23,3,1,4,'Parse::do_one_block()')
f(24,3,1,4,'Parse::do_call()')
f(25,3,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(26,3,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(27,3,1,4,'ParseGenerator::generate(JVMState*)')
f(28,3,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(29,3,1,4,'Parse::do_all_blocks()')
f(30,3,1,4,'Parse::do_one_block()')
f(31,3,1,4,'Parse::do_call()')
f(32,3,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(33,3,1,4,'ParseGenerator::generate(JVMState*)')
f(34,3,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(35,3,1,4,'Parse::do_all_blocks()')
f(36,3,1,4,'Parse::do_one_block()')
f(37,3,1,4,'Parse::do_call()')
f(38,3,1,4,'Parse::can_not_compile_call_site(ciMethod*, ciInstanceKlass*)')
f(1,4,275,1,'java/lang/Thread.run')
f(2,4,275,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,4,275,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,4,15,1,'java/util/concurrent/FutureTask.run')
f(5,4,15,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,4,15,1,'java/util/concurrent/FutureTask.run')
f(7,4,15,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,4,15,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,4,15,1,'java/lang/reflect/Method.invoke')
f(10,4,15,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,4,15,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,4,15,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,4,15,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,4,15,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,4,15,1,'kyo/bench/Bench.forkKyo')
f(16,4,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,4,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,4,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,4,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,4,1,4,'InstanceKlass::check_valid_for_instantiation(bool, JavaThread*)')
f(16,5,14,1,'kyo/bench/Bench.runLoop$2')
f(17,5,9,1,'kyo/bench/Bench$$anon$1.apply')
f(18,5,9,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,5,9,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,6,8,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84600.apply')
f(21,6,8,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,6,8,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,6,8,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,6,8,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,6,8,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,6,8,1,'jdk/internal/misc/Unsafe.unpark')
f(27,6,8,3,'pthread_cond_signal')
f(28,7,7,5,'entry_SYSCALL_64_after_hwframe')
f(29,7,7,5,'do_syscall_64')
f(30,7,7,5,'__x64_sys_futex')
f(31,7,7,5,'do_futex')
f(32,7,7,5,'futex_wake')
f(33,8,6,5,'wake_up_q')
f(34,8,6,5,'_raw_spin_unlock_irqrestore')
f(17,14,5,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,14,5,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,14,5,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,14,5,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,14,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,14,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,14,5,1,'java/util/concurrent/locks/LockSupport.park')
f(24,14,5,1,'jdk/internal/misc/Unsafe.park')
f(25,14,5,3,'[unknown]')
f(26,14,4,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,15,3,5,'entry_SYSCALL_64_after_hwframe')
f(28,15,3,5,'do_syscall_64')
f(29,15,3,5,'__x64_sys_futex')
f(30,15,3,5,'do_futex')
f(31,15,3,5,'futex_wait')
f(32,15,3,5,'futex_wait_queue_me')
f(33,15,3,5,'schedule')
f(34,15,3,5,'__schedule')
f(35,15,3,5,'finish_task_switch.isra.0')
f(26,18,1,3,'pthread_cond_wait')
f(4,19,260,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fd98.run')
f(5,19,260,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,19,260,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,19,62,2,'kyo/concurrent/scheduler/IOTask.run',52,0,0)
f(8,19,62,2,'kyo/concurrent/scheduler/IOTask.eval',52,0,0)
f(9,59,13,2,'kyo/bench/NarrowBindBench$$anon$2.apply',12,0,0)
f(10,68,4,2,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1',3,0,0)
f(11,68,4,2,'kyo/bench/NarrowBindBench$$Lambda$57.0x0000000800d488b0.apply',3,0,0)
f(12,68,4,2,'kyo/bench/NarrowBindBench.$anonfun$adapted$1',3,0,0)
f(13,71,1,1,'kyo/bench/NarrowBindBench.$anonfun$1')
f(14,71,1,1,'kyo/bench/NarrowBindBench.loop$1')
f(15,71,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(16,71,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(17,71,1,4,'MemAllocator::allocate() const')
f(18,71,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(19,71,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(20,71,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(9,72,9,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,72,9,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,72,9,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,72,9,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,72,9,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,72,9,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,72,9,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,72,9,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,72,9,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,72,9,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,72,9,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,72,9,1,'jdk/internal/misc/Unsafe.unpark')
f(21,72,9,3,'pthread_cond_signal')
f(22,72,9,5,'entry_SYSCALL_64_after_hwframe')
f(23,72,9,5,'do_syscall_64')
f(24,72,8,5,'__x64_sys_futex')
f(25,72,8,5,'do_futex')
f(26,72,8,5,'futex_wake')
f(27,73,1,5,'wake_q_add_safe')
f(27,74,6,5,'wake_up_q')
f(28,74,6,5,'_raw_spin_unlock_irqrestore')
f(24,80,1,5,'syscall_enter_from_user_mode')
f(7,81,189,2,'kyo/concurrent/scheduler/Queue.poll',189,0,0)
f(8,81,3,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',3,0,0)
f(9,81,3,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',3,0,0)
f(10,82,2,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',2,0,0)
f(8,84,186,2,'kyo/concurrent/scheduler/Queue.modify',186,0,0)
f(9,84,93,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',93,0,0)
f(10,84,93,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',93,0,0)
f(11,108,21,2,'java/lang/invoke/VarForm.getMemberName',21,0,0)
f(12,116,13,2,'java/lang/invoke/VarForm.getMemberNameOrNull',13,0,0)
f(11,129,48,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',48,0,0)
f(12,146,31,2,'java/util/Objects.requireNonNull',31,0,0)
f(9,177,93,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d45000.apply',93,0,0)
f(10,177,93,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',93,0,0)
f(11,177,93,2,'scala/collection/mutable/PriorityQueue.dequeue',93,0,0)
f(12,254,7,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',7,0,0)
f(12,261,9,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_size0',9,0,0)
f(7,270,9,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,270,9,1,'kyo/concurrent/scheduler/Worker.park')
f(9,270,9,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,270,9,1,'jdk/internal/misc/Unsafe.park')
f(11,270,4,3,'Unsafe_Park')
f(12,271,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,271,2,5,'entry_SYSCALL_64_after_hwframe')
f(14,271,2,5,'do_syscall_64')
f(15,271,1,5,'__x64_sys_futex')
f(16,271,1,5,'do_futex')
f(17,271,1,5,'futex_wake')
f(15,272,1,5,'syscall_enter_from_user_mode')
f(12,273,1,4,'Parker::park(bool, long)')
f(11,274,5,3,'[unknown]')
f(12,274,5,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,274,5,5,'entry_SYSCALL_64_after_hwframe')
f(14,274,5,5,'do_syscall_64')
f(15,274,5,5,'__x64_sys_futex')
f(16,274,5,5,'do_futex')
f(17,274,5,5,'futex_wait')
f(18,274,4,5,'futex_wait_queue_me')
f(19,274,4,5,'schedule')
f(20,274,4,5,'__schedule')
f(21,274,4,5,'finish_task_switch.isra.0')
f(18,278,1,5,'hrtimer_cancel')
f(19,278,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,18889,3,'all')
f(1,0,18886,1,'java/lang/Thread.run')
f(2,0,18886,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,18886,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,18886,1,'java/util/concurrent/FutureTask.run')
f(5,0,18886,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,18886,1,'java/util/concurrent/FutureTask.run')
f(7,0,18886,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,18886,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,18886,1,'java/lang/reflect/Method.invoke')
f(10,0,18886,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,18886,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,18886,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,18886,1,'kyo/bench/jmh_generated/NarrowBindBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,18886,1,'kyo/bench/jmh_generated/NarrowBindBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,18886,1,'kyo/bench/Bench.syncKyo')
f(16,0,18886,1,'kyo/bench/Bench.runLoop$1')
f(17,0,18884,1,'kyo/bench/NarrowBindBench$$anon$2.apply')
f(18,0,18884,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(19,0,18884,1,'kyo/bench/NarrowBindBench$$Lambda$40.0x0000000800cd38c0.apply')
f(20,0,18884,1,'kyo/bench/NarrowBindBench.$anonfun$adapted$1')
f(21,0,18884,1,'kyo/bench/NarrowBindBench.$anonfun$1')
f(22,0,18884,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,9442,2,'kyo.bench.NarrowBindBench$$anon$1')
f(23,9444,2,2,'kyo.bench.NarrowBindBench$$anon$3')
f(23,9446,9438,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(24,9446,9438,2,'kyo.bench.NarrowBindBench$$anon$2')
f(17,18884,2,1,'kyo/bench/NarrowBindBench$$anon$5.apply')
f(18,18884,2,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$2')
f(19,18884,2,1,'kyo/bench/NarrowBindBench$$Lambda$37.0x0000000800c2d568.apply')
f(20,18884,2,1,'kyo/bench/NarrowBindBench.$anonfun$adapted$2')
f(21,18884,2,1,'kyo/bench/NarrowBindBench.$anonfun$2')
f(22,18884,2,1,'kyo/bench/NarrowBindBench.loop$1')
f(23,18884,1,2,'kyo.bench.NarrowBindBench$$anon$1')
f(23,18885,1,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(24,18885,1,2,'kyo.bench.NarrowBindBench$$anon$2')
f(1,18886,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,18886,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,18886,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,18886,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,18886,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,18886,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,18886,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,18886,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,18886,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,18886,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,18886,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,18886,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,18886,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
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>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(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,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(19,0,1,5,'wake_up_q')
f(20,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/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,194,2,'kyo/bench/Bench.runLoop$1',193,0,0)
f(17,141,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(18,141,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(19,141,1,4,'MemAllocator::allocate() const')
f(20,141,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(17,142,48,2,'kyo/bench/NarrowBindBench$$anon$2.apply',48,0,0)
f(18,150,6,2,'kyo/bench/NarrowBindBench$$anon$1.apply',6,0,0)
f(18,156,34,2,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1',34,0,0)
f(19,156,16,2,'kyo/bench/NarrowBindBench$$Lambda$40.0x0000000800cd38c0.apply',16,0,0)
f(20,156,16,2,'kyo/bench/NarrowBindBench.$anonfun$adapted$1',16,0,0)
f(21,156,16,2,'kyo/bench/NarrowBindBench.$anonfun$1',16,0,0)
f(22,156,16,2,'kyo/bench/NarrowBindBench.loop$1',16,0,0)
f(23,156,16,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',16,0,0)
f(24,161,11,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',11,0,0)
f(19,172,18,2,'scala/runtime/BoxesRunTime.unboxToInt',18,0,0)
f(17,190,5,2,'kyo/locals$Locals$State$.empty',5,0,0)
f(16,195,103,2,'kyo/bench/NarrowBindBench.kyoBench',103,0,0)
f(17,195,13,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',13,0,0)
f(18,195,13,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',13,0,0)
f(17,208,90,2,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$2',90,0,0)
f(18,208,89,2,'kyo/bench/NarrowBindBench$$anon$5.<init>',89,0,0)
f(19,263,34,2,'kyo/core$internal$KyoCont.<init>',34,0,0)
f(20,269,4,2,'kyo/ios$KyoIO.effect',4,0,0)
f(20,273,24,2,'kyo/ios$KyoIO.value',24,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,15020,3,'all')
f(1,0,15014,1,'java/lang/Thread.run')
f(2,0,15014,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,15014,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,823,1,'java/util/concurrent/FutureTask.run')
f(5,0,823,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,823,1,'java/util/concurrent/FutureTask.run')
f(7,0,823,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,823,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,823,1,'java/lang/reflect/Method.invoke')
f(10,0,823,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,823,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,823,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,823,1,'kyo/bench/jmh_generated/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,823,1,'kyo/bench/jmh_generated/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,823,1,'kyo/bench/Bench.forkKyo')
f(16,0,84,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,84,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,84,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,84,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c80820')
f(16,84,121,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,84,121,2,'kyo.bench.Bench$$anon$1')
f(16,205,474,1,'kyo/bench/Bench.runLoop$2')
f(17,205,239,1,'kyo/bench/Bench$$anon$1.apply')
f(18,205,84,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,205,84,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c85ba8.apply')
f(20,205,84,1,'kyo/bench/Bench.$anonfun$2')
f(21,205,84,1,'kyo/concurrent/fibers$Fiber.block')
f(22,205,84,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,289,155,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,289,155,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,289,155,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c81f78.apply')
f(21,289,155,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,289,152,2,'kyo.concurrent.scheduler.IOTask')
f(22,441,3,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,441,3,2,'kyo.concurrent.fibers$Fiber')
f(17,444,235,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,444,235,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,444,235,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,444,235,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,444,72,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,444,72,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,444,9,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,453,63,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,453,63,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,516,52,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,568,111,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,568,111,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,568,111,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,679,144,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,679,141,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,679,141,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,679,141,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,679,141,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c81f78')
f(17,820,3,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,820,3,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(4,823,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e478.run')
f(5,823,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,823,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,823,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,823,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,823,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,823,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,823,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,834,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e6a0.run')
f(5,834,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,834,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,834,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,834,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,834,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,834,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,834,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$70+0x0000000800d4d180')
f(4,845,14169,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d22b68.run')
f(5,845,14169,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,845,14169,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,845,14169,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,845,14169,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,845,14043,1,'kyo/bench/NarrowBindMapBench$$anon$12.apply')
f(10,845,1029,1,'kyo/bench/NarrowBindMapBench$$anon$11.apply')
f(11,845,410,1,'kyo/bench/NarrowBindMapBench$$anon$10.apply')
f(12,845,410,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$transformLoop$9')
f(13,845,410,1,'kyo/bench/NarrowBindMapBench$$Lambda$65.0x0000000800d4c0a0.apply')
f(14,845,410,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$9')
f(15,845,410,1,'kyo/bench/NarrowBindMapBench.$anonfun$9')
f(16,845,410,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(17,845,410,1,'java/lang/Integer.valueOf')
f(18,845,410,2,'java.lang.Integer')
f(11,1255,619,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$transformLoop$10')
f(12,1255,619,1,'kyo/bench/NarrowBindMapBench$$Lambda$66.0x0000000800d4c468.apply')
f(13,1255,619,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$10')
f(14,1255,619,1,'kyo/bench/NarrowBindMapBench.$anonfun$10')
f(15,1255,619,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(16,1255,619,1,'java/lang/Integer.valueOf')
f(17,1255,619,2,'java.lang.Integer')
f(10,1874,13014,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11')
f(11,1874,13014,1,'kyo/bench/NarrowBindMapBench$$Lambda$67.0x0000000800d4c830.apply')
f(12,1874,13014,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$11')
f(13,1874,13014,1,'kyo/bench/NarrowBindMapBench.$anonfun$11')
f(14,1874,13014,1,'kyo/bench/NarrowBindMapBench.loop$1')
f(15,1874,588,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,1874,588,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,1874,588,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,1874,588,2,'kyo.bench.NarrowBindMapBench$$Lambda$67+0x0000000800d4c830')
f(15,2462,465,2,'kyo.bench.NarrowBindMapBench$$anon$1')
f(15,2927,1067,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(16,2927,1067,2,'kyo.bench.NarrowBindMapBench$$anon$2')
f(15,3994,1011,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$transformLoop$2')
f(16,3994,1011,2,'kyo.bench.NarrowBindMapBench$$anon$3')
f(15,5005,1163,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$transformLoop$3')
f(16,5005,1163,2,'kyo.bench.NarrowBindMapBench$$anon$4')
f(15,6168,1160,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$transformLoop$4')
f(16,6168,1160,2,'kyo.bench.NarrowBindMapBench$$anon$5')
f(15,7328,1193,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$transformLoop$5')
f(16,7328,1193,2,'kyo.bench.NarrowBindMapBench$$anon$6')
f(15,8521,934,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$transformLoop$6')
f(16,8521,934,2,'kyo.bench.NarrowBindMapBench$$anon$7')
f(15,9455,1090,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$transformLoop$7')
f(16,9455,1090,2,'kyo.bench.NarrowBindMapBench$$anon$8')
f(15,10545,1091,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$transformLoop$8')
f(16,10545,1091,2,'kyo.bench.NarrowBindMapBench$$anon$9')
f(15,11636,1151,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$transformLoop$9')
f(16,11636,1151,2,'kyo.bench.NarrowBindMapBench$$anon$10')
f(15,12787,983,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$transformLoop$10')
f(16,12787,983,2,'kyo.bench.NarrowBindMapBench$$anon$11')
f(15,13770,1118,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11')
f(16,13770,1118,2,'kyo.bench.NarrowBindMapBench$$anon$12')
f(9,14888,126,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,14888,126,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,14888,126,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c80820.apply')
f(12,14888,126,1,'kyo/bench/Bench.$anonfun$1')
f(13,14888,126,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,14888,126,1,'kyo/bench/NarrowBindMapBench.kyoBench')
f(15,14888,126,2,'kyo.bench.NarrowBindMapBench$$anon$14')
f(1,15014,6,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,15014,6,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,15014,6,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,15014,6,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,15014,6,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,15014,6,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,15014,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,15014,1,2,'org.openjdk.jmh.runner.InfraControl')
f(8,15015,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,15015,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,15015,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,15015,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,15015,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,15015,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,15018,2,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,15018,2,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,15018,2,1,'java/lang/ClassLoader.loadClass')
f(10,15018,2,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,15018,2,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,15018,2,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,15018,2,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,15018,2,1,'jdk/internal/loader/BuiltinClassLoader.defineClass')
f(15,15018,1,1,'jdk/internal/loader/Resource.getByteBuffer')
f(16,15018,1,1,'jdk/internal/loader/Resource.cachedInputStream')
f(17,15018,1,1,'jdk/internal/loader/URLClassPath$JarLoader$2.getInputStream')
f(18,15018,1,1,'java/util/jar/JarFile.getInputStream')
f(19,15018,1,1,'java/util/zip/ZipFile.getInputStream')
f(20,15018,1,1,'java/util/zip/ZipFile$ZipFileInflaterInputStream.<init>')
f(21,15018,1,1,'java/util/zip/ZipFile$ZipFileInflaterInputStream.<init>')
f(22,15018,1,1,'java/util/zip/InflaterInputStream.<init>')
f(23,15018,1,2,'byte[]')
f(15,15019,1,1,'jdk/internal/loader/Resource.getBytes')
f(16,15019,1,1,'java/util/Arrays.copyOf')
f(17,15019,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::post_evacuate_collection_set(G1EvacuationInfo&, G1RedirtyCardsQueueSet*, G1ParScanThreadStateSet*)')
f(12,0,1,4,'void WeakProcessor::weak_oops_do<G1STWIsAliveClosure, G1KeepAliveClosure>(WorkGang*, G1STWIsAliveClosure*, G1KeepAliveClosure*, WeakProcessorTimes*)')
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,2,3,'[unknown_Java]')
f(2,1,1,1,'java/lang/Integer.valueOf')
f(2,2,1,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(1,3,290,1,'java/lang/Thread.run')
f(2,3,290,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,3,290,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,3,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/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,3,2,1,'kyo/bench/jmh_generated/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,3,2,1,'kyo/bench/Bench.forkKyo')
f(16,3,2,1,'kyo/bench/Bench.runLoop$2')
f(17,3,1,1,'kyo/bench/Bench$$anon$1.apply')
f(18,3,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,3,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,3,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c81f78.apply')
f(21,3,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,3,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,3,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,3,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,3,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,3,1,1,'jdk/internal/misc/Unsafe.unpark')
f(27,3,1,3,'pthread_cond_signal')
f(28,3,1,5,'entry_SYSCALL_64_after_hwframe')
f(29,3,1,5,'do_syscall_64')
f(30,3,1,5,'__x64_sys_futex')
f(31,3,1,5,'do_futex')
f(32,3,1,5,'futex_wake')
f(33,3,1,5,'wake_up_q')
f(34,3,1,5,'_raw_spin_unlock_irqrestore')
f(17,4,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,4,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,4,1,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,4,1,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,4,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,4,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,4,1,1,'java/util/concurrent/locks/LockSupport.park')
f(24,4,1,1,'jdk/internal/misc/Unsafe.park')
f(25,4,1,3,'Unsafe_Park')
f(26,4,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,4,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,4,1,5,'do_syscall_64')
f(29,4,1,5,'__x64_sys_futex')
f(30,4,1,5,'do_futex')
f(31,4,1,5,'futex_wake')
f(4,5,288,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d22b68.run')
f(5,5,288,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,5,288,1,'kyo/concurrent/scheduler/Worker.runWorker',0,0,1)
f(7,6,285,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,6,285,2,'kyo/concurrent/scheduler/IOTask.eval',275,0,0)
f(9,11,277,2,'kyo/bench/NarrowBindMapBench$$anon$12.apply',270,0,0)
f(10,12,276,2,'kyo/bench/NarrowBindMapBench$$anon$11.apply',269,0,0)
f(11,12,276,2,'kyo/bench/NarrowBindMapBench$$anon$10.apply',269,0,0)
f(12,64,224,2,'kyo/bench/NarrowBindMapBench$$anon$9.apply',217,0,0)
f(13,90,198,2,'kyo/bench/NarrowBindMapBench$$anon$8.apply',191,0,0)
f(14,99,189,2,'kyo/bench/NarrowBindMapBench$$anon$7.apply',182,0,0)
f(15,100,188,2,'kyo/bench/NarrowBindMapBench$$anon$6.apply',181,0,0)
f(16,111,156,2,'kyo/bench/NarrowBindMapBench$$anon$5.apply',149,0,0)
f(17,127,125,2,'kyo/bench/NarrowBindMapBench$$anon$4.apply',118,0,0)
f(18,134,118,2,'kyo/bench/NarrowBindMapBench$$anon$3.apply',111,0,0)
f(19,186,28,2,'kyo/bench/NarrowBindMapBench$$anon$2.apply',25,0,0)
f(20,186,28,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1',25,0,0)
f(21,192,18,2,'kyo/bench/NarrowBindMapBench$$Lambda$57.0x0000000800d49780.apply',16,0,0)
f(22,192,18,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$1',16,0,0)
f(23,198,5,2,'kyo/bench/NarrowBindMapBench.$anonfun$1',3,0,0)
f(24,201,2,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(23,203,7,2,'scala/runtime/BoxesRunTime.unboxToInt',7,0,0)
f(21,210,4,2,'scala/runtime/BoxesRunTime.boxToInteger',3,0,0)
f(22,213,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(23,213,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(24,213,1,4,'MemAllocator::allocate() const')
f(19,214,38,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$transformLoop$2',34,0,0)
f(20,218,34,2,'kyo/bench/NarrowBindMapBench$$Lambda$58.0x0000000800d4a3f8.apply',30,0,0)
f(21,225,27,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$2',23,0,0)
f(22,230,6,2,'kyo/bench/NarrowBindMapBench.$anonfun$2',2,0,0)
f(23,230,6,2,'scala/runtime/BoxesRunTime.boxToInteger',2,0,0)
f(24,232,4,1,'java/lang/Integer.valueOf')
f(22,236,16,2,'scala/runtime/BoxesRunTime.unboxToInt',16,0,0)
f(23,249,3,2,'java/lang/Integer.intValue',3,0,0)
f(17,252,15,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$transformLoop$4',15,0,0)
f(18,259,7,2,'kyo/bench/NarrowBindMapBench$$Lambda$60.0x0000000800d4adb8.apply',7,0,0)
f(19,259,7,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$4',7,0,0)
f(20,263,3,2,'kyo/bench/NarrowBindMapBench.$anonfun$4',3,0,0)
f(21,263,3,2,'scala/runtime/BoxesRunTime.boxToInteger',3,0,0)
f(18,266,1,2,'scala/runtime/BoxesRunTime.unboxToInt',1,0,0)
f(16,267,21,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$transformLoop$5',21,0,0)
f(17,267,11,2,'kyo/bench/NarrowBindMapBench$$Lambda$61.0x0000000800d4b180.apply',11,0,0)
f(18,267,11,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$5',11,0,0)
f(19,275,2,2,'kyo/bench/NarrowBindMapBench.$anonfun$5',2,0,0)
f(20,275,2,2,'scala/runtime/BoxesRunTime.boxToInteger',2,0,0)
f(19,277,1,2,'scala/runtime/BoxesRunTime.unboxToInt',1,0,0)
f(17,278,3,2,'scala/runtime/BoxesRunTime.boxToInteger',3,0,0)
f(17,281,7,2,'scala/runtime/BoxesRunTime.unboxToInt',7,0,0)
f(9,288,3,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,288,3,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,288,3,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,288,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,288,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,288,3,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,288,3,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,288,3,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,288,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,288,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,288,3,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,288,3,1,'jdk/internal/misc/Unsafe.unpark')
f(21,288,3,3,'pthread_cond_signal')
f(22,288,3,5,'entry_SYSCALL_64_after_hwframe')
f(23,288,3,5,'do_syscall_64')
f(24,288,2,5,'__x64_sys_futex')
f(25,288,2,5,'do_futex')
f(26,288,2,5,'futex_wake')
f(27,288,2,5,'wake_up_q')
f(28,288,2,5,'_raw_spin_unlock_irqrestore')
f(24,290,1,5,'syscall_enter_from_user_mode')
f(7,291,2,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,291,2,1,'kyo/concurrent/scheduler/Worker.park')
f(9,291,2,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,291,2,1,'jdk/internal/misc/Unsafe.park')
f(11,291,2,3,'[unknown]')
f(12,291,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,291,2,5,'entry_SYSCALL_64_after_hwframe')
f(14,291,2,5,'do_syscall_64')
f(15,291,2,5,'__x64_sys_futex')
f(16,291,2,5,'do_futex')
f(17,291,2,5,'futex_wait')
f(18,291,2,5,'futex_wait_queue_me')
f(19,291,2,5,'schedule')
f(20,291,2,5,'__schedule')
f(21,291,2,5,'finish_task_switch.isra.0')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 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,13728,3,'all')
f(1,0,13724,1,'java/lang/Thread.run')
f(2,0,13724,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,13724,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,13724,1,'java/util/concurrent/FutureTask.run')
f(5,0,13724,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,13724,1,'java/util/concurrent/FutureTask.run')
f(7,0,13724,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,13724,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,13724,1,'java/lang/reflect/Method.invoke')
f(10,0,13724,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,13724,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,13724,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,13724,1,'kyo/bench/jmh_generated/NarrowBindMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,13724,1,'kyo/bench/jmh_generated/NarrowBindMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,13724,1,'kyo/bench/Bench.syncKyo')
f(16,0,13724,1,'kyo/bench/Bench.runLoop$1')
f(17,0,13724,1,'kyo/bench/NarrowBindMapBench$$anon$12.apply')
f(18,0,13724,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11')
f(19,0,13724,1,'kyo/bench/NarrowBindMapBench$$Lambda$50.0x0000000800cd7440.apply')
f(20,0,13724,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$11')
f(21,0,13724,1,'kyo/bench/NarrowBindMapBench.$anonfun$11')
f(22,0,13724,1,'kyo/bench/NarrowBindMapBench.loop$1')
f(23,0,202,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(24,0,202,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(25,0,202,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(26,0,202,2,'kyo.bench.NarrowBindMapBench$$Lambda$50+0x0000000800cd7440')
f(23,202,819,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(24,202,819,2,'kyo.bench.NarrowBindMapBench$$anon$2')
f(23,1021,1303,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$transformLoop$2')
f(24,1021,1303,2,'kyo.bench.NarrowBindMapBench$$anon$3')
f(23,2324,1261,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$transformLoop$3')
f(24,2324,1261,2,'kyo.bench.NarrowBindMapBench$$anon$4')
f(23,3585,1258,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$transformLoop$4')
f(24,3585,1258,2,'kyo.bench.NarrowBindMapBench$$anon$5')
f(23,4843,1414,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$transformLoop$5')
f(24,4843,1414,2,'kyo.bench.NarrowBindMapBench$$anon$6')
f(23,6257,1103,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$transformLoop$6')
f(24,6257,1103,2,'kyo.bench.NarrowBindMapBench$$anon$7')
f(23,7360,1259,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$transformLoop$7')
f(24,7360,1259,2,'kyo.bench.NarrowBindMapBench$$anon$8')
f(23,8619,1082,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$transformLoop$8')
f(24,8619,1082,2,'kyo.bench.NarrowBindMapBench$$anon$9')
f(23,9701,1638,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$transformLoop$9')
f(24,9701,1638,2,'kyo.bench.NarrowBindMapBench$$anon$10')
f(23,11339,795,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$transformLoop$10')
f(24,11339,795,2,'kyo.bench.NarrowBindMapBench$$anon$11')
f(23,12134,1590,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11')
f(24,12134,1590,2,'kyo.bench.NarrowBindMapBench$$anon$12')
f(1,13724,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,13724,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,13724,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,13724,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,13724,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,13724,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,13724,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,13724,1,2,'org.openjdk.jmh.infra.Control')
f(8,13725,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,13725,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,13725,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,13725,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,13725,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,13725,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 448px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(28);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,298,3,'all')
f(1,0,298,1,'java/lang/Thread.run')
f(2,0,298,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,298,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,298,1,'java/util/concurrent/FutureTask.run')
f(5,0,298,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,298,1,'java/util/concurrent/FutureTask.run')
f(7,0,298,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,298,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,298,1,'java/lang/reflect/Method.invoke')
f(10,0,298,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,298,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,298,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,298,1,'kyo/bench/jmh_generated/NarrowBindMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,298,1,'kyo/bench/jmh_generated/NarrowBindMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,298,1,'kyo/bench/Bench.syncKyo')
f(16,0,298,1,'kyo/bench/Bench.runLoop$1',11,0,0)
f(17,11,287,1,'kyo/bench/NarrowBindMapBench$$anon$12.apply')
f(18,64,227,2,'kyo/bench/NarrowBindMapBench$$anon$11.apply',133,0,0)
f(19,75,94,1,'kyo/bench/NarrowBindMapBench$$anon$10.apply')
f(20,76,11,2,'kyo/bench/NarrowBindMapBench$$anon$9.apply',11,0,0)
f(21,76,11,2,'kyo/bench/NarrowBindMapBench$$anon$8.apply',11,0,0)
f(22,79,8,2,'kyo/bench/NarrowBindMapBench$$anon$7.apply',8,0,0)
f(23,86,1,2,'kyo/bench/NarrowBindMapBench$$anon$6.apply',1,0,0)
f(24,86,1,2,'kyo/bench/NarrowBindMapBench$$anon$5.apply',1,0,0)
f(25,86,1,2,'kyo/bench/NarrowBindMapBench$$anon$4.apply',1,0,0)
f(26,86,1,2,'kyo/bench/NarrowBindMapBench$$anon$3.apply',1,0,0)
f(27,86,1,2,'kyo/bench/NarrowBindMapBench$$anon$2.apply',1,0,0)
f(20,87,82,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$transformLoop$9',82,0,0)
f(21,87,82,2,'kyo/bench/NarrowBindMapBench$$Lambda$48.0x0000000800cd6cb0.apply',82,0,0)
f(22,87,82,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$9',82,0,0)
f(23,87,82,2,'kyo/bench/NarrowBindMapBench.$anonfun$9',82,0,0)
f(24,87,82,2,'scala/runtime/BoxesRunTime.boxToInteger',82,0,0)
f(19,169,122,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$transformLoop$10',122,0,0)
f(20,182,103,2,'kyo/bench/NarrowBindMapBench$$Lambda$49.0x0000000800cd7078.apply',103,0,0)
f(21,182,103,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$10',103,0,0)
f(22,182,103,2,'kyo/bench/NarrowBindMapBench.$anonfun$10',103,0,0)
f(23,192,93,2,'scala/runtime/BoxesRunTime.boxToInteger',93,0,0)
f(20,285,1,2,'kyo/bench/NarrowBindMapBench$$anon$11.<init>',1,0,0)
f(21,285,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(22,285,1,2,'kyo/core$internal$Kyo.<init>',1,0,0)
f(20,286,5,2,'scala/runtime/BoxesRunTime.unboxToInt',5,0,0)
f(21,290,1,2,'java/lang/Integer.intValue',1,0,0)
f(18,291,7,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11',7,0,0)
f(19,296,2,2,'kyo/bench/NarrowBindMapBench$$anon$12.<init>',2,0,0)
search();
</script></body></html>
This file has been truncated, but you can view the full file.
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 544px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(34);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,8224,3,'all')
f(1,0,8219,1,'java/lang/Thread.run')
f(2,0,8219,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,8219,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,1152,1,'java/util/concurrent/FutureTask.run')
f(5,0,1152,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,1152,1,'java/util/concurrent/FutureTask.run')
f(7,0,1152,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,1152,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1152,1,'java/lang/reflect/Method.invoke')
f(10,0,1152,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,1152,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,1152,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,1152,1,'kyo/bench/jmh_generated/PingPongBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,1151,1,'kyo/bench/jmh_generated/PingPongBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,1151,1,'kyo/bench/Bench.forkKyo')
f(16,0,87,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,87,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,87,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,87,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c82620')
f(16,87,62,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,87,62,2,'kyo.bench.Bench$$anon$1')
f(16,149,729,1,'kyo/bench/Bench.runLoop$2')
f(17,149,455,1,'kyo/bench/Bench$$anon$1.apply')
f(18,149,190,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,149,190,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c89220.apply')
f(20,149,190,1,'kyo/bench/Bench.$anonfun$2')
f(21,149,190,1,'kyo/concurrent/fibers$Fiber.block')
f(22,149,190,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,339,265,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,339,265,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,339,265,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c86000.apply')
f(21,339,265,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,339,199,2,'kyo.concurrent.scheduler.IOTask')
f(22,538,66,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,538,66,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,538,66,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,538,66,1,'kyo/concurrent/scheduler/Queue.offer')
f(26,538,66,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(27,538,66,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(28,538,66,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(29,538,66,2,'kyo.concurrent.scheduler.Queue$$Lambda$54+0x0000000800d4a680')
f(17,604,274,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,604,274,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,604,274,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,604,274,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,604,274,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,604,274,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,604,274,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(16,878,273,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,878,273,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,878,273,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,878,273,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,878,273,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c86000')
f(14,1151,1,1,'org/openjdk/jmh/results/BenchmarkTaskResult.<init>')
f(15,1151,1,2,'java.util.ArrayList')
f(4,1152,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d243d0.run')
f(5,1152,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,1152,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,1152,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,1152,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,1152,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,1152,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,1152,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,1163,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d245f8.run')
f(5,1163,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,1163,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,1163,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,1163,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,1163,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,1163,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$84+0x0000000800d5d310')
f(4,1174,7045,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d21b20.run')
f(5,1174,7045,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,1174,7045,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,1174,6641,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,1174,6641,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,1174,11,1,'kyo/bench/PingPongBench$$anon$10.apply')
f(10,1174,11,1,'kyo/bench/PingPongBench$$anon$8.apply')
f(11,1174,11,1,'kyo/concurrent/channels$Channels$$anon$21.apply')
f(12,1174,11,1,'kyo/concurrent/channels$Channels$.kyo$concurrent$channels$Channels$$$_$transformLoop$11')
f(13,1174,11,1,'kyo/concurrent/channels$Channels$$$Lambda$64.0x0000000800d51640.apply')
f(14,1174,11,1,'kyo/concurrent/channels$Channels$.$anonfun$9')
f(15,1174,11,1,'kyo/concurrent/channels$Channels$$anon$14.<init>')
f(16,1174,4,2,'org.jctools.queues.MpmcUnboundedXaddArrayQueue')
f(16,1178,7,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(17,1178,7,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(18,1178,7,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.<init>')
f(19,1178,3,2,'org.jctools.queues.SpscArrayQueue')
f(19,1181,4,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(20,1181,4,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(21,1181,4,1,'org/jctools/queues/MpmcUnboundedXaddChunk.<init>')
f(22,1181,4,1,'org/jctools/util/UnsafeLongArrayAccess.allocateLongArray')
f(23,1181,4,2,'long[]')
f(9,1185,1,1,'kyo/bench/PingPongBench$$anon$11.apply')
f(10,1185,1,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$10')
f(11,1185,1,1,'kyo/bench/PingPongBench$$Lambda$61.0x0000000800d4f780.apply')
f(12,1185,1,1,'kyo/bench/PingPongBench.$anonfun$adapted$3')
f(13,1185,1,1,'kyo/bench/PingPongBench.$anonfun$4')
f(14,1185,1,1,'kyo/concurrent/channels$Channels$.blocking')
f(15,1185,1,1,'kyo/concurrent/channels$Channels$.kyo$concurrent$channels$Channels$$$_$transformLoop$11')
f(16,1185,1,2,'kyo.concurrent.channels$Channels$$anon$21')
f(9,1186,1,1,'kyo/bench/PingPongBench$$anon$14.apply')
f(10,1186,1,1,'kyo/concurrent/fibers$Fibers$$anon$31.apply')
f(11,1186,1,1,'kyo/concurrent/fibers$Fibers$$anon$31.apply')
f(12,1186,1,2,'kyo.concurrent.scheduler.IOPromise')
f(9,1187,3,1,'kyo/bench/PingPongBench$$anon$5.apply')
f(10,1187,3,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$4')
f(11,1187,3,1,'kyo/bench/PingPongBench$$Lambda$77.0x0000000800d57468.apply')
f(12,1187,3,1,'kyo/bench/PingPongBench.$anonfun$adapted$2')
f(13,1187,3,1,'kyo/bench/PingPongBench.$anonfun$9')
f(14,1187,3,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$3')
f(15,1187,3,2,'kyo.bench.PingPongBench$$anon$4')
f(9,1190,572,1,'kyo/bench/PingPongBench$$anon$6.apply')
f(10,1190,153,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$5')
f(11,1190,153,2,'kyo.bench.PingPongBench$$anon$6')
f(10,1343,419,1,'kyo/concurrent/channels$Channels$Blocking$$anon$2.apply')
f(11,1343,270,1,'kyo/concurrent/channels$$anon$16.apply')
f(12,1343,270,1,'kyo/concurrent/channels$$anon$16.apply')
f(13,1343,270,1,'kyo/concurrent/fibers$Fibers.unsafePromise')
f(14,1343,135,2,'kyo.concurrent.fibers$Fiber$Promise')
f(14,1478,135,2,'kyo.concurrent.scheduler.IOPromise')
f(11,1613,149,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2')
f(12,1613,149,1,'kyo/concurrent/channels$Channels$Blocking$$Lambda$73.0x0000000800d56050.apply')
f(13,1613,149,1,'kyo/concurrent/channels$Channels$Blocking.$anonfun$2')
f(14,1613,149,1,'kyo/concurrent/fibers$Fiber.join')
f(15,1613,149,1,'kyo/concurrent/fibers$Fibers.get')
f(16,1613,149,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(17,1613,149,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(9,1762,1153,1,'kyo/bench/PingPongBench$$anon$7.apply')
f(10,1762,550,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$_$transformLoop$6')
f(11,1762,550,1,'kyo/bench/PingPongBench$$Lambda$68.0x0000000800d54e58.apply')
f(12,1762,550,1,'kyo/bench/PingPongBench.$anonfun$7')
f(13,1762,129,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(14,1762,129,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(15,1762,129,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,1762,129,2,'kyo.bench.PingPongBench$$Lambda$74+0x0000000800d56420')
f(13,1891,172,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$5')
f(14,1891,172,2,'kyo.bench.PingPongBench$$anon$6')
f(13,2063,249,1,'kyo/concurrent/channels$Channels$$anon$14.take')
f(14,2063,249,1,'kyo/concurrent/channels$Channels$Blocking.take$')
f(15,2063,249,1,'kyo/concurrent/channels$Channels$Blocking.take')
f(16,2063,76,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,2063,76,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,2063,76,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,2063,76,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$73+0x0000000800d56050')
f(16,2139,173,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2')
f(17,2139,173,2,'kyo.concurrent.channels$Channels$Blocking$$anon$2')
f(10,2312,603,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,2312,603,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,2312,603,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c86000.apply')
f(13,2312,603,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,2312,89,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(14,2401,274,2,'kyo.concurrent.scheduler.IOTask')
f(14,2675,98,1,'kyo/concurrent/fibers$Fiber$.promise')
f(15,2675,98,2,'kyo.concurrent.fibers$Fiber')
f(14,2773,142,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(15,2773,142,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(16,2773,142,1,'kyo/concurrent/scheduler/Queue.offer')
f(17,2773,142,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,2773,142,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,2773,142,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,2773,142,2,'kyo.concurrent.scheduler.Queue$$Lambda$54+0x0000000800d4a680')
f(9,2915,1124,1,'kyo/bench/PingPongBench$$anon$9.apply')
f(10,2915,960,1,'kyo/bench/PingPongBench$$anon$1.apply')
f(11,2915,191,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$1')
f(12,2915,191,2,'kyo.bench.PingPongBench$$anon$1')
f(11,3106,769,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(12,3106,650,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(13,3106,650,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(14,3106,650,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c86000.apply')
f(15,3106,650,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(16,3106,66,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(16,3172,303,2,'kyo.concurrent.scheduler.IOTask')
f(16,3475,110,1,'kyo/concurrent/fibers$Fiber$.promise')
f(17,3475,110,2,'kyo.concurrent.fibers$Fiber')
f(16,3585,171,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(17,3585,171,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(18,3585,171,1,'kyo/concurrent/scheduler/Queue.offer')
f(19,3585,171,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,3585,171,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,3585,171,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,3585,171,2,'kyo.concurrent.scheduler.Queue$$Lambda$54+0x0000000800d4a680')
f(12,3756,119,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(13,3756,119,1,'kyo/concurrent/fibers$Fibers$$Lambda$70.0x0000000800d554e8.apply')
f(14,3756,119,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(15,3756,119,1,'kyo/concurrent/fibers$Fiber.join')
f(16,3756,119,1,'kyo/concurrent/fibers$Fibers.get')
f(17,3756,119,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(18,3756,119,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(10,3875,163,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$8')
f(11,3875,163,2,'kyo.bench.PingPongBench$$anon$9')
f(10,4038,1,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(11,4038,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,4038,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,4038,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c86000.apply')
f(14,4038,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,4038,1,2,'kyo.concurrent.scheduler.IOTask')
f(9,4039,1325,1,'kyo/concurrent/channels$$anon$17.apply')
f(10,4039,1325,1,'kyo/concurrent/channels$$anon$17.apply')
f(11,4039,1325,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(12,4039,1258,1,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete')
f(13,4039,1258,1,'kyo/concurrent/fibers$Fiber$Promise.loop$23')
f(14,4039,1258,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(15,4039,1258,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(16,4039,1258,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(17,4039,1258,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(18,4039,1258,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(19,4039,1258,1,'scala/runtime/function/JProcedure1.apply')
f(20,4039,1258,1,'scala/runtime/function/JProcedure1.apply')
f(21,4039,1258,1,'kyo/concurrent/scheduler/IOTask$$Lambda$63.0x0000000800d45408.applyVoid')
f(22,4039,1258,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(23,4039,159,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(24,4039,159,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(25,4039,159,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(26,4039,159,2,'kyo.concurrent.scheduler.IOTask$$Lambda$79+0x0000000800d5c3c8')
f(23,4198,285,2,'kyo.concurrent.scheduler.IOTask')
f(23,4483,234,1,'kyo/concurrent/scheduler/IOPromise.become')
f(24,4483,234,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(25,4483,96,1,'kyo/concurrent/scheduler/IOPromise$Linked$.apply')
f(26,4483,96,2,'kyo.concurrent.scheduler.IOPromise$Linked')
f(25,4579,138,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(26,4579,138,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(27,4579,138,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(28,4579,138,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(23,4717,435,1,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1')
f(24,4717,435,1,'kyo/concurrent/scheduler/IOTask$$Lambda$79.0x0000000800d5c3c8.apply')
f(25,4717,435,1,'kyo/concurrent/scheduler/IOTask.$anonfun$1')
f(26,4717,435,1,'kyo/bench/PingPongBench$$anon$6.apply')
f(27,4717,435,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$5')
f(28,4717,435,1,'kyo/bench/PingPongBench$$Lambda$74.0x0000000800d56420.apply')
f(29,4717,435,1,'kyo/bench/PingPongBench.$anonfun$8')
f(30,4717,146,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(31,4717,146,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(32,4717,146,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(33,4717,146,2,'kyo.bench.PingPongBench$$Lambda$77+0x0000000800d57468')
f(30,4863,95,2,'kyo.bench.PingPongBench$$anon$2')
f(30,4958,194,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$4')
f(31,4958,194,2,'kyo.bench.PingPongBench$$anon$5')
f(23,5152,145,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(24,5152,145,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(25,5152,145,1,'kyo/concurrent/scheduler/Queue.offer')
f(26,5152,145,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(27,5152,145,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(28,5152,145,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(29,5152,145,2,'kyo.concurrent.scheduler.Queue$$Lambda$54+0x0000000800d4a680')
f(12,5297,67,1,'kyo/concurrent/queues$$anon$12.poll')
f(13,5297,67,1,'scala/Option$.apply')
f(14,5297,67,2,'scala.Some')
f(9,5364,167,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,5364,167,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,5364,167,1,'kyo/bench/PingPongBench$$Lambda$67.0x0000000800d54b98.apply')
f(12,5364,167,1,'kyo/bench/PingPongBench.$anonfun$6')
f(13,5364,167,1,'kyo/concurrent/channels$Channels$$anon$14.offer')
f(14,5364,167,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$_$transformLoop$9')
f(15,5364,167,1,'kyo/concurrent/channels$Channels$$anon$14$$Lambda$75.0x0000000800d567f0.apply')
f(16,5364,167,1,'kyo/concurrent/channels$Channels$$anon$14.$anonfun$10')
f(17,5364,167,2,'kyo.concurrent.channels$$anon$17')
f(9,5531,466,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,5531,202,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,5531,202,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,5531,202,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,5531,202,2,'kyo.concurrent.scheduler.IOTask$$Lambda$62+0x0000000800d45000')
f(10,5733,264,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,5733,264,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(9,5997,568,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,5997,265,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,5997,265,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,5997,265,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,5997,265,2,'kyo.concurrent.scheduler.IOTask$$Lambda$63+0x0000000800d45408')
f(10,6262,303,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,6262,303,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(9,6565,1250,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,6565,1250,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,6565,1250,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,6565,1250,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,6565,1250,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,6565,1250,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,6565,1250,1,'scala/runtime/function/JProcedure1.apply')
f(16,6565,1250,1,'scala/run
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