Skip to content

Instantly share code, notes, and snippets.

@fwbrasil
Created June 10, 2023 19:27
Show Gist options
  • Save fwbrasil/c26ccc1b3224cbfdbcac7670312e14f3 to your computer and use it in GitHub Desktop.
Save fwbrasil/c26ccc1b3224cbfdbcac7670312e14f3 to your computer and use it in GitHub Desktop.
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 400px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(25);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,45,3,'all')
f(1,0,45,1,'java/lang/Thread.run')
f(2,0,45,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,45,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,39,1,'java/util/concurrent/FutureTask.run')
f(5,0,39,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,39,1,'java/util/concurrent/FutureTask.run')
f(7,0,39,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,39,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,39,1,'java/lang/reflect/Method.invoke')
f(10,0,39,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,39,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,39,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,39,1,'kyo/bench/jmh_generated/BroadFlatMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,39,1,'kyo/bench/jmh_generated/BroadFlatMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,39,1,'kyo/bench/Bench.forkKyo')
f(16,0,18,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,0,18,2,'kyo.bench.Bench$$anon$1')
f(16,18,19,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,1,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,20,1,2,'kyo.concurrent.scheduler.IOTask')
f(17,21,16,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,21,16,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,21,16,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,21,16,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,5,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,34,3,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,34,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,34,3,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,37,2,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,37,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,37,1,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,38,1,1,'kyo/locals$Locals$.save')
f(18,38,1,2,'kyo.locals$Locals$$anon$3')
f(4,39,6,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,39,6,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,39,6,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,39,6,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,39,6,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,39,6,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,39,6,1,'scala/runtime/ObjectRef.create')
f(11,39,6,2,'scala.runtime.ObjectRef')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 688px}
</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(43);
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,195,3,'all')
f(1,0,195,1,'java/lang/Thread.run')
f(2,0,195,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,195,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,63,1,'java/util/concurrent/FutureTask.run')
f(5,0,63,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,63,1,'java/util/concurrent/FutureTask.run')
f(7,0,63,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,63,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,63,1,'java/lang/reflect/Method.invoke')
f(10,0,63,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,63,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,63,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,63,1,'kyo/bench/jmh_generated/BroadFlatMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,63,1,'kyo/bench/jmh_generated/BroadFlatMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,63,1,'kyo/bench/Bench.forkKyo')
f(16,0,63,1,'kyo/bench/Bench.runLoop$2')
f(17,0,33,1,'kyo/bench/Bench$$anon$1.apply')
f(18,0,33,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,0,33,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,0,31,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(21,0,31,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,0,31,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,0,31,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,0,31,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,0,31,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,0,31,1,'jdk/internal/misc/Unsafe.unpark')
f(27,0,4,3,'Unsafe_Unpark')
f(28,1,1,4,'ThreadsListHandle::cv_internal_thread_to_JavaThread(_jobject*, JavaThread**, oopDesc**)')
f(28,2,1,3,'pthread_mutex_lock')
f(28,3,1,3,'pthread_mutex_unlock')
f(27,4,27,3,'pthread_cond_signal')
f(28,5,26,5,'entry_SYSCALL_64_after_hwframe')
f(29,5,26,5,'do_syscall_64')
f(30,5,26,5,'__x64_sys_futex')
f(31,5,26,5,'do_futex')
f(32,6,25,5,'futex_wake')
f(33,7,24,5,'wake_up_q')
f(34,7,24,5,'_raw_spin_unlock_irqrestore')
f(20,31,2,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',2,0,0)
f(21,31,2,2,'kyo/core$internal$KyoCont.<init>',2,0,0)
f(22,31,2,2,'kyo/ios$KyoIO.value',2,0,0)
f(17,33,30,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply',2,0,0)
f(18,34,29,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply',1,0,0)
f(19,34,29,1,'kyo/concurrent/scheduler/IOPromise.block',1,0,0)
f(20,34,29,1,'kyo/concurrent/scheduler/IOPromise.loop$4',1,0,0)
f(21,35,28,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,35,28,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,35,27,1,'java/util/concurrent/locks/LockSupport.park')
f(24,35,27,1,'jdk/internal/misc/Unsafe.park')
f(25,35,2,3,'Unsafe_Park')
f(26,35,1,4,'Parker::park(bool, long)')
f(27,35,1,4,'AccessInternal::PostRuntimeDispatch<G1BarrierSet::AccessBarrier<544868ul, G1BarrierSet>, (AccessInternal::BarrierType)2, 544868ul>::oop_access_barrier(void*)')
f(26,36,1,3,'pthread_cond_wait')
f(25,37,25,3,'[unknown]')
f(26,37,24,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,38,23,5,'entry_SYSCALL_64_after_hwframe')
f(28,38,23,5,'do_syscall_64')
f(29,38,22,5,'__x64_sys_futex')
f(30,38,22,5,'do_futex')
f(31,38,22,5,'futex_wait')
f(32,41,1,5,'__get_user_nocheck_4')
f(32,42,1,5,'_raw_spin_lock')
f(32,43,17,5,'futex_wait_queue_me')
f(33,43,2,5,'__raw_callee_save___pv_queued_spin_unlock')
f(33,45,15,5,'schedule')
f(34,45,15,5,'__schedule')
f(35,45,15,5,'finish_task_switch.isra.0')
f(29,60,1,5,'syscall_exit_to_user_mode')
f(30,60,1,5,'exit_to_user_mode_prepare')
f(31,60,1,5,'exit_to_user_mode_loop')
f(32,60,1,5,'__rseq_handle_notify_resume')
f(26,61,1,3,'pthread_cond_wait')
f(23,62,1,2,'kyo/concurrent/scheduler/IOPromise$$anon$1.tryAcquireShared',1,0,0)
f(4,63,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,63,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,63,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,63,1,1,'java/lang/Thread.sleep')
f(8,63,1,3,'[unknown]')
f(9,63,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,63,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,63,1,5,'do_syscall_64')
f(12,63,1,5,'__x64_sys_futex')
f(13,63,1,5,'do_futex')
f(14,63,1,5,'futex_wait')
f(15,63,1,5,'futex_wait_queue_me')
f(16,63,1,5,'schedule')
f(17,63,1,5,'__schedule')
f(18,63,1,5,'finish_task_switch.isra.0')
f(4,64,131,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,64,131,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,64,131,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,64,102,1,'kyo/concurrent/scheduler/IOTask.run',1,0,0)
f(8,64,102,1,'kyo/concurrent/scheduler/IOTask.eval',1,0,0)
f(9,64,78,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,64,78,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,64,78,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e9f8.apply')
f(12,64,78,1,'kyo/bench/Bench.$anonfun$1')
f(13,64,78,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,64,78,1,'kyo/bench/BroadFlatMapBench.kyoBench')
f(15,64,78,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(16,64,33,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(17,64,33,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(18,64,33,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(19,64,33,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,64,9,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(21,64,9,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(22,64,9,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(23,64,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,64,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,64,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(26,64,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,64,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,64,3,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(29,66,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,66,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,66,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,66,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,66,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,67,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,67,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,67,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(27,67,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,67,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,67,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,67,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,67,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,67,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,67,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(34,67,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,67,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,67,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,68,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,68,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(27,68,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(26,69,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,69,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,69,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(29,69,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,69,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,69,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,70,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,70,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,70,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,70,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,70,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,70,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,70,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,70,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,70,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,71,1,2,'scala/math/BigInt$.apply',1,0,0)
f(28,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,72,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,72,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(32,72,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,72,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,72,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(36,72,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,72,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,73,24,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,73,12,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(22,73,12,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(23,73,12,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,73,12,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,73,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,73,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(27,73,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,73,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,73,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,73,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,73,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,73,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,74,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,74,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,74,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,74,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(37,74,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,74,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,74,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,74,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,74,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,75,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,75,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(38,75,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(29,76,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,76,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,76,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(32,76,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(31,77,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,77,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,77,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,77,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(35,77,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,77,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,77,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,77,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(39,77,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,77,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,78,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,78,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,78,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(28,78,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,78,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,78,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,78,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(32,78,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,78,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$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(37,78,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,79,1,2,'scala/math/BigInt$.apply',1,0,0)
f(26,80,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,80,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,80,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(29,80,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,80,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,80,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,80,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(33,80,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,80,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,81,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,81,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,81,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,82,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,82,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,82,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,82,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,82,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,82,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,82,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(34,82,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,82,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,82,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,82,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(36,83,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,84,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,84,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,84,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,84,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,84,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,84,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,84,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(35,84,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,84,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,84,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,84,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(39,84,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,84,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,84,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,85,12,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,85,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,85,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(24,85,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,85,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,85,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,85,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(28,85,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,85,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,85,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,85,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,86,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,86,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,86,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(29,86,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,86,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,86,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,86,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,86,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(34,86,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,86,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,86,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,87,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,87,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,87,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,87,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,87,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,87,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,87,1,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$56.0x0000000800d45000.apply')
f(36,87,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,87,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,88,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,88,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,88,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,88,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,88,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,88,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,88,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,88,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,88,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,88,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(38,88,1,2,'scala/math/BigInt.<init>',1,0,0)
f(29,89,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,89,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,89,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,89,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,89,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,89,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,89,1,2,'scala/math/BigInt.<init>',1,0,0)
f(22,90,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,90,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,90,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(25,90,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,90,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,90,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,90,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(29,90,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,90,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,90,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,90,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(33,90,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,90,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,91,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,91,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,91,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,92,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,92,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(29,92,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(23,93,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,93,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,93,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(26,93,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,93,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,93,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,93,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,93,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,93,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,93,1,2,'scala/math/BigInt$.apply',1,0,0)
f(24,94,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,94,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,94,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(27,94,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,94,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,94,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,94,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,94,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,94,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,94,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,94,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(33,95,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,95,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(35,95,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(36,95,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(25,96,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,96,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,96,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,96,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,96,1,2,'scala/math/BigInt$.apply',1,0,0)
f(16,97,45,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(17,97,16,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(18,97,16,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(19,97,16,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(20,97,16,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,97,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(22,97,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(23,97,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,97,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,97,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,97,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(27,97,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,97,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,97,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,97,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,97,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,98,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,98,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(34,98,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,98,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,98,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,98,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,98,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(39,98,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,98,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,98,1,2,'scala/math/BigInt$.apply',1,0,0)
f(42,98,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,99,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,99,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,99,1,2,'scala/math/BigInt.<init>',1,0,0)
f(25,100,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,100,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,100,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(28,100,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,100,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,100,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,100,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(32,100,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,100,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,100,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,100,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,100,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(37,100,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,100,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,101,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,101,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(32,101,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(33,101,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(26,102,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,102,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,102,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,102,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,102,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,102,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,102,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,102,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(34,102,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,102,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,102,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,103,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,103,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,103,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,103,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,103,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,103,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,103,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(35,103,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(21,104,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,104,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,104,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(24,104,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,104,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,104,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(27,104,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',2,0,0)
f(28,105,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(29,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,106,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,106,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(34,106,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,106,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,106,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,107,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,107,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,107,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,107,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,107,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,107,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,107,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,107,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(34,107,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,107,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,107,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,107,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,107,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(39,107,1,2,'scala/math/BigInt.<init>',1,0,0)
f(22,108,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,108,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,108,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(25,108,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,108,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,108,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,108,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,108,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,108,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,108,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,108,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,108,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(34,108,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,108,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,108,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,108,1,2,'scala/math/BigInt$.apply',1,0,0)
f(28,109,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,109,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,109,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,109,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(23,110,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,110,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,110,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(26,110,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,110,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,110,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,110,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,110,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,110,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(32,110,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(29,111,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,111,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,112,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,112,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(17,113,29,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(18,113,11,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(19,113,11,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(20,113,11,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(21,113,11,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,113,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,113,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(24,113,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,113,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,113,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(27,113,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(28,113,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(29,114,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,115,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,115,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,115,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,115,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,115,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,115,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,115,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,115,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,115,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(35,115,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(22,116,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,116,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,116,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,116,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(26,116,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,116,3,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(32,116,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,116,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,116,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,117,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,117,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,117,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,117,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,117,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(33,117,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,117,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,117,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,117,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,117,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(38,117,1,2,'scala/math/BigInt.<init>',1,0,0)
f(29,118,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,118,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,119,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,119,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,119,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(27,119,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,119,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,119,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,119,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,119,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(25,120,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,120,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,120,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(28,120,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,120,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,120,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(35,120,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,120,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,120,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,121,3,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(27,122,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,122,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,122,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,122,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(31,122,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,122,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,122,1,2,'scala/math/BigInt$.apply',1,0,0)
f(28,123,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,123,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(18,124,18,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(19,124,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(20,124,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(21,124,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(22,124,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,124,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,124,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(25,124,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,124,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,124,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,124,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(29,124,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,124,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,124,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,124,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(33,124,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,124,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,124,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,124,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,124,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,124,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,125,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,125,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,125,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,125,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,125,1,2,'scala/math/BigInt$.getCached',1,0,0)
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.kyoFib$1')
f(30,126,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,126,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(23,127,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,127,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,127,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(26,127,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,127,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,127,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,127,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,127,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,127,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,127,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,127,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,127,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,128,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,128,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,128,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(27,128,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,128,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,128,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,128,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,128,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(32,128,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,128,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,128,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,128,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,128,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,128,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,129,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,129,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,129,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(19,130,12,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,130,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(21,130,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(22,131,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(23,131,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,131,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,131,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(26,131,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,131,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,131,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,131,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,131,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,131,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,131,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,131,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,131,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,131,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,131,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,131,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(38,131,1,2,'scala/math/BigInt.<init>',1,0,0)
f(32,132,1,2,'scala/math/BigInt$.apply',1,0,0)
f(24,133,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,133,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,133,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(27,133,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,133,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,133,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,133,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,133,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(30,134,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,134,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,134,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,134,2,2,'scala/math/BigInt$.apply',2,0,0)
f(34,134,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(25,136,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,136,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,136,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(28,136,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,136,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,136,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,136,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(32,136,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,136,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,137,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,137,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(22,137,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(23,137,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,137,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,137,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,137,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(27,137,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,137,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,137,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,137,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,137,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,137,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,137,1,2,'scala/math/BigInt.<init>',1,0,0)
f(21,138,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,138,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,138,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(24,138,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,138,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,138,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,138,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(28,138,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,138,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,138,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,138,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,138,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,138,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,138,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(22,139,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,139,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,139,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(25,139,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,139,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,139,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,139,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,139,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(30,139,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,139,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,139,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,139,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,139,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply')
f(35,139,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,139,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,139,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,139,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(23,140,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,140,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,140,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,140,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,140,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(28,140,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$56.0x0000000800d45000.apply',1,0,0)
f(29,140,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(27,141,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,141,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,141,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(9,142,24,1,'kyo/concurrent/scheduler/IOTask.loop$8',1,0,0)
f(10,142,24,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',1,0,0)
f(11,142,24,1,'kyo/concurrent/scheduler/IOPromise.complete',1,0,0)
f(12,142,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(13,142,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(14,142,1,2,'java/lang/invoke/VarForm.getMemberName',1,0,0)
f(15,142,1,2,'java/lang/invoke/VarForm.getMemberNameOrNull',1,0,0)
f(12,143,23,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,143,23,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,143,23,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,143,23,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,143,23,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,143,23,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,143,23,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,143,23,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,143,23,1,'jdk/internal/misc/Unsafe.unpark')
f(21,144,1,3,'Unsafe_Unpark')
f(22,144,1,4,'java_lang_Thread::thread(oopDesc*)')
f(21,145,21,3,'pthread_cond_signal')
f(22,145,21,5,'entry_SYSCALL_64_after_hwframe')
f(23,145,21,5,'do_syscall_64')
f(24,145,21,5,'__x64_sys_futex')
f(25,145,21,5,'do_futex')
f(26,145,21,5,'futex_wake')
f(27,147,19,5,'wake_up_q')
f(28,147,19,5,'_raw_spin_unlock_irqrestore')
f(7,166,1,2,'kyo/concurrent/scheduler/Queue.poll',1,0,0)
f(8,166,1,2,'kyo/concurrent/scheduler/Queue.modify',1,0,0)
f(9,166,1,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47148.apply',1,0,0)
f(10,166,1,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',1,0,0)
f(11,166,1,2,'scala/collection/mutable/PriorityQueue.dequeue',1,0,0)
f(7,167,28,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,167,28,1,'kyo/concurrent/scheduler/Worker.park')
f(9,167,28,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,167,28,1,'jdk/internal/misc/Unsafe.park')
f(11,168,4,3,'Unsafe_Park')
f(12,168,1,4,'JavaThread::is_interrupted(bool)')
f(12,169,2,4,'Parker::park(bool, long)')
f(12,171,1,3,'clock_gettime')
f(13,171,1,3,'[vdso]')
f(11,172,23,3,'[unknown]')
f(12,172,21,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,175,18,5,'entry_SYSCALL_64_after_hwframe')
f(14,175,18,5,'do_syscall_64')
f(15,175,17,5,'__x64_sys_futex')
f(16,176,13,5,'do_futex')
f(17,176,13,5,'futex_wait')
f(18,176,12,5,'futex_wait_queue_me')
f(19,176,3,5,'hrtimer_sleeper_start_expires')
f(20,176,2,5,'_raw_spin_unlock_irqrestore')
f(20,178,1,5,'hrtimer_start_range_ns')
f(19,179,9,5,'schedule')
f(20,179,9,5,'__schedule')
f(21,179,9,5,'finish_task_switch.isra.0')
f(18,188,1,5,'plist_add')
f(16,189,3,5,'get_timespec64')
f(17,189,2,5,'_copy_from_user')
f(17,191,1,5,'copy_user_enhanced_fast_string')
f(15,192,1,5,'syscall_exit_to_user_mode')
f(16,192,1,5,'exit_to_user_mode_prepare')
f(17,192,1,5,'exit_to_user_mode_loop')
f(18,192,1,5,'__rseq_handle_notify_resume')
f(19,192,1,5,'__put_user_nocheck_8')
f(12,193,1,3,'pthread_cond_timedwait')
f(12,194,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: 832px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(52);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,299,3,'all')
f(1,0,11,3,'[unknown_Java]')
f(2,0,11,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(1,11,288,1,'java/lang/Thread.run')
f(2,11,288,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,11,288,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,11,288,1,'java/util/concurrent/FutureTask.run')
f(5,11,288,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,11,288,1,'java/util/concurrent/FutureTask.run')
f(7,11,288,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,11,288,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,11,288,1,'java/lang/reflect/Method.invoke')
f(10,11,288,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,11,288,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,11,288,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,11,288,1,'kyo/bench/jmh_generated/BroadFlatMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,11,288,1,'kyo/bench/jmh_generated/BroadFlatMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,11,288,1,'kyo/bench/Bench.syncKyo')
f(16,11,288,1,'kyo/bench/BroadFlatMapBench.kyoBench')
f(17,11,288,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(18,11,102,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(19,11,102,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(20,11,102,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(21,11,102,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,11,33,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,11,33,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(24,11,33,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,11,33,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,11,11,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(27,11,11,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(28,11,11,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(29,12,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,12,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,12,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,12,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,12,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,12,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,12,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,12,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,12,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,12,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,12,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(40,12,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,13,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,13,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,13,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,13,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,13,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,13,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(40,13,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,14,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,14,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,15,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,15,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,15,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,15,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,15,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,15,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,15,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,15,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,15,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,15,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,15,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(41,15,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(42,15,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(43,15,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(44,15,1,2,'scala/math/BigInt$.apply',1,0,0)
f(45,15,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(40,16,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,16,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,16,1,2,'scala/math/BigInt$.apply',1,0,0)
f(43,16,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(44,16,1,2,'scala/math/BigInt.<init>',1,0,0)
f(40,17,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,17,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,18,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,18,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,18,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,18,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,18,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,19,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,19,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,19,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,19,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,19,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,19,1,2,'scala/math/BigInt.<init>',1,0,0)
f(31,20,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,20,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,20,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,20,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,20,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,20,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,21,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,21,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,21,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,22,21,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,23,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,23,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,23,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,23,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,23,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,23,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,23,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,23,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,23,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,23,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,23,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,23,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,23,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,23,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(41,23,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(31,24,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,24,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,24,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,24,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,24,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,24,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,24,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,24,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(36,25,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
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,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(40,25,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(41,25,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(32,26,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,26,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,26,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,26,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,26,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,26,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,26,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(39,26,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(40,26,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(41,26,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,27,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,27,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,28,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,28,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,28,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,28,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,29,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,30,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,2,'scala/math/BigInt$.apply',1,0,0)
f(39,30,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,31,12,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,31,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,31,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,31,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,31,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,31,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,31,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,31,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,31,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,31,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,31,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,31,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,31,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,31,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,32,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,32,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,32,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,32,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,32,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,32,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,32,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(40,32,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(28,33,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,33,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,33,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,33,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,33,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,33,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,33,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,33,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$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,'scala/math/BigInt$.apply',1,0,0)
f(40,33,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,33,1,2,'scala/math/BigInt.<init>',1,0,0)
f(33,34,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,34,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,34,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,34,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,34,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,34,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(29,35,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,35,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,35,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,36,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,36,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,36,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,36,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,36,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,36,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,36,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,36,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,37,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,37,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,37,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,37,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,37,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,37,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,38,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,38,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,38,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,38,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,38,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,38,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,38,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,39,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,39,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(37,39,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(38,39,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(36,40,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,40,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,41,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,41,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,41,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,41,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,42,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,42,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(26,43,1,2,'scala/math/BigInt$.apply',1,0,0)
f(27,43,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(22,44,69,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,44,28,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,44,28,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(25,44,28,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,44,28,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,44,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,44,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,44,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,44,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,44,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,44,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,44,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,44,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,44,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,44,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,44,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(36,45,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,45,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,45,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(39,45,1,2,'scala/math/BigInt.<init>',1,0,0)
f(31,46,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,46,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,46,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,46,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,46,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,46,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,46,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,46,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,46,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,46,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,46,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,46,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,47,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,47,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,47,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,47,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,47,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,47,1,2,'scala/math/BigInt$.apply',1,0,0)
f(42,47,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,48,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,48,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,48,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,48,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,48,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,48,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,48,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,48,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,49,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,49,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,49,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,50,21,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,50,10,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(29,50,10,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(30,52,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,52,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,52,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,52,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,52,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,52,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,52,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',3,0,0)
f(37,52,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',3,0,0)
f(38,54,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(36,55,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,55,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,55,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,55,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,55,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,55,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,55,1,2,'scala/math/BigInt$.apply',1,0,0)
f(43,55,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(44,55,1,2,'scala/math/BigInt.<init>',1,0,0)
f(37,56,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,56,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,56,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,56,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,56,1,2,'scala/math/BigInt.<init>',1,0,0)
f(32,57,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,57,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,57,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(33,58,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,58,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,58,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,58,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,58,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,58,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,58,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,59,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,59,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,60,11,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,60,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,60,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,60,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,60,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,60,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,60,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,60,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,60,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,61,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,62,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,62,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,62,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,62,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,62,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,62,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,62,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,63,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,63,1,2,'scala/math/BigInt$.getCached',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',2,0,0)
f(31,64,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(32,65,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(30,66,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,66,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,66,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,66,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,66,2,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$39.0x0000000800ca1228.apply')
f(37,66,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,66,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,66,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,66,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,67,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,67,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,68,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,68,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,68,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,68,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,68,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,68,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,68,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,68,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,69,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,69,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,69,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,69,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,69,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(41,69,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(42,69,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(43,69,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(44,69,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(45,69,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(33,70,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,70,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,70,1,2,'scala/math/BigInt.<init>',1,0,0)
f(27,71,1,2,'scala/math/BigInt$.apply',1,0,0)
f(23,72,41,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,72,13,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,72,13,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(26,72,13,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,72,13,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,72,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,72,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,72,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,72,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,72,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,72,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,72,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,72,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,72,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,72,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,72,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(36,73,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,73,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,73,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,73,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,73,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,73,1,2,'scala/math/BigInt.<init>',1,0,0)
f(32,74,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,74,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,74,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,74,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(33,75,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,75,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,75,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,75,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,75,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(35,76,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,76,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,76,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,77,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,77,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,77,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,77,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,77,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,77,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,77,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,77,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,77,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,77,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,77,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,77,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,77,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,77,1,2,'scala/math/BigInt.<init>',1,0,0)
f(33,78,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,78,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,78,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,78,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,79,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,79,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,79,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,79,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,79,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,79,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,80,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,80,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,80,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,80,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$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,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,80,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,80,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,80,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(40,80,1,2,'scala/math/BigInt.<init>',1,0,0)
f(30,81,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,81,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,81,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,81,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,81,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,81,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,81,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,81,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,81,2,2,'scala/math/BigInt$.apply',2,0,0)
f(39,82,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(40,82,1,2,'scala/math/BigInt.<init>',1,0,0)
f(29,83,2,2,'scala/math/BigInt$.apply',2,0,0)
f(30,83,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(24,85,28,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,85,11,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,85,11,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,85,11,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,85,11,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,85,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,85,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,85,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,85,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,85,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,85,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,86,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,86,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,86,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,86,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,86,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,86,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,86,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,86,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(42,87,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,88,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,88,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,88,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,88,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,88,1,2,'scala/math/BigInt.<init>',1,0,0)
f(33,89,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,89,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(35,89,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(36,89,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(34,90,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,90,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,90,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,90,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,90,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,90,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,90,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,91,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,91,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,91,1,2,'scala/math/BigInt.<init>',1,0,0)
f(29,92,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,92,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,92,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,92,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,92,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,92,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,92,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,92,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,92,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,92,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,92,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,92,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,93,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,94,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,94,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,94,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,94,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,94,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,95,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,95,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,95,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(25,96,17,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,96,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,96,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,96,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,96,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,96,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,96,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,96,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(33,97,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,97,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,97,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,98,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,98,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,99,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,100,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,100,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,100,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,100,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,100,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,100,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,101,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,101,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,102,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,102,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,102,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,102,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,102,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,102,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,102,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,102,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,102,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,103,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,103,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,103,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,103,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(36,103,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(37,103,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(26,104,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,104,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,104,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,104,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,104,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,105,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,105,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,105,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,105,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,105,1,2,'scala/math/BigInt.<init>',1,0,0)
f(27,106,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,106,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,106,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,106,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,106,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,106,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,106,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,106,1,2,'scala/math/BigInt.<init>',1,0,0)
f(28,107,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,107,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(30,107,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(31,107,3,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(32,108,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,108,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,108,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,108,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,108,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(37,108,1,2,'scala/math/BigInt.<init>',1,0,0)
f(33,109,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,110,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,110,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,110,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(32,110,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(28,111,2,2,'scala/math/BigInt$.apply',2,0,0)
f(29,111,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(18,113,186,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(19,114,71,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(20,114,71,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(21,114,71,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(22,114,71,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,114,18,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,114,18,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(25,114,18,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,114,18,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,114,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,114,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,114,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,114,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,114,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,114,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,114,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,114,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,115,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,115,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,115,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,115,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,115,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,115,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,115,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,115,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,115,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(44,115,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(45,115,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(46,115,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(47,115,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(48,115,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(49,115,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(50,115,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(51,115,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$1',1,0,0)
f(35,116,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,116,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,116,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,116,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,117,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,117,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,118,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,118,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,119,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,119,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,119,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,119,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(39,119,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,120,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,120,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,120,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,120,1,2,'scala/math/BigInt.<init>',1,0,0)
f(27,121,11,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,121,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,121,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,121,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,121,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,122,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,122,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,122,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,122,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,122,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,122,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,122,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(32,123,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,123,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,123,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,123,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,123,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,123,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,123,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,124,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,124,2,2,'scala/math/BigInt$.apply',2,0,0)
f(37,124,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(38,125,1,2,'scala/math/BigInt.<init>',1,0,0)
f(28,126,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,126,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,126,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,126,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,126,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,126,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,126,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,126,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,126,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,126,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(38,127,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,127,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,127,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,127,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,127,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(43,127,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,128,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,128,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,128,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,128,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,128,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,128,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,128,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,128,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,128,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,128,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,128,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,128,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,128,1,2,'scala/math/BigInt.<init>',1,0,0)
f(30,129,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,129,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,129,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,129,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,130,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,130,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,130,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,130,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,130,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,130,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,130,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,130,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(40,130,1,2,'scala/math/BigInt.<init>',1,0,0)
f(33,131,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,131,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,131,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,131,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,131,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,131,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,131,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,132,53,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,132,26,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,132,26,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(26,132,26,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,132,26,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,132,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(29,132,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(30,132,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(31,133,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,133,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,133,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,133,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,133,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,133,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,133,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(38,133,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(39,133,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(37,134,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,134,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,135,2,2,'scala/math/BigInt$.apply',2,0,0)
f(38,136,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,137,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,137,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,137,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,137,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,137,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,137,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(38,137,1,2,'scala/math/BigInt.<init>',1,0,0)
f(28,138,20,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,139,9,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,139,9,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,139,9,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,139,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,139,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,139,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,139,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(36,140,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,141,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(38,141,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(39,141,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(40,141,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,141,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(42,141,1,2,'scala/math/BigInt$.apply',1,0,0)
f(43,141,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(44,141,1,2,'scala/math/BigInt.<init>',1,0,0)
f(37,142,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,142,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,143,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,143,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,143,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,143,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,143,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,143,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,144,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,144,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,144,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,144,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,144,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(38,145,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,145,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(40,145,1,2,'scala/math/BigInt.<init>',1,0,0)
f(36,146,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,146,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,147,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,147,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,148,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,148,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,148,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,148,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,148,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,148,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,148,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,148,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,148,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,148,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,148,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,148,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(34,149,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,149,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,149,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,149,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(34,150,1,2,'scala/math/BigInt$.apply',1,0,0)
f(30,151,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,151,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,151,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,151,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,151,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(35,152,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,152,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,152,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,152,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,152,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,152,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,153,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,153,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,153,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,153,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(33,154,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,154,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,155,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,155,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,156,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,157,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,157,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(24,158,27,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,158,10,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,158,10,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,158,10,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,158,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,158,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,158,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,158,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,158,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,158,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,158,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,158,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,158,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,158,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,158,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,158,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(40,158,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(41,158,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(33,159,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,160,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,160,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,161,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(37,161,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(38,161,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(36,162,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,162,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,163,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,163,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,163,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,164,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,164,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,164,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,164,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,164,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,164,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,164,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,164,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,164,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,164,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,164,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,165,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,165,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,165,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,165,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,165,2,2,'scala/math/BigInt$.apply',2,0,0)
f(39,165,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(30,167,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,167,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,167,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,167,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,167,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,167,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,167,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(25,168,17,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,168,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,168,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,168,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,168,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,168,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,168,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,168,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,168,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,168,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,168,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,168,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,168,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,168,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,168,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(40,168,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(41,168,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(42,168,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,169,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,169,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,169,1,2,'scala/math/BigInt$.apply',1,0,0)
f(37,169,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,170,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,170,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(32,170,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(33,170,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(31,171,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,171,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,171,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,171,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,171,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,172,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,172,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,173,11,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,173,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(28,173,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(29,174,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(30,175,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,175,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,175,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,175,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,175,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,175,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,175,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,176,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,176,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,176,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,176,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,176,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,176,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,176,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,176,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,176,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,176,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,176,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,176,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,177,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,177,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,178,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,178,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,178,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,178,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,178,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,179,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,179,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,179,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,179,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,179,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,179,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,180,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,181,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,181,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,181,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(32,181,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(33,182,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(28,183,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,183,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,184,1,2,'scala/math/BigInt$.apply',1,0,0)
f(27,184,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(19,185,114,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(20,185,46,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(21,185,46,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(22,185,46,1,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(23,186,45,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,186,21,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,186,21,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(26,186,21,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,186,21,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,186,10,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,186,10,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,186,10,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,186,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,186,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,186,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,186,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,186,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,186,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(37,186,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(38,186,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(36,187,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,187,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(38,187,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(39,187,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',1,0,0)
f(37,188,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,188,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(39,188,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,189,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,189,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,190,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,190,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,190,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,190,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,190,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,192,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,192,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,192,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,192,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,192,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,192,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,192,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,193,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,193,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,193,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,193,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,193,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,193,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,194,2,2,'scala/math/BigInt$.apply',2,0,0)
f(35,194,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(36,195,1,2,'scala/math/BigInt.<init>',1,0,0)
f(28,196,11,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,196,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,196,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,196,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,196,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,196,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,196,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,197,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,197,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,197,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,197,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(39,197,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(40,197,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(41,197,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,198,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,198,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,198,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,198,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,198,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,198,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,198,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,198,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(41,198,1,2,'scala/math/BigInt.<init>',1,0,0)
f(34,199,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,199,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,199,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,199,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,199,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,199,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,199,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(41,199,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(42,199,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(43,199,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(44,199,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$1',1,0,0)
f(29,200,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,200,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(31,200,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(32,200,3,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(33,201,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,201,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,201,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,201,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,201,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,201,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,201,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,202,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,202,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(37,202,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(38,202,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(39,202,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,202,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,203,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,204,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,204,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,204,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,204,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,204,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,205,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,205,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,205,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,205,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,205,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,205,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,205,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,206,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,206,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,206,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,206,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,206,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,206,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,207,24,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,207,10,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,207,10,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,207,10,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,207,10,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,207,5,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,207,5,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,207,5,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,207,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,207,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,207,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,207,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,207,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,207,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,207,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,208,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,208,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,209,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,209,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,209,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,209,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,209,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,209,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,209,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,210,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,211,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,211,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,211,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,211,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,212,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,212,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,212,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,212,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,212,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,212,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,212,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,212,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,212,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,212,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,212,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,213,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,213,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,213,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,213,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,213,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,213,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,214,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,214,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(37,214,1,2,'scala/math/BigInt.<init>',1,0,0)
f(34,215,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,216,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,216,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(25,217,14,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,217,9,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,217,9,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,217,9,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,217,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,217,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,217,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,217,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,217,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,218,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,218,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,218,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,219,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,219,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,219,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,219,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(39,219,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca4000.newInvokeSpecial',1,0,0)
f(40,219,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.<init>',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(30,221,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,222,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,222,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,222,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,222,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,222,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,222,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,222,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,223,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,223,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,223,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(34,223,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(32,224,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,224,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,224,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(35,224,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
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(26,226,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,226,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,226,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,226,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,226,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,226,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,226,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,226,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,226,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,226,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,226,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,226,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,226,1,2,'scala/math/BigInt$.apply',1,0,0)
f(28,227,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,227,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,227,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,227,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,227,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,227,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,227,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,228,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,228,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,228,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,228,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,228,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,228,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,228,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,229,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,229,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,229,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,229,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,229,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,229,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,230,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,230,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(20,231,68,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(21,231,17,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(22,231,17,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(23,231,17,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(24,231,17,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,231,8,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,231,8,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,231,8,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,231,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,231,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,231,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,231,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,231,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,231,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,231,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,231,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,231,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,231,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,232,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,232,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,232,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,232,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,232,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,232,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(29,234,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,234,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,234,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,234,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,234,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,234,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,234,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,234,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,234,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,234,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,234,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,235,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,235,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,235,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,235,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,235,1,2,'scala/math/BigInt$.apply',1,0,0)
f(39,235,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,236,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,236,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,236,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,236,2,2,'scala/math/BigInt$.apply',2,0,0)
f(34,236,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(35,237,1,2,'scala/math/BigInt.<init>',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,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,239,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,239,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,239,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,239,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,239,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,239,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,239,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,239,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,239,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,239,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,239,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,239,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,239,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,239,1,2,'scala/math/BigInt$.apply',1,0,0)
f(40,239,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(30,240,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,240,1,2,'scala/math/BigInt$.apply',1,0,0)
f(32,240,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(26,241,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,241,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(28,241,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(29,242,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,242,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,242,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(32,242,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(33,242,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(34,242,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,242,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(36,242,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(37,242,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(31,243,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,243,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,243,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,243,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,243,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,244,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,244,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(34,244,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(27,245,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,245,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,245,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,245,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,245,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,245,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,245,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,245,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,245,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,245,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,245,1,2,'scala/math/BigInt$.apply',1,0,0)
f(38,245,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,246,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,246,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,246,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,246,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,246,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,246,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,246,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,246,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,246,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,246,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,247,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,247,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(21,248,51,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(22,248,16,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(23,248,16,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(24,248,16,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(25,248,16,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,248,7,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(27,248,7,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(28,248,7,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,248,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,248,4,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(31,248,4,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(32,249,3,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(33,250,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,250,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,250,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,250,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,250,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,251,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,252,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,252,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,252,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,252,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,252,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,252,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(36,252,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,253,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,254,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,254,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,254,1,2,'scala/math/BigInt.<init>',1,0,0)
f(26,255,9,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,255,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(28,255,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(29,256,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,256,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,256,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,256,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,257,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,257,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,258,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,258,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,258,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,258,4,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,258,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,258,4,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,258,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,258,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,258,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,258,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,258,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,258,2,2,'scala/math/BigInt$.apply',2,0,0)
f(39,258,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(40,259,1,2,'scala/math/BigInt.<init>',1,0,0)
f(33,260,2,2,'scala/math/BigInt$.apply',2,0,0)
f(34,260,2,2,'scala/math/BigInt$.getCached',2,0,0)
f(28,262,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,262,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,262,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,262,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,263,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,263,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(22,264,35,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(23,266,12,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(24,266,12,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(25,266,12,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(26,266,12,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,266,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(28,266,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(29,267,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,267,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,267,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,267,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,267,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,267,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,267,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,267,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(37,267,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(38,267,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(33,268,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,268,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,268,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,268,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(31,269,1,2,'scala/math/BigInt$.apply',1,0,0)
f(27,270,8,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,270,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(29,270,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(30,270,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(31,270,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,270,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,270,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,270,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,270,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,270,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,270,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,270,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,271,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,271,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(33,272,1,2,'scala/math/BigInt$.apply',1,0,0)
f(34,272,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(28,273,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,273,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(30,273,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(31,274,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,274,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,274,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(34,274,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(35,274,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(36,274,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,275,1,2,'scala/math/BigInt$.apply',1,0,0)
f(29,276,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,276,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,276,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,276,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,276,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,276,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,276,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,277,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,277,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(23,278,20,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(24,278,6,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(25,278,6,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(26,278,6,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(27,278,6,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,278,5,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,278,3,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',2,0,0)
f(30,278,3,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',2,0,0)
f(31,279,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(32,280,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,280,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,280,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(35,280,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(36,280,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(37,280,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,281,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,281,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,281,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,281,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,281,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,281,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,282,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,282,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,282,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,282,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,282,1,2,'scala/math/BigInt$.apply',1,0,0)
f(28,283,1,2,'scala/math/BigInt$.apply',1,0,0)
f(24,284,14,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(25,284,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(26,284,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(27,284,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(28,284,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,284,2,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(30,284,2,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(31,284,2,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(32,284,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,284,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,284,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(35,284,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(36,284,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(37,284,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(38,284,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(39,284,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(40,284,1,2,'scala/math/BigInt$.apply',1,0,0)
f(41,284,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(35,285,1,2,'scala/math/BigInt$.apply',1,0,0)
f(36,285,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(29,286,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,286,1,2,'scala/math/BigInt$.apply',1,0,0)
f(31,286,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(25,287,11,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(26,287,4,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(27,287,4,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(28,288,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(29,288,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,288,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(31,288,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(32,288,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(33,288,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,288,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,289,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,289,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,290,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,290,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,290,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(26,291,7,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(27,291,3,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(28,291,3,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(29,291,3,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(30,291,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,291,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(32,291,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(33,291,1,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(31,292,2,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,292,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(33,292,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(34,292,1,2,'scala/math/BigInt$.apply',1,0,0)
f(35,292,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(32,293,1,2,'scala/math/BigInt$.apply',1,0,0)
f(33,293,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(27,294,3,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,294,2,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(29,294,2,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(30,294,2,2,'kyo/bench/BroadFlatMapBench.$anonfun$1',1,0,0)
f(31,295,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(32,295,1,1,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2')
f(33,295,1,1,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply')
f(34,295,1,1,'kyo/bench/BroadFlatMapBench.$anonfun$1')
f(35,295,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(28,296,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(29,296,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(30,296,1,1,'kyo/bench/BroadFlatMapBench.kyoFib$1')
f(31,296,1,2,'kyo/bench/BroadFlatMapBench.kyo$bench$BroadFlatMapBench$$_$transformLoop$2',1,0,0)
f(32,296,1,2,'kyo/bench/BroadFlatMapBench$$Lambda$39.0x0000000800ca1228.apply',1,0,0)
f(27,297,1,2,'scala/math/BigInt$.apply',1,0,0)
f(28,297,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(23,298,1,2,'scala/math/BigInt$.apply',1,0,0)
f(24,298,1,2,'scala/math/BigInt$.getCached',1,0,0)
f(25,298,1,2,'scala/math/BigInt.<init>',1,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 400px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(25);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,8530,3,'all')
f(1,0,8527,1,'java/lang/Thread.run')
f(2,0,8527,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,8527,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,674,1,'java/util/concurrent/FutureTask.run')
f(5,0,674,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,674,1,'java/util/concurrent/FutureTask.run')
f(7,0,674,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,674,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1,2,'java.lang.Object[]')
f(9,1,673,1,'java/lang/reflect/Method.invoke')
f(10,1,673,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,1,673,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,1,673,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,1,673,1,'kyo/bench/jmh_generated/ChainedForkBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,1,673,1,'kyo/bench/jmh_generated/ChainedForkBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,1,673,1,'kyo/bench/Bench.forkKyo')
f(16,1,83,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,1,83,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,1,83,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,1,83,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3f088')
f(16,84,69,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,84,69,2,'kyo.bench.Bench$$anon$1')
f(16,153,376,1,'kyo/bench/Bench.runLoop$2')
f(17,153,161,1,'kyo/bench/Bench$$anon$1.apply')
f(18,153,56,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,153,56,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c83420.apply')
f(20,153,56,1,'kyo/bench/Bench.$anonfun$2')
f(21,153,56,1,'kyo/concurrent/fibers$Fiber.block')
f(22,153,56,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,209,105,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,209,105,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,209,105,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(21,209,105,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,209,92,2,'kyo.concurrent.scheduler.IOTask')
f(22,301,13,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,301,13,2,'kyo.concurrent.fibers$Fiber')
f(17,314,215,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,314,215,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,314,215,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,314,215,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,314,104,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,314,104,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,314,80,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,394,24,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,394,24,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,418,46,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,464,65,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,464,65,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,464,65,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,529,145,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,529,90,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,529,90,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,529,90,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,529,90,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(17,619,37,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,619,37,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,656,18,1,'kyo/locals$Locals$.save')
f(18,656,18,2,'kyo.locals$Locals$$anon$3')
f(4,674,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f2b8.run')
f(5,674,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,674,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,674,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,674,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,674,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,674,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,674,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,685,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f4e0.run')
f(5,685,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,685,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,685,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,685,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,685,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,685,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$70+0x0000000800d4ea70')
f(4,696,7831,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fda8.run')
f(5,696,7831,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,696,7831,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,696,7346,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,696,7346,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,696,2858,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,696,2858,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,696,2858,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,696,2858,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(13,696,2858,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,696,375,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(14,1071,1749,2,'kyo.concurrent.scheduler.IOTask')
f(14,2820,734,1,'kyo/concurrent/fibers$Fiber$.promise')
f(15,2820,734,2,'kyo.concurrent.fibers$Fiber')
f(9,3554,4488,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,3554,4488,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,3554,1,1,'kyo/bench/ChainedForkBench$$Lambda$57.0x0000000800d49540.apply')
f(12,3554,1,1,'kyo/bench/ChainedForkBench.$anonfun$6')
f(13,3554,1,1,'kyo/bench/ChainedForkBench.iterate$2')
f(14,3554,1,1,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2')
f(15,3554,1,2,'kyo.bench.ChainedForkBench$$anon$2')
f(11,3555,4487,1,'kyo/bench/ChainedForkBench$$Lambda$61.0x0000000800d4a258.apply')
f(12,3555,4487,1,'kyo/bench/ChainedForkBench.$anonfun$3')
f(13,3555,4487,1,'kyo/bench/ChainedForkBench.iterate$2')
f(14,3555,841,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4c800.linkToTargetMethod')
f(15,3555,841,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(16,3555,841,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,3555,841,2,'kyo.bench.ChainedForkBench$$Lambda$61+0x0000000800d4a258')
f(14,4396,1125,1,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2')
f(15,4396,1125,2,'kyo.bench.ChainedForkBench$$anon$2')
f(14,5521,1,1,'kyo/concurrent/fibers$Fiber$Promise.complete')
f(15,5521,1,2,'kyo.concurrent.fibers$Fiber$Promise$$anon$26')
f(14,5522,2520,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(15,5522,758,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,5522,758,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,5522,758,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,5522,758,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(15,6280,969,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(16,6280,969,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(15,7249,793,1,'kyo/locals$Locals$.save')
f(16,7249,793,2,'kyo.locals$Locals$$anon$3')
f(7,8042,485,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,8042,485,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,8042,485,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,8042,485,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,8042,485,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d45230')
f(1,8527,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,8527,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,8527,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,8527,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,8527,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,8527,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,8527,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,8527,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,8527,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,8527,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,8527,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,8527,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,8527,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: 544px}
</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(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,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/ChainedForkBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,2,1,'kyo/bench/jmh_generated/ChainedForkBench_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,2,1,'kyo/bench/Bench$$anon$1.apply')
f(18,0,2,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,0,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,0,2,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(21,0,2,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,0,2,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,0,2,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,'get_futex_key')
f(24,1,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.poll')
f(25,1,1,2,'org/jctools/queues/MpUnboundedXaddArrayQueueConsumerFields.casConsumerIndex',1,0,0)
f(26,1,1,2,'sun/misc/Unsafe.compareAndSwapLong',1,0,0)
f(4,2,292,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fda8.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,24,153,1,'kyo/concurrent/scheduler/IOTask.run',9,0,0)
f(8,24,153,1,'kyo/concurrent/scheduler/IOTask.eval',9,0,0)
f(9,29,97,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,36,90,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,45,81,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,60,48,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply',48,0,0)
f(13,61,47,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',47,0,0)
f(14,77,7,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',7,0,0)
f(15,77,7,2,'kyo/ios$KyoIO.<init>',7,0,0)
f(14,84,22,2,'kyo/concurrent/scheduler/IOTask.<init>',22,0,0)
f(15,94,12,2,'kyo/concurrent/scheduler/IOPromise.<init>',12,0,0)
f(16,95,11,2,'kyo/concurrent/scheduler/IOPromise.<init>',11,0,0)
f(17,95,11,2,'java/util/concurrent/atomic/AtomicReference.<init>',11,0,0)
f(18,104,2,2,'java/lang/Object.<init>',2,0,0)
f(14,106,2,2,'kyo/concurrent/scheduler/Scheduler$.schedule',2,0,0)
f(12,108,18,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',18,0,0)
f(13,117,9,2,'kyo/core$internal$KyoCont.<init>',9,0,0)
f(14,125,1,2,'kyo/ios$KyoIO.value',1,0,0)
f(9,126,38,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,133,31,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',24,0,0)
f(11,134,30,2,'kyo/bench/ChainedForkBench$$Lambda$61.0x0000000800d4a2e8.apply',23,0,0)
f(12,134,30,2,'kyo/bench/ChainedForkBench.$anonfun$3',23,0,0)
f(13,134,30,2,'kyo/bench/ChainedForkBench.iterate$2',23,0,0)
f(14,135,2,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d4c800.linkToTargetMethod',2,0,0)
f(15,135,2,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial',2,0,0)
f(16,135,2,2,'kyo/bench/ChainedForkBench$$Lambda$61.0x0000000800d4a2e8.<init>',2,0,0)
f(14,137,17,2,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2',17,0,0)
f(14,154,10,1,'kyo/concurrent/fibers$Fibers.forkFiber',3,0,0)
f(15,155,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(16,155,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(17,155,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(15,156,7,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(16,158,5,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply',5,0,0)
f(17,159,4,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',4,0,0)
f(18,160,3,2,'kyo/concurrent/scheduler/IOTask.<init>',3,0,0)
f(19,160,3,2,'kyo/concurrent/scheduler/IOPromise.<init>',3,0,0)
f(20,160,3,2,'kyo/concurrent/scheduler/IOPromise.<init>',3,0,0)
f(21,160,3,2,'java/util/concurrent/atomic/AtomicReference.<init>',3,0,0)
f(15,163,1,2,'kyo/locals$Locals$.save',1,0,0)
f(9,164,2,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,164,2,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,164,2,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,164,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,164,2,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,164,2,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,164,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,164,2,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,164,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,164,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,164,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,164,2,1,'jdk/internal/misc/Unsafe.unpark')
f(21,164,2,3,'pthread_cond_signal')
f(22,164,2,5,'entry_SYSCALL_64_after_hwframe')
f(23,164,2,5,'do_syscall_64')
f(24,164,1,5,'__x64_sys_futex')
f(25,164,1,5,'do_futex')
f(26,164,1,5,'futex_wake')
f(27,164,1,5,'wake_up_q')
f(28,164,1,5,'_raw_spin_unlock_irqrestore')
f(24,165,1,5,'syscall_enter_from_user_mode')
f(9,166,5,6,'kyo/core$internal$KyoCont.effect',0,5,0)
f(9,171,2,1,'kyo/ios$KyoIO.effect')
f(9,173,4,3,'vtable stub')
f(7,177,109,2,'kyo/concurrent/scheduler/Queue.poll',109,0,0)
f(8,177,6,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',6,0,0)
f(9,177,6,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',6,0,0)
f(10,181,2,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',2,0,0)
f(8,183,6,2,'kyo/concurrent/scheduler/Queue.isEmpty',6,0,0)
f(8,189,97,2,'kyo/concurrent/scheduler/Queue.modify',97,0,0)
f(9,196,24,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',24,0,0)
f(10,200,20,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',20,0,0)
f(11,217,2,2,'java/lang/invoke/VarForm.getMemberName',2,0,0)
f(12,217,2,2,'java/lang/invoke/VarForm.getMemberNameOrNull',2,0,0)
f(11,219,1,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(9,220,66,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d45000.apply',66,0,0)
f(10,220,66,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',66,0,0)
f(11,222,17,2,'kyo/concurrent/scheduler/Queue.items',17,0,0)
f(11,239,47,2,'scala/collection/mutable/PriorityQueue.dequeue',47,0,0)
f(12,268,2,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',2,0,0)
f(12,270,10,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_size0',10,0,0)
f(12,280,6,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_size0_$eq',6,0,0)
f(7,286,1,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,286,1,1,'kyo/concurrent/scheduler/Worker.park')
f(9,286,1,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,286,1,1,'jdk/internal/misc/Unsafe.park')
f(11,286,1,3,'Unsafe_Park')
f(7,287,7,2,'kyo/concurrent/scheduler/Worker.stop$1',7,0,0)
f(8,292,2,2,'kyo/concurrent/scheduler/Scheduler$.stopWorker',2,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 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,9133,3,'all')
f(1,0,9130,1,'java/lang/Thread.run')
f(2,0,9130,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,9130,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,904,1,'java/util/concurrent/FutureTask.run')
f(5,0,904,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,904,1,'java/util/concurrent/FutureTask.run')
f(7,0,904,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,904,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,904,1,'java/lang/reflect/Method.invoke')
f(10,0,904,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,904,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,904,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,904,1,'kyo/bench/jmh_generated/ChainedForkBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,904,1,'kyo/bench/jmh_generated/ChainedForkBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,904,1,'kyo/bench/Bench.syncKyo')
f(16,0,424,1,'kyo/bench/Bench.runLoop$1')
f(17,0,238,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,238,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,238,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,238,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,158,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,158,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,90,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,90,68,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,90,68,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,158,67,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,225,13,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,225,13,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,225,13,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,238,186,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,238,174,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,238,174,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,238,174,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,238,107,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,238,107,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,238,107,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(24,238,107,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,238,107,2,'kyo.concurrent.scheduler.IOTask')
f(21,345,67,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,345,67,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c83420.apply')
f(23,345,67,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,345,67,1,'kyo/concurrent/fibers$Fiber.join')
f(25,345,67,1,'kyo/concurrent/fibers$Fibers.get')
f(26,345,67,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,345,67,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,412,12,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,412,12,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c83c20.apply')
f(20,412,12,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,412,12,1,'kyo/concurrent/fibers$Fiber.block')
f(22,412,12,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,424,480,1,'kyo/bench/ChainedForkBench.kyoBench')
f(17,424,50,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,424,50,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,424,50,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,424,50,2,'kyo.bench.ChainedForkBench$$Lambda$37+0x0000000800c3f088')
f(17,474,201,1,'kyo/concurrent/fibers$Fibers.block')
f(18,474,44,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,474,44,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,518,83,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,518,83,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,601,74,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,601,74,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,675,229,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,675,72,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,675,72,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,675,72,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,675,72,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c83420')
f(18,747,93,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,747,78,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,747,78,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,747,78,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,747,78,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(19,825,15,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,825,15,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(18,840,64,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,840,64,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(4,904,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f2b8.run')
f(5,904,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,904,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,904,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,904,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,904,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,904,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,904,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,915,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1f4e0.run')
f(5,915,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,915,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,915,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,915,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,915,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,915,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$71+0x0000000800d4ea70')
f(4,926,8204,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d1fda8.run')
f(5,926,8204,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,926,8204,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,926,7737,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,926,7737,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,926,1,1,'kyo/bench/ChainedForkBench$$anon$1.apply')
f(10,926,1,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(11,926,1,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(12,926,1,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$Promise$$anon$26$$_$loop$22')
f(13,926,1,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(14,926,1,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(15,926,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,926,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,926,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,926,1,1,'scala/runtime/function/JProcedure1.apply')
f(19,926,1,1,'scala/runtime/function/JProcedure1.apply')
f(20,926,1,1,'kyo/concurrent/scheduler/IOTask$$Lambda$65.0x0000000800d4af78.applyVoid')
f(21,926,1,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(22,926,1,2,'kyo.concurrent.scheduler.IOTask')
f(9,927,3022,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,927,3022,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,927,3022,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,927,3022,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(13,927,3022,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,927,371,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(14,1298,1893,2,'kyo.concurrent.scheduler.IOTask')
f(14,3191,758,1,'kyo/concurrent/fibers$Fiber$.promise')
f(15,3191,758,2,'kyo.concurrent.fibers$Fiber')
f(9,3949,4713,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,3949,4713,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,3949,1,1,'kyo/bench/ChainedForkBench$$Lambda$58.0x0000000800d495d0.apply')
f(12,3949,1,1,'kyo/bench/ChainedForkBench.$anonfun$6')
f(13,3949,1,1,'kyo/bench/ChainedForkBench.iterate$2')
f(14,3949,1,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(15,3949,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(16,3949,1,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(11,3950,4712,1,'kyo/bench/ChainedForkBench$$Lambda$62.0x0000000800d4a2e8.apply')
f(12,3950,4712,1,'kyo/bench/ChainedForkBench.$anonfun$3')
f(13,3950,4712,1,'kyo/bench/ChainedForkBench.iterate$2')
f(14,3950,907,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4c800.linkToTargetMethod')
f(15,3950,907,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(16,3950,907,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,3950,907,2,'kyo.bench.ChainedForkBench$$Lambda$62+0x0000000800d4a2e8')
f(14,4857,1180,1,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2')
f(15,4857,1180,2,'kyo.bench.ChainedForkBench$$anon$2')
f(14,6037,2625,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(15,6037,826,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,6037,826,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,6037,826,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,6037,826,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84800')
f(15,6863,966,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(16,6863,966,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(15,7829,833,1,'kyo/locals$Locals$.save')
f(16,7829,833,2,'kyo.locals$Locals$$anon$3')
f(9,8662,1,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,8662,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,8662,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,8662,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,8662,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$65+0x0000000800d4af78')
f(7,8663,466,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,8663,466,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,8663,466,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,8663,466,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,8663,466,2,'kyo.concurrent.scheduler.Queue$$Lambda$56+0x0000000800d45000')
f(7,9129,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,9129,1,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,9129,1,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,9129,1,1,'scala/runtime/ObjectRef.create')
f(11,9129,1,2,'scala.runtime.ObjectRef')
f(1,9130,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,9130,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,9130,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,9130,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,9130,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,9130,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,9130,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,9130,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,9130,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,9130,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,9130,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,9130,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,9130,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,297,3,'all')
f(1,0,27,3,'[not_walkable_Java]')
f(2,0,19,1,'I2C/C2I adapters')
f(3,0,4,4,'CompiledMethod::is_compiled() const')
f(3,4,15,4,'SharedRuntime::fixup_callers_callsite(Method*, unsigned char*)')
f(4,5,8,4,'CodeCache::find_blob(void*)')
f(4,13,2,4,'CodeHeap::find_blob_unsafe(void*) const')
f(4,15,4,4,'nmethod::is_zombie() const')
f(2,19,8,3,'Interpreter')
f(1,27,70,3,'[unknown_Java]')
f(2,27,70,1,'I2C/C2I adapters')
f(1,97,200,1,'java/lang/Thread.run')
f(2,97,200,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,97,200,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,97,1,1,'java/util/concurrent/FutureTask.run')
f(5,97,1,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,97,1,1,'java/util/concurrent/FutureTask.run')
f(7,97,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,97,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,97,1,1,'java/lang/reflect/Method.invoke')
f(10,97,1,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,97,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,97,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,97,1,1,'kyo/bench/jmh_generated/ChainedForkBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,97,1,1,'kyo/bench/jmh_generated/ChainedForkBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,97,1,1,'kyo/bench/Bench.syncKyo')
f(16,97,1,1,'kyo/bench/Bench.runLoop$1')
f(17,97,1,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,97,1,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,97,1,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,97,1,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,97,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,97,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,97,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(24,97,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,97,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,97,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,97,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.poll')
f(28,97,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.switchToNextConsumerChunkAndPoll')
f(29,97,1,6,'org/jctools/queues/MpUnboundedXaddArrayQueue.moveToNextConsumerChunk',0,1,0)
f(30,97,1,2,'org/jctools/queues/MpUnboundedXaddChunk.isPooled',1,0,0)
f(4,98,199,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d1fda8.run')
f(5,98,199,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,98,199,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,99,72,1,'kyo/concurrent/scheduler/IOTask.run',3,0,0)
f(8,103,68,1,'kyo/concurrent/scheduler/IOTask.eval',3,0,0)
f(9,111,35,1,'kyo/bench/ChainedForkBench$$anon$2.apply')
f(10,111,35,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',1,0,0)
f(11,112,34,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,116,30,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84800.apply')
f(13,116,30,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,126,1,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',1,0,0)
f(15,126,1,2,'kyo/ios$KyoIO.<init>',1,0,0)
f(14,127,10,2,'kyo/concurrent/scheduler/IOTask.<init>',10,0,0)
f(15,134,3,2,'kyo/concurrent/scheduler/IOPromise.<init>',3,0,0)
f(16,134,3,2,'kyo/concurrent/scheduler/IOPromise.<init>',3,0,0)
f(17,135,2,2,'java/util/concurrent/atomic/AtomicReference.<init>',2,0,0)
f(18,136,1,2,'java/lang/Object.<init>',1,0,0)
f(14,137,9,2,'kyo/concurrent/scheduler/Scheduler$.schedule',9,0,0)
f(15,138,8,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',8,0,0)
f(16,138,8,2,'kyo/concurrent/scheduler/Queue.offer',8,0,0)
f(17,138,8,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',8,0,0)
f(18,138,8,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',8,0,0)
f(19,138,7,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',7,0,0)
f(19,145,1,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d474b0.<init>',1,0,0)
f(9,146,17,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,147,16,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',13,0,0)
f(11,147,16,2,'kyo/bench/ChainedForkBench$$Lambda$62.0x0000000800d4a488.apply',13,0,0)
f(12,147,16,2,'kyo/bench/ChainedForkBench.$anonfun$3',13,0,0)
f(13,147,16,2,'kyo/bench/ChainedForkBench.iterate$2',13,0,0)
f(14,148,8,2,'kyo/bench/ChainedForkBench.kyo$bench$ChainedForkBench$$_$transformLoop$2',8,0,0)
f(15,154,2,2,'kyo/bench/ChainedForkBench$$anon$2.<init>',2,0,0)
f(16,155,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(14,156,7,2,'kyo/concurrent/fibers$Fibers.forkFiber',4,0,0)
f(15,156,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(16,156,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(17,156,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(15,157,3,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(15,160,3,2,'kyo/locals$Locals$.save',3,0,0)
f(9,163,4,1,'kyo/concurrent/scheduler/IOTask.loop$8',1,0,0)
f(10,165,2,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',1,0,0)
f(11,165,2,2,'kyo/concurrent/scheduler/IOPromise.complete',1,0,0)
f(12,165,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(13,165,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(14,165,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(12,166,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,166,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,166,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,166,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,166,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,166,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,166,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,166,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,166,1,1,'jdk/internal/misc/Unsafe.unpark')
f(21,166,1,3,'pthread_cond_signal')
f(22,166,1,5,'entry_SYSCALL_64_after_hwframe')
f(23,166,1,5,'do_syscall_64')
f(24,166,1,5,'__x64_sys_futex')
f(25,166,1,5,'do_futex')
f(26,166,1,5,'futex_wake')
f(27,166,1,5,'wake_up_q')
f(28,166,1,5,'_raw_spin_unlock_irqrestore')
f(9,167,2,6,'kyo/core$internal$KyoCont.effect',0,2,0)
f(9,169,2,3,'vtable stub')
f(7,171,126,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,173,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,173,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,174,1,1,'kyo/concurrent/scheduler/Queue$$Lambda$56.0x0000000800d45230.<init>')
f(8,175,122,0,'kyo/concurrent/scheduler/Queue.modify',0,0,115)
f(9,286,1,1,'I2C/C2I adapters')
f(9,287,3,4,'InterpreterRuntime::frequency_counter_overflow(JavaThread*, unsigned char*)')
f(10,287,3,4,'InterpreterRuntime::frequency_counter_overflow_inner(JavaThread*, unsigned char*)')
f(11,287,3,4,'CompilationPolicy::event(methodHandle const&, methodHandle const&, int, int, CompLevel, CompiledMethod*, JavaThread*)')
f(12,287,1,4,'CompilationPolicy::call_event(methodHandle const&, CompLevel, Thread*)')
f(13,287,1,4,'CompLevel CompilationPolicy::common<CallPredicate>(methodHandle const&, CompLevel, bool)')
f(14,287,1,4,'CompilationPolicy::highest_compile_level()')
f(12,288,2,4,'CompilationPolicy::compile(methodHandle const&, int, CompLevel, JavaThread*)')
f(13,289,1,4,'CompileBroker::compile_method(methodHandle const&, int, int, methodHandle const&, int, CompileTask::CompileReason, JavaThread*)')
f(14,289,1,4,'DirectivesStack::release(DirectiveSet*)')
f(15,289,1,3,'pthread_mutex_lock')
f(9,290,2,1,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet')
f(10,290,2,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',2,0,0)
f(11,290,2,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',2,0,0)
f(9,292,1,1,'java/util/concurrent/atomic/AtomicBoolean.set')
f(9,293,3,1,'kyo/concurrent/scheduler/Queue$$Lambda$56.0x0000000800d45230.apply')
f(10,293,3,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',3,0,0)
f(11,293,1,2,'kyo/concurrent/scheduler/Queue.queue',1,0,0)
f(11,294,2,2,'scala/collection/mutable/PriorityQueue.dequeue',2,0,0)
f(9,296,1,2,'kyo/concurrent/scheduler/Queue$$Lambda$61.0x0000000800d4a1c8.apply',1,0,0)
f(10,296,1,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',1,0,0)
f(11,296,1,2,'scala/collection/mutable/PriorityQueue.dequeue',1,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 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,13061,3,'all')
f(1,0,13058,1,'java/lang/Thread.run')
f(2,0,13058,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,13058,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,2249,1,'java/util/concurrent/FutureTask.run')
f(5,0,2249,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,2249,1,'java/util/concurrent/FutureTask.run')
f(7,0,2249,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,2249,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,2249,1,'java/lang/reflect/Method.invoke')
f(10,0,2249,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,2249,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,2249,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,2249,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,2248,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,2248,1,'kyo/bench/Bench.forkKyo')
f(16,0,112,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,112,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,112,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,112,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3fb00')
f(16,112,184,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,112,184,2,'kyo.bench.Bench$$anon$1')
f(16,296,1445,1,'kyo/bench/Bench.runLoop$2')
f(17,296,604,1,'kyo/bench/Bench$$anon$1.apply')
f(18,296,103,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,296,103,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c81000.apply')
f(20,296,103,1,'kyo/bench/Bench.$anonfun$2')
f(21,296,103,1,'kyo/concurrent/fibers$Fiber.block')
f(22,296,103,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,399,501,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,399,501,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,399,501,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85290.apply')
f(21,399,501,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,399,23,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,422,387,2,'kyo.concurrent.scheduler.IOTask')
f(22,809,91,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,809,91,2,'kyo.concurrent.fibers$Fiber')
f(17,900,841,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,900,841,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,900,841,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,900,841,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,900,385,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,900,385,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,900,132,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,1032,253,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,1032,253,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,1285,234,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,1519,222,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,1519,222,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,1519,222,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,1741,507,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,1741,177,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1741,177,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1741,177,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1741,177,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c85290')
f(17,1918,227,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,1918,227,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,2145,103,1,'kyo/locals$Locals$.save')
f(18,2145,103,2,'kyo.locals$Locals$$anon$3')
f(14,2248,1,2,'org.openjdk.jmh.results.BenchmarkTaskResult')
f(4,2249,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f4b8.run')
f(5,2249,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,2249,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,2249,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,2249,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,2249,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,2249,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,2249,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,2260,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f6e0.run')
f(5,2260,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,2260,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,2260,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,2260,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,2260,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,2260,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,2260,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$61+0x0000000800d552c0')
f(4,2271,10787,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d243c0.run')
f(5,2271,10787,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,2271,10787,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,2271,10786,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,2271,10786,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,2271,7073,1,'kyo/bench/CollectAllBench$$anon$2.apply')
f(10,2271,2627,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(11,2271,1718,2,'kyo.bench.CollectAllBench$$anon$2')
f(11,3989,909,1,'kyo/bench/CollectAllBench$$Lambda$58.0x0000000800d56000.apply')
f(12,3989,909,1,'kyo/bench/CollectAllBench.$anonfun$2')
f(13,3989,908,1,'scala/collection/AbstractIterable.sum')
f(14,3989,908,1,'scala/collection/IterableOnceOps.sum$')
f(15,3989,908,1,'scala/collection/IterableOnceOps.sum')
f(16,3989,908,1,'scala/collection/AbstractIterable.reduce')
f(17,3989,908,1,'scala/collection/IterableOnceOps.reduce$')
f(18,3989,908,1,'scala/collection/IterableOnceOps.reduce')
f(19,3989,908,1,'scala/collection/AbstractIterable.reduceLeft')
f(20,3989,908,1,'scala/collection/IterableOnceOps.reduceLeft$')
f(21,3989,908,1,'scala/collection/IterableOnceOps.reduceLeft')
f(22,3989,908,1,'scala/collection/IterableOnceOps$$Lambda$59.0x0000000800d57638.apply')
f(23,3989,908,1,'scala/collection/IterableOnceOps.$anonfun$sum$1')
f(24,3989,908,1,'scala/math/Numeric$IntIsIntegral$.plus')
f(25,3989,908,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(26,3989,908,1,'java/lang/Integer.valueOf')
f(27,3989,908,2,'java.lang.Integer')
f(13,4897,1,1,'scala/runtime/BoxesRunTime.boxToLong')
f(14,4897,1,1,'java/lang/Long.valueOf')
f(15,4897,1,2,'java.lang.Long')
f(10,4898,4446,1,'kyo/lists$Lists$$anon$11.apply')
f(11,4898,4446,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(12,4898,4446,1,'kyo/lists$Lists$$Lambda$57.0x0000000800d53b78.apply')
f(13,4898,4446,1,'kyo/lists$Lists.$anonfun$5')
f(14,4898,3139,1,'kyo/lists$Lists.loop$2')
f(15,4898,1352,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,4898,1352,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,4898,1352,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,4898,1352,2,'kyo.lists$Lists$$Lambda$57+0x0000000800d53b78')
f(15,6250,1787,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(16,6250,1787,2,'kyo.lists$Lists$$anon$11')
f(14,8037,1307,1,'scala/collection/mutable/ListBuffer.addOne')
f(15,8037,1307,2,'scala.collection.immutable.$colon$colon')
f(9,9344,3713,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,9344,3713,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,9344,3713,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3fb00.apply')
f(12,9344,3713,1,'kyo/bench/Bench.$anonfun$1')
f(13,9344,3713,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,9344,3713,1,'kyo/bench/CollectAllBench.kyoBench')
f(15,9344,2,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(16,9344,2,2,'kyo.bench.CollectAllBench$$anon$2')
f(15,9346,10,1,'kyo/lists$Lists.collect')
f(16,9346,2,2,'java.lang.Object[]')
f(16,9348,3,1,'kyo/lists$Lists.loop$2')
f(17,9348,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,9348,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,9348,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,9348,1,2,'kyo.lists$Lists$$Lambda$57+0x0000000800d53b78')
f(17,9349,2,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(18,9349,2,2,'kyo.lists$Lists$$anon$11')
f(16,9351,5,1,'scala/collection/mutable/ListBuffer$.apply')
f(17,9351,5,1,'scala/collection/IterableFactory.apply$')
f(18,9351,5,1,'scala/collection/IterableFactory.apply')
f(19,9351,5,1,'scala/collection/mutable/ListBuffer$.from')
f(20,9351,5,1,'scala/collection/mutable/ListBuffer$.from')
f(21,9351,5,2,'scala.collection.mutable.ListBuffer')
f(15,9356,1845,1,'scala/collection/AbstractIterable.toList')
f(16,9356,1845,1,'scala/collection/IterableOnceOps.toList$')
f(17,9356,1845,1,'scala/collection/IterableOnceOps.toList')
f(18,9356,1845,1,'scala/collection/immutable/List.prependedAll')
f(19,9356,1836,2,'scala.collection.immutable.$colon$colon')
f(19,11192,9,1,'scala/collection/immutable/Vector.iterator')
f(20,11192,9,2,'scala.collection.immutable.NewVectorIterator')
f(15,11201,1856,1,'scala/collection/immutable/Range.map')
f(16,11201,1336,1,'kyo/bench/CollectAllBench$$Lambda$56.0x0000000800d44a30.apply')
f(17,11201,1336,1,'kyo/bench/CollectAllBench.$anonfun$adapted$1')
f(18,11201,1336,1,'kyo/bench/CollectAllBench.$anonfun$1')
f(19,11201,1336,2,'kyo.bench.CollectAllBench$$anon$1')
f(16,12537,127,1,'scala/collection/SeqFactory$Delegate.newBuilder')
f(17,12537,127,1,'scala/collection/immutable/Vector$.newBuilder')
f(18,12537,127,1,'scala/collection/immutable/Vector$.newBuilder')
f(19,12537,116,2,'scala.collection.immutable.VectorBuilder')
f(19,12653,11,1,'scala/collection/immutable/VectorBuilder.<init>')
f(20,12653,11,2,'java.lang.Object[]')
f(16,12664,376,1,'scala/collection/immutable/VectorBuilder.addOne')
f(17,12664,376,1,'scala/collection/immutable/VectorBuilder.addOne')
f(18,12664,376,1,'scala/collection/immutable/VectorBuilder.advance')
f(19,12664,376,1,'scala/collection/immutable/VectorBuilder.advance1')
f(20,12664,6,2,'java.lang.Object[][]')
f(20,12670,370,2,'java.lang.Object[]')
f(16,13040,17,1,'scala/collection/immutable/VectorBuilder.result')
f(17,13040,17,1,'scala/collection/immutable/VectorBuilder.result')
f(18,13040,6,1,'java/util/Arrays.copyOf')
f(19,13040,6,2,'java.lang.Object[]')
f(18,13046,9,1,'java/util/Arrays.copyOfRange')
f(19,13046,9,2,'java.lang.Object[][]')
f(18,13055,2,2,'scala.collection.immutable.Vector2')
f(7,13057,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,13057,1,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,13057,1,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,13057,1,1,'scala/runtime/ObjectRef.create')
f(11,13057,1,2,'scala.runtime.ObjectRef')
f(1,13058,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,13058,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,13058,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,13058,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,13058,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,13058,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,13058,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,13058,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,13058,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,13058,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,13058,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,13058,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,13058,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,251,3,'all')
f(1,0,3,3,'[unknown_Java]')
f(2,0,1,1,'kyo/bench/CollectAllBench$$Lambda$58.0x0000000800d56000.apply')
f(2,1,2,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(1,3,248,1,'java/lang/Thread.run')
f(2,3,248,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,3,248,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,3,31,1,'java/util/concurrent/FutureTask.run')
f(5,3,31,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,3,31,1,'java/util/concurrent/FutureTask.run')
f(7,3,31,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,3,31,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,3,31,1,'java/lang/reflect/Method.invoke')
f(10,3,31,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,3,31,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,3,31,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,3,31,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,3,31,1,'kyo/bench/jmh_generated/CollectAllBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,3,31,1,'kyo/bench/Bench.forkKyo')
f(16,3,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,3,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,3,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,3,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(16,4,30,1,'kyo/bench/Bench.runLoop$2')
f(17,4,16,1,'kyo/bench/Bench$$anon$1.apply')
f(18,4,16,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,4,16,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,15,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,4,15,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,4,15,1,'jdk/internal/misc/Unsafe.unpark')
f(27,4,1,3,'Unsafe_Unpark')
f(28,4,1,3,'pthread_mutex_lock')
f(27,5,14,3,'pthread_cond_signal')
f(28,5,14,5,'entry_SYSCALL_64_after_hwframe')
f(29,5,14,5,'do_syscall_64')
f(30,5,14,5,'__x64_sys_futex')
f(31,5,13,5,'do_futex')
f(32,5,13,5,'futex_wake')
f(33,6,12,5,'wake_up_q')
f(34,6,11,5,'_raw_spin_unlock_irqrestore')
f(34,17,1,5,'try_to_wake_up')
f(35,17,1,5,'_raw_spin_lock_irqsave')
f(31,18,1,5,'futex_wake')
f(20,19,1,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',1,0,0)
f(21,19,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(22,19,1,2,'kyo/ios$KyoIO.effect',1,0,0)
f(23,19,1,2,'kyo/ios$KyoIO.effect',1,0,0)
f(17,20,14,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,20,14,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,20,14,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,20,14,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,20,14,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,20,14,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,21,12,1,'java/util/concurrent/locks/LockSupport.park',1,0,0)
f(24,21,1,2,'java/util/concurrent/locks/LockSupport.setBlocker',1,0,0)
f(24,22,11,1,'jdk/internal/misc/Unsafe.park')
f(25,23,10,3,'[unknown]')
f(26,23,10,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,24,9,5,'entry_SYSCALL_64_after_hwframe')
f(28,24,9,5,'do_syscall_64')
f(29,24,8,5,'__x64_sys_futex')
f(30,24,8,5,'do_futex')
f(31,24,8,5,'futex_wait')
f(32,24,7,5,'futex_wait_queue_me')
f(33,24,7,5,'schedule')
f(34,24,7,5,'__schedule')
f(35,24,7,5,'finish_task_switch.isra.0')
f(32,31,1,5,'schedule')
f(29,32,1,5,'do_futex')
f(23,33,1,2,'kyo/concurrent/scheduler/IOPromise$$anon$1.tryAcquireShared',1,0,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,216,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d243c0.run')
f(5,35,216,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,35,216,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,36,183,1,'kyo/concurrent/scheduler/IOTask.run',26,0,0)
f(8,36,183,1,'kyo/concurrent/scheduler/IOTask.eval',26,0,0)
f(9,36,120,1,'kyo/bench/CollectAllBench$$anon$2.apply',26,0,0)
f(10,36,36,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(11,36,36,1,'kyo/bench/CollectAllBench$$Lambda$58.0x0000000800d56000.apply')
f(12,36,36,2,'kyo/bench/CollectAllBench.$anonfun$2',26,0,0)
f(13,36,36,2,'scala/collection/AbstractIterable.sum',26,0,0)
f(14,36,36,2,'scala/collection/IterableOnceOps.sum$',26,0,0)
f(15,36,36,2,'scala/collection/IterableOnceOps.sum',26,0,0)
f(16,36,36,2,'scala/collection/AbstractIterable.reduce',26,0,0)
f(17,36,36,2,'scala/collection/IterableOnceOps.reduce$',26,0,0)
f(18,36,36,2,'scala/collection/IterableOnceOps.reduce',26,0,0)
f(19,36,36,2,'scala/collection/AbstractIterable.reduceLeft',26,0,0)
f(20,36,36,2,'scala/collection/IterableOnceOps.reduceLeft$',26,0,0)
f(21,36,36,2,'scala/collection/IterableOnceOps.reduceLeft',26,0,0)
f(22,37,30,2,'scala/collection/IterableOnceOps$$Lambda$59.0x0000000800d57638.apply',20,0,0)
f(23,37,30,2,'scala/collection/IterableOnceOps.$anonfun$sum$1',20,0,0)
f(24,37,30,2,'scala/math/Numeric$IntIsIntegral$.plus',20,0,0)
f(25,37,27,2,'scala/runtime/BoxesRunTime.boxToInteger',17,0,0)
f(26,51,13,1,'java/lang/Integer.valueOf',3,0,0)
f(27,53,11,1,'java/lang/Integer.<init>',1,0,0)
f(28,54,10,1,'java/lang/Number.<init>')
f(25,64,3,2,'scala/runtime/BoxesRunTime.unboxToInt',3,0,0)
f(22,67,5,2,'scala/collection/StrictOptimizedLinearSeqOps$$anon$1.next',5,0,0)
f(10,72,84,1,'kyo/lists$Lists$$anon$11.apply',26,0,0)
f(11,72,26,2,'kyo/bench/CollectAllBench$$anon$1.apply',26,0,0)
f(12,72,26,2,'kyo/bench/CollectAllBench$$anon$1.apply',26,0,0)
f(13,72,26,2,'scala/runtime/BoxesRunTime.boxToInteger',26,0,0)
f(11,98,58,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(12,100,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(13,100,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(14,100,1,4,'MemAllocator::Allocation::notify_allocation_jfr_sampler()')
f(12,101,49,2,'kyo/lists$Lists$$Lambda$57.0x0000000800d53b78.apply',49,0,0)
f(13,101,49,2,'kyo/lists$Lists.$anonfun$5',49,0,0)
f(14,102,19,2,'kyo/lists$Lists.loop$2',19,0,0)
f(15,113,8,2,'scala/collection/immutable/List.equals',8,0,0)
f(16,113,8,2,'scala/collection/immutable/List.listEq$1',8,0,0)
f(17,117,4,2,'scala/collection/immutable/List.isEmpty',4,0,0)
f(14,121,29,2,'scala/collection/mutable/ListBuffer.addOne',29,0,0)
f(15,123,4,2,'scala/collection/immutable/$colon$colon.next_$eq',4,0,0)
f(15,127,7,2,'scala/collection/mutable/ListBuffer.first_$eq',7,0,0)
f(15,134,16,2,'scala/collection/mutable/ListBuffer.last0_$eq',16,0,0)
f(12,150,6,2,'kyo/lists$Lists$$anon$11.<init>',6,0,0)
f(13,150,6,2,'kyo/core$internal$KyoCont.<init>',6,0,0)
f(14,151,4,2,'kyo/core$internal$Kyo.<init>',4,0,0)
f(14,155,1,2,'kyo/ios$KyoIO.effect',1,0,0)
f(9,156,49,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,156,49,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',48,0,0)
f(11,156,49,2,'kyo/bench/Bench$$Lambda$37.0x0000000800c3fb00.apply',48,0,0)
f(12,156,49,2,'kyo/bench/Bench.$anonfun$1',48,0,0)
f(13,156,49,2,'kyo/bench/Bench.kyoBenchFiber',48,0,0)
f(14,156,49,2,'kyo/bench/CollectAllBench.kyoBench',48,0,0)
f(15,157,1,1,'kyo/lists$Lists.collect')
f(16,157,1,1,'kyo/lists$Lists.loop$2')
f(17,157,1,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(18,157,1,2,'kyo/lists$Lists$$Lambda$57.0x0000000800d53b78.apply',1,0,0)
f(19,157,1,2,'kyo/lists$Lists.$anonfun$5',1,0,0)
f(20,157,1,2,'scala/collection/mutable/ListBuffer.addOne',1,0,0)
f(21,157,1,2,'scala/collection/mutable/ListBuffer.last0_$eq',1,0,0)
f(15,158,8,2,'scala/collection/AbstractIterable.toList',8,0,0)
f(16,158,8,2,'scala/collection/IterableOnceOps.toList$',8,0,0)
f(17,158,8,2,'scala/collection/IterableOnceOps.toList',8,0,0)
f(18,158,8,2,'scala/collection/immutable/List.prependedAll',8,0,0)
f(19,158,8,2,'scala/collection/immutable/$colon$colon.<init>',8,0,0)
f(15,166,31,2,'scala/collection/immutable/Range.map',31,0,0)
f(16,183,5,2,'kyo/bench/CollectAllBench$$Lambda$56.0x0000000800d44800.apply',5,0,0)
f(17,184,4,2,'kyo/bench/CollectAllBench.$anonfun$adapted$1',4,0,0)
f(18,184,1,2,'kyo/bench/CollectAllBench.$anonfun$1',1,0,0)
f(19,184,1,2,'kyo/bench/CollectAllBench$$anon$1.<init>',1,0,0)
f(20,184,1,2,'kyo/ios$KyoIO.<init>',1,0,0)
f(21,184,1,2,'kyo/core$internal$Kyo.<init>',1,0,0)
f(22,184,1,2,'java/lang/Object.<init>',1,0,0)
f(18,185,3,2,'scala/runtime/BoxesRunTime.unboxToInt',3,0,0)
f(16,188,8,2,'scala/collection/SeqFactory$Delegate.newBuilder',8,0,0)
f(17,192,4,2,'scala/collection/immutable/Vector$.newBuilder',4,0,0)
f(18,192,4,2,'scala/collection/immutable/Vector$.newBuilder',4,0,0)
f(19,193,3,2,'scala/collection/immutable/VectorBuilder.<init>',3,0,0)
f(16,196,1,2,'scala/collection/immutable/RangeIterator.next',1,0,0)
f(17,196,1,2,'scala/collection/immutable/RangeIterator.next',1,0,0)
f(15,197,8,2,'scala/runtime/RichInt$.until$extension',8,0,0)
f(16,197,8,2,'scala/collection/immutable/Range$Exclusive.<init>',8,0,0)
f(17,197,8,2,'scala/collection/immutable/Range.<init>',8,0,0)
f(18,202,1,2,'scala/collection/immutable/AbstractSeq.<init>',1,0,0)
f(19,202,1,2,'scala/collection/AbstractSeq.<init>',1,0,0)
f(20,202,1,2,'scala/collection/AbstractIterable.<init>',1,0,0)
f(18,203,2,2,'scala/collection/immutable/Range.longLength',2,0,0)
f(19,203,2,2,'scala/collection/immutable/Range.hasStub',2,0,0)
f(20,203,2,2,'scala/collection/immutable/Range.isExact',2,0,0)
f(21,204,1,2,'scala/collection/immutable/Range.gap',1,0,0)
f(9,205,14,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,205,14,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,205,14,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,205,14,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,205,14,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,205,14,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,205,14,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,205,14,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,205,14,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,205,14,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,205,14,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,205,14,1,'jdk/internal/misc/Unsafe.unpark')
f(21,205,1,3,'Unsafe_Unpark')
f(21,206,13,3,'pthread_cond_signal')
f(22,206,13,5,'entry_SYSCALL_64_after_hwframe')
f(23,206,13,5,'do_syscall_64')
f(24,207,12,5,'__x64_sys_futex')
f(25,207,12,5,'do_futex')
f(26,207,12,5,'futex_wake')
f(27,209,10,5,'wake_up_q')
f(28,209,10,5,'_raw_spin_unlock_irqrestore')
f(7,219,15,2,'kyo/concurrent/scheduler/Queue.poll',15,0,0)
f(8,219,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(9,219,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',2,0,0)
f(10,220,1,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d45230.<init>',1,0,0)
f(11,220,1,2,'java/lang/Object.<init>',1,0,0)
f(8,221,13,2,'kyo/concurrent/scheduler/Queue.modify',13,0,0)
f(9,223,2,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',2,0,0)
f(9,225,9,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d45230.apply',9,0,0)
f(10,225,9,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',9,0,0)
f(11,226,8,2,'scala/collection/mutable/PriorityQueue.dequeue',8,0,0)
f(7,234,17,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,234,17,1,'kyo/concurrent/scheduler/Worker.park')
f(9,234,17,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,234,17,1,'jdk/internal/misc/Unsafe.park')
f(11,234,2,3,'Unsafe_Park')
f(12,235,1,3,'clock_gettime')
f(11,236,15,3,'[unknown]')
f(12,236,14,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,239,11,5,'entry_SYSCALL_64_after_hwframe')
f(14,239,11,5,'do_syscall_64')
f(15,239,8,5,'__x64_sys_futex')
f(16,239,8,5,'do_futex')
f(17,239,8,5,'futex_wait')
f(18,239,8,5,'futex_wait_queue_me')
f(19,239,8,5,'schedule')
f(20,239,8,5,'__schedule')
f(21,239,8,5,'finish_task_switch.isra.0')
f(15,247,1,5,'syscall_enter_from_user_mode')
f(15,248,2,5,'syscall_exit_to_user_mode')
f(16,248,2,5,'exit_to_user_mode_prepare')
f(17,248,2,5,'exit_to_user_mode_loop')
f(18,249,1,5,'__rseq_handle_notify_resume')
f(12,250,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,14449,3,'all')
f(1,0,14444,1,'java/lang/Thread.run')
f(2,0,14444,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,14444,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,14444,1,'java/util/concurrent/FutureTask.run')
f(5,0,14444,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,14444,1,'java/util/concurrent/FutureTask.run')
f(7,0,14444,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,14444,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,14444,1,'java/lang/reflect/Method.invoke')
f(10,0,14444,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,14444,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,14444,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,14444,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,14444,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,14444,1,'kyo/bench/Bench.syncKyo')
f(16,0,10638,1,'kyo/bench/Bench.runLoop$1')
f(17,0,10638,1,'kyo/bench/CollectAllBench$$anon$2.apply')
f(18,0,3404,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(19,0,2209,2,'kyo.bench.CollectAllBench$$anon$2')
f(19,2209,1195,1,'kyo/bench/CollectAllBench$$Lambda$41.0x0000000800d24940.apply')
f(20,2209,1195,1,'kyo/bench/CollectAllBench.$anonfun$2')
f(21,2209,1195,1,'scala/collection/AbstractIterable.sum')
f(22,2209,1195,1,'scala/collection/IterableOnceOps.sum$')
f(23,2209,1195,1,'scala/collection/IterableOnceOps.sum')
f(24,2209,1195,1,'scala/collection/AbstractIterable.reduce')
f(25,2209,1195,1,'scala/collection/IterableOnceOps.reduce$')
f(26,2209,1195,1,'scala/collection/IterableOnceOps.reduce')
f(27,2209,1195,1,'scala/collection/AbstractIterable.reduceLeft')
f(28,2209,1195,1,'scala/collection/IterableOnceOps.reduceLeft$')
f(29,2209,1195,1,'scala/collection/IterableOnceOps.reduceLeft')
f(30,2209,1195,1,'scala/collection/IterableOnceOps$$Lambda$42.0x0000000800d2a090.apply')
f(31,2209,1195,1,'scala/collection/IterableOnceOps.$anonfun$sum$1')
f(32,2209,1195,1,'scala/math/Numeric$IntIsIntegral$.plus')
f(33,2209,1195,1,'scala/runtime/BoxesRunTime.boxToInteger')
f(34,2209,1195,1,'java/lang/Integer.valueOf')
f(35,2209,1195,2,'java.lang.Integer')
f(18,3404,7234,1,'kyo/lists$Lists$$anon$11.apply')
f(19,3404,7234,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(20,3404,7234,1,'kyo/lists$Lists$$Lambda$40.0x0000000800d0fb38.apply')
f(21,3404,7234,1,'kyo/lists$Lists.$anonfun$5')
f(22,3404,4572,1,'kyo/lists$Lists.loop$2')
f(23,3404,1769,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(24,3404,1769,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(25,3404,1769,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(26,3404,1769,2,'kyo.lists$Lists$$Lambda$40+0x0000000800d0fb38')
f(23,5173,2803,1,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5')
f(24,5173,2803,2,'kyo.lists$Lists$$anon$11')
f(22,7976,2662,1,'scala/collection/mutable/ListBuffer.addOne')
f(23,7976,2662,2,'scala.collection.immutable.$colon$colon')
f(16,10638,3806,1,'kyo/bench/CollectAllBench.kyoBench')
f(17,10638,9,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(18,10638,9,2,'kyo.bench.CollectAllBench$$anon$2')
f(17,10647,9,1,'kyo/lists$Lists.collect')
f(18,10647,9,1,'scala/collection/mutable/ListBuffer$.apply')
f(19,10647,9,1,'scala/collection/IterableFactory.apply$')
f(20,10647,9,1,'scala/collection/IterableFactory.apply')
f(21,10647,9,1,'scala/collection/mutable/ListBuffer$.from')
f(22,10647,9,1,'scala/collection/mutable/ListBuffer$.from')
f(23,10647,9,2,'scala.collection.mutable.ListBuffer')
f(17,10656,2043,1,'scala/collection/AbstractIterable.toList')
f(18,10656,2043,1,'scala/collection/IterableOnceOps.toList$')
f(19,10656,2043,1,'scala/collection/IterableOnceOps.toList')
f(20,10656,2043,1,'scala/collection/immutable/List.prependedAll')
f(21,10656,2034,2,'scala.collection.immutable.$colon$colon')
f(21,12690,9,1,'scala/collection/immutable/Vector.iterator')
f(22,12690,9,2,'scala.collection.immutable.NewVectorIterator')
f(17,12699,1745,1,'scala/collection/immutable/Range.map')
f(18,12699,1175,1,'kyo/bench/CollectAllBench$$Lambda$39.0x0000000800cbeb88.apply')
f(19,12699,1175,1,'kyo/bench/CollectAllBench.$anonfun$adapted$1')
f(20,12699,1175,1,'kyo/bench/CollectAllBench.$anonfun$1')
f(21,12699,1175,2,'kyo.bench.CollectAllBench$$anon$1')
f(18,13874,9,1,'scala/collection/SeqFactory$Delegate.newBuilder')
f(19,13874,9,1,'scala/collection/immutable/Vector$.newBuilder')
f(20,13874,9,1,'scala/collection/immutable/Vector$.newBuilder')
f(21,13874,9,1,'scala/collection/immutable/VectorBuilder.<init>')
f(22,13874,9,2,'java.lang.Object[]')
f(18,13883,543,1,'scala/collection/immutable/VectorBuilder.addOne')
f(19,13883,543,1,'scala/collection/immutable/VectorBuilder.addOne')
f(20,13883,543,1,'scala/collection/immutable/VectorBuilder.advance')
f(21,13883,543,1,'scala/collection/immutable/VectorBuilder.advance1')
f(22,13883,9,2,'java.lang.Object[][]')
f(22,13892,534,2,'java.lang.Object[]')
f(18,14426,18,1,'scala/collection/immutable/VectorBuilder.result')
f(19,14426,18,1,'scala/collection/immutable/VectorBuilder.result')
f(20,14426,18,1,'java/util/Arrays.copyOfRange')
f(21,14426,18,2,'java.lang.Object[][]')
f(1,14444,5,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,14444,5,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,14444,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,14444,5,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,14444,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,14444,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,14444,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,14444,1,2,'org.openjdk.jmh.infra.Control')
f(8,14445,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,14445,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,14445,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,14445,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,14445,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,14445,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,14448,1,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,14448,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,14448,1,1,'java/lang/ClassLoader.loadClass')
f(10,14448,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,14448,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,14448,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,14448,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,14448,1,1,'jdk/internal/loader/URLClassPath.getResource')
f(15,14448,1,1,'jdk/internal/loader/URLClassPath$JarLoader.getResource')
f(16,14448,1,1,'java/util/jar/JarFile.getJarEntry')
f(17,14448,1,1,'java/util/jar/JarFile.getEntry')
f(18,14448,1,1,'java/util/zip/ZipFile.getEntry')
f(19,14448,1,1,'java/util/zip/ZipFile.getZipEntry')
f(20,14448,1,1,'java/util/jar/JavaUtilJarAccessImpl.entryFor')
f(21,14448,1,1,'java/util/jar/JarFile.entryFor')
f(22,14448,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,298,3,'all')
f(1,0,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,1,3,'thread_native_entry(Thread*)')
f(3,0,1,4,'Thread::call_run()')
f(4,0,1,4,'VMThread::run()')
f(5,0,1,4,'VMThread::inner_execute(VM_Operation*)')
f(6,0,1,4,'VMThread::evaluate_operation(VM_Operation*)')
f(7,0,1,4,'VM_Operation::evaluate()')
f(8,0,1,4,'VM_G1CollectForAllocation::doit()')
f(9,0,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint(double)')
f(10,0,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint_helper(double)')
f(11,0,1,4,'G1CollectedHeap::post_evacuate_collection_set(G1EvacuationInfo&, G1RedirtyCardsQueueSet*, G1ParScanThreadStateSet*)')
f(12,0,1,4,'G1CollectedHeap::post_evacuate_cleanup_1(G1ParScanThreadStateSet*, G1RedirtyCardsQueueSet*)')
f(13,0,1,4,'WorkGang::run_task(AbstractGangTask*, unsigned int, bool)')
f(14,0,1,3,'sem_post')
f(15,0,1,5,'entry_SYSCALL_64_after_hwframe')
f(16,0,1,5,'do_syscall_64')
f(17,0,1,5,'__x64_sys_futex')
f(18,0,1,5,'do_futex')
f(19,0,1,5,'futex_wake')
f(20,0,1,5,'wake_up_q')
f(21,0,1,5,'_raw_spin_unlock_irqrestore')
f(1,1,297,1,'java/lang/Thread.run')
f(2,1,297,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,1,297,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,1,297,1,'java/util/concurrent/FutureTask.run')
f(5,1,297,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,1,297,1,'java/util/concurrent/FutureTask.run')
f(7,1,297,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,1,297,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,1,297,1,'java/lang/reflect/Method.invoke')
f(10,1,297,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,1,297,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,1,297,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,1,297,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,1,297,1,'kyo/bench/jmh_generated/CollectAllBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,1,297,1,'kyo/bench/Bench.syncKyo',60,0,0)
f(16,1,197,1,'kyo/bench/Bench.runLoop$1',10,0,0)
f(17,11,187,1,'kyo/bench/CollectAllBench$$anon$2.apply')
f(18,13,57,1,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1')
f(19,13,57,1,'kyo/bench/CollectAllBench$$Lambda$41.0x0000000800d24940.apply')
f(20,13,57,2,'kyo/bench/CollectAllBench.$anonfun$2',43,0,0)
f(21,13,57,2,'scala/collection/AbstractIterable.sum',43,0,0)
f(22,13,57,2,'scala/collection/IterableOnceOps.sum$',43,0,0)
f(23,13,57,2,'scala/collection/IterableOnceOps.sum',43,0,0)
f(24,13,57,2,'scala/collection/AbstractIterable.reduce',43,0,0)
f(25,13,57,2,'scala/collection/IterableOnceOps.reduce$',43,0,0)
f(26,13,57,2,'scala/collection/IterableOnceOps.reduce',43,0,0)
f(27,13,57,2,'scala/collection/AbstractIterable.reduceLeft',43,0,0)
f(28,13,57,2,'scala/collection/IterableOnceOps.reduceLeft$',43,0,0)
f(29,13,57,2,'scala/collection/IterableOnceOps.reduceLeft',43,0,0)
f(30,15,45,2,'scala/collection/IterableOnceOps$$Lambda$42.0x0000000800d2a090.apply',31,0,0)
f(31,15,45,2,'scala/collection/IterableOnceOps.$anonfun$sum$1',31,0,0)
f(32,15,45,2,'scala/math/Numeric$IntIsIntegral$.plus',31,0,0)
f(33,15,42,2,'scala/runtime/BoxesRunTime.boxToInteger',28,0,0)
f(34,41,16,1,'java/lang/Integer.valueOf',2,0,0)
f(35,42,15,1,'java/lang/Integer.<init>',1,0,0)
f(36,43,14,1,'java/lang/Number.<init>')
f(33,57,3,2,'scala/runtime/BoxesRunTime.unboxToInt',3,0,0)
f(30,60,10,2,'scala/collection/StrictOptimizedLinearSeqOps$$anon$1.next',10,0,0)
f(31,68,1,2,'scala/collection/immutable/$colon$colon.head',1,0,0)
f(31,69,1,2,'scala/collection/immutable/$colon$colon.tail',1,0,0)
f(32,69,1,2,'scala/collection/immutable/$colon$colon.tail',1,0,0)
f(33,69,1,2,'scala/collection/immutable/$colon$colon.next',1,0,0)
f(18,70,128,2,'kyo/lists$Lists$$anon$11.apply',128,0,0)
f(19,73,91,2,'kyo/bench/CollectAllBench$$anon$1.apply',91,0,0)
f(20,81,83,2,'kyo/bench/CollectAllBench$$anon$1.apply',83,0,0)
f(21,81,83,2,'scala/runtime/BoxesRunTime.boxToInteger',83,0,0)
f(19,164,34,2,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5',34,0,0)
f(20,166,32,2,'kyo/lists$Lists$$Lambda$40.0x0000000800d0fb38.apply',32,0,0)
f(21,166,32,2,'kyo/lists$Lists.$anonfun$5',32,0,0)
f(22,166,10,2,'kyo/lists$Lists.loop$2',10,0,0)
f(23,166,10,2,'scala/collection/immutable/List.equals',10,0,0)
f(22,176,22,2,'scala/collection/mutable/ListBuffer.addOne',22,0,0)
f(23,177,3,2,'scala/collection/immutable/$colon$colon.<init>',3,0,0)
f(24,177,3,2,'scala/runtime/Statics.releaseFence',3,0,0)
f(23,180,8,2,'scala/collection/immutable/$colon$colon.next_$eq',8,0,0)
f(23,188,10,2,'scala/collection/mutable/ListBuffer.first_$eq',10,0,0)
f(16,198,100,2,'kyo/bench/CollectAllBench.kyoBench',50,0,0)
f(17,205,6,2,'kyo/bench/CollectAllBench.kyo$bench$CollectAllBench$$_$transformLoop$1',6,0,0)
f(17,211,1,1,'kyo/lists$Lists.collect')
f(18,211,1,1,'kyo/lists$Lists.loop$2')
f(19,211,1,2,'kyo/lists$Lists.kyo$lists$Lists$$_$transformLoop$5',1,0,0)
f(20,211,1,2,'kyo/lists$Lists$$Lambda$40.0x0000000800d0fb38.apply',1,0,0)
f(21,211,1,2,'kyo/lists$Lists.$anonfun$5',1,0,0)
f(22,211,1,2,'scala/collection/mutable/ListBuffer.addOne',1,0,0)
f(23,211,1,2,'scala/collection/immutable/$colon$colon.<init>',1,0,0)
f(24,211,1,2,'scala/runtime/Statics.releaseFence',1,0,0)
f(25,211,1,2,'java/lang/invoke/LambdaForm$MH.0x0000000800ca0400.invoke_MT',1,0,0)
f(26,211,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca0800.invokeStatic',1,0,0)
f(17,212,48,1,'scala/collection/AbstractIterable.toList')
f(18,212,48,1,'scala/collection/IterableOnceOps.toList$')
f(19,212,48,1,'scala/collection/IterableOnceOps.toList')
f(20,212,48,1,'scala/collection/immutable/List.prependedAll')
f(21,221,26,2,'scala/collection/immutable/$colon$colon.<init>',26,0,0)
f(22,228,19,2,'scala/runtime/Statics.releaseFence',19,0,0)
f(23,228,19,2,'java/lang/invoke/LambdaForm$MH.0x0000000800ca0400.invoke_MT',19,0,0)
f(24,228,19,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800ca0800.invokeStatic',19,0,0)
f(21,247,13,2,'scala/collection/immutable/NewVectorIterator.next',12,0,0)
f(22,247,13,2,'scala/collection/immutable/NewVectorIterator.advance',12,0,0)
f(23,247,13,2,'scala/collection/immutable/NewVectorIterator.advanceSlice',12,0,0)
f(24,259,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(25,259,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(26,259,1,4,'MemAllocator::Allocation::notify_allocation_jfr_sampler()')
f(17,260,16,2,'scala/collection/immutable/Range.map',15,0,0)
f(18,264,3,2,'scala/collection/SeqFactory$Delegate.newBuilder',3,0,0)
f(19,265,2,2,'scala/collection/immutable/Vector$.newBuilder',2,0,0)
f(20,265,2,2,'scala/collection/immutable/Vector$.newBuilder',2,0,0)
f(21,265,2,2,'scala/collection/immutable/VectorBuilder.<init>',2,0,0)
f(18,267,7,2,'scala/collection/immutable/Range.iterator',7,0,0)
f(19,271,3,2,'scala/collection/immutable/RangeIterator.<init>',3,0,0)
f(20,273,1,2,'scala/collection/AbstractIterator.<init>',1,0,0)
f(18,274,1,2,'scala/collection/immutable/RangeIterator.next',1,0,0)
f(18,275,1,1,'scala/collection/immutable/VectorBuilder.addOne')
f(19,275,1,1,'scala/collection/immutable/VectorBuilder.addOne')
f(20,275,1,1,'scala/collection/immutable/VectorBuilder.advance')
f(21,275,1,1,'scala/collection/immutable/VectorBuilder.advance1')
f(17,276,22,2,'scala/runtime/RichInt$.until$extension',22,0,0)
f(18,276,22,2,'scala/collection/immutable/Range$Exclusive.<init>',22,0,0)
f(19,276,22,2,'scala/collection/immutable/Range.<init>',22,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,20553,3,'all')
f(1,0,20549,1,'java/lang/Thread.run')
f(2,0,20549,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,20549,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,3862,1,'java/util/concurrent/FutureTask.run')
f(5,0,3862,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,3862,1,'java/util/concurrent/FutureTask.run')
f(7,0,3862,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,3862,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,3862,1,'java/lang/reflect/Method.invoke')
f(10,0,3862,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,3862,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,3862,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,3862,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,3860,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,3860,1,'kyo/bench/Bench.forkKyo')
f(16,0,587,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,587,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,587,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,165,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,0,165,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c81350')
f(19,165,422,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c81350')
f(16,587,754,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,587,754,2,'kyo.bench.Bench$$anon$1')
f(16,1341,2175,1,'kyo/bench/Bench.runLoop$2')
f(17,1341,819,1,'kyo/bench/Bench$$anon$1.apply')
f(18,1341,307,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,1341,307,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c88000.apply')
f(20,1341,307,1,'kyo/bench/Bench.$anonfun$2')
f(21,1341,307,1,'kyo/concurrent/fibers$Fiber.block')
f(22,1341,307,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,1648,512,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,1648,512,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,1648,512,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply')
f(21,1648,512,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,1648,74,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,1722,351,2,'kyo.concurrent.scheduler.IOTask')
f(22,2073,87,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,2073,87,2,'kyo.concurrent.fibers$Fiber')
f(17,2160,1356,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,2160,1356,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,2160,1356,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,2160,1356,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,2160,573,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,2160,573,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,2160,124,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,2284,449,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,2284,449,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,2733,448,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,3181,335,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,3181,335,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,3181,335,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,3516,344,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,3516,67,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,3516,67,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,3516,67,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,3516,67,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c82aa8')
f(17,3583,170,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,3583,170,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,3753,107,1,'kyo/locals$Locals$.save')
f(18,3753,107,2,'kyo.locals$Locals$$anon$3')
f(14,3860,1,2,'org.openjdk.jmh.results.ThroughputResult')
f(14,3861,1,1,'org/openjdk/jmh/results/ThroughputResult.<init>')
f(15,3861,1,2,'java.lang.StringBuilder')
f(4,3862,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ee58.run')
f(5,3862,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,3862,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,3862,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,3862,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,3862,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,3862,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,3862,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,3873,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f080.run')
f(5,3873,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,3873,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,3873,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,3873,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,3873,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,3873,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,3873,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$68+0x0000000800d4ed20')
f(4,3884,16665,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23480.run')
f(5,3884,16665,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,3884,16665,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,3884,16662,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,3884,16662,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,3884,16474,1,'kyo/bench/CountdownLatchBench$$anon$1.apply')
f(10,3884,16470,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(11,3884,16470,1,'kyo/bench/CountdownLatchBench$$Lambda$62.0x0000000800d4d100.apply')
f(12,3884,16470,1,'kyo/bench/CountdownLatchBench.$anonfun$1')
f(13,3884,16470,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(14,3884,7106,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod')
f(15,3884,7106,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial')
f(16,3884,7106,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,3884,7106,2,'kyo.bench.CountdownLatchBench$$Lambda$62+0x0000000800d4d100')
f(14,10990,9364,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(15,10990,9364,2,'kyo.bench.CountdownLatchBench$$anon$1')
f(10,20354,4,1,'kyo/concurrent/latches$$anon$4.apply')
f(11,20354,4,1,'kyo/concurrent/latches$$anon$4.apply')
f(12,20354,4,1,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete')
f(13,20354,4,1,'kyo/concurrent/fibers$Fiber$Promise.loop$23')
f(14,20354,4,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(15,20354,4,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(16,20354,4,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(17,20354,4,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(18,20354,4,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(19,20354,4,1,'scala/runtime/function/JProcedure1.apply')
f(20,20354,4,1,'scala/runtime/function/JProcedure1.apply')
f(21,20354,4,1,'kyo/concurrent/scheduler/IOTask$$Lambda$64.0x0000000800d4dad8.applyVoid')
f(22,20354,4,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(23,20354,2,2,'kyo.concurrent.scheduler.IOTask')
f(23,20356,2,1,'kyo/concurrent/scheduler/IOPromise.become')
f(24,20356,2,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(25,20356,1,1,'kyo/concurrent/scheduler/IOPromise$Linked$.apply')
f(26,20356,1,2,'kyo.concurrent.scheduler.IOPromise$Linked')
f(25,20357,1,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(26,20357,1,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(27,20357,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(28,20357,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(9,20358,1,1,'kyo/bench/CountdownLatchBench$$anon$3.apply')
f(10,20358,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,20358,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,20358,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply')
f(13,20358,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,20358,1,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(9,20359,11,1,'kyo/bench/CountdownLatchBench$$anon$4.apply')
f(10,20359,7,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$4')
f(11,20359,7,1,'kyo/bench/CountdownLatchBench$$Lambda$57.0x0000000800d4a930.apply')
f(12,20359,7,1,'kyo/bench/CountdownLatchBench.$anonfun$2')
f(13,20359,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(14,20359,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(15,20359,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,20359,2,2,'kyo.bench.CountdownLatchBench$$Lambda$59+0x0000000800d4c6a8')
f(13,20361,3,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$3')
f(14,20361,3,2,'kyo.bench.CountdownLatchBench$$anon$3')
f(13,20364,2,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(14,20364,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(15,20364,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(16,20364,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,20364,1,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c82aa8')
f(14,20365,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(15,20365,1,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(10,20366,4,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(11,20366,4,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(12,20366,2,2,'kyo.concurrent.latches$$anon$3')
f(12,20368,2,1,'kyo/concurrent/latches$$anon$3.<init>')
f(13,20368,2,1,'kyo/concurrent/fibers$Fibers.unsafePromise')
f(14,20368,2,2,'kyo.concurrent.scheduler.IOPromise')
f(9,20370,174,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,20370,174,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,20370,173,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c81350.apply')
f(12,20370,173,1,'kyo/bench/Bench.$anonfun$1')
f(13,20370,173,1,'kyo/bench/CountdownLatchBench.kyoBenchFiber')
f(14,20370,1,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$4')
f(15,20370,1,2,'kyo.bench.CountdownLatchBench$$anon$4')
f(14,20371,172,1,'kyo/concurrent/latches$Latches$.init')
f(15,20371,172,1,'kyo/concurrent/latches$Latches$.kyo$concurrent$latches$Latches$$$_$transformLoop$1')
f(16,20371,172,1,'kyo/concurrent/latches$Latches$$$Lambda$56.0x0000000800d49870.apply')
f(17,20371,172,1,'kyo/concurrent/latches$Latches$.$anonfun$adapted$1')
f(18,20371,172,1,'kyo/concurrent/latches$Latches$.$anonfun$1')
f(19,20371,172,2,'kyo.concurrent.latches$Latches$$anon$2')
f(11,20543,1,1,'kyo/bench/CountdownLatchBench$$Lambda$58.0x0000000800d4c3e8.apply')
f(12,20543,1,1,'kyo/bench/CountdownLatchBench.$anonfun$3')
f(13,20543,1,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(14,20543,1,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(15,20543,1,2,'kyo.bench.CountdownLatchBench$$anon$1')
f(9,20544,2,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,20544,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,20544,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,20544,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,20544,2,2,'kyo.concurrent.scheduler.IOTask$$Lambda$64+0x0000000800d4dad8')
f(7,20546,3,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,20546,3,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,20546,3,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,20546,3,1,'scala/runtime/ObjectRef.create')
f(11,20546,3,2,'scala.runtime.ObjectRef')
f(1,20549,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,20549,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,20549,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,20549,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,20549,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,20549,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,20549,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,20549,1,2,'org.openjdk.jmh.infra.Control')
f(8,20550,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,20550,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,20550,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,20550,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,20550,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,20550,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,281,3,'all')
f(1,0,5,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,5,3,'thread_native_entry(Thread*)')
f(3,0,5,4,'Thread::call_run()')
f(4,0,4,4,'JavaThread::thread_main_inner()')
f(5,0,4,4,'CompileBroker::compiler_thread_loop()')
f(6,0,4,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,4,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,4,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,3,4,'Compile::Code_Gen()')
f(10,0,1,4,'PhaseCFG::do_global_code_motion()')
f(11,0,1,4,'PhaseCFG::global_code_motion()')
f(12,0,1,4,'PhaseLive::compute(unsigned int)')
f(13,0,1,4,'PhaseLive::add_liveout(Block*, IndexSet*, VectorSet&)')
f(10,1,1,4,'PhaseChaitin::Register_Allocate()')
f(11,1,1,4,'PhaseChaitin::build_ifg_physical(ResourceArea*)')
f(12,1,1,4,'PhaseChaitin::interfere_with_live(unsigned int, IndexSet*) [clone .part.0]')
f(10,2,1,4,'PhaseOutput::install()')
f(11,2,1,4,'PhaseOutput::install_code(ciMethod*, int, AbstractCompiler*, bool, bool, RTMState)')
f(12,2,1,4,'ciEnv::register_method(ciMethod*, int, CodeOffsets*, int, CodeBuffer*, int, OopMapSet*, ExceptionHandlerTable*, ImplicitExceptionTable*, AbstractCompiler*, bool, bool, RTMState, GrowableArrayView<RuntimeStub*> const&)')
f(13,2,1,4,'CodeBuffer::free_blob()')
f(14,2,1,4,'BufferBlob::free(BufferBlob*)')
f(9,3,1,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,'IdealLoopTree::counted_loop(PhaseIdealLoop*)')
f(13,3,1,4,'IdealLoopTree::counted_loop(PhaseIdealLoop*)')
f(14,3,1,4,'CmpNode::operates_on(BasicType, bool) const')
f(4,4,1,4,'VMThread::run()')
f(5,4,1,4,'VMThread::inner_execute(VM_Operation*)')
f(6,4,1,4,'VMThread::evaluate_operation(VM_Operation*)')
f(7,4,1,4,'VM_Operation::evaluate()')
f(8,4,1,4,'VM_G1CollectForAllocation::doit()')
f(9,4,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint(double)')
f(10,4,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint_helper(double)')
f(11,4,1,4,'G1CollectedHeap::evacuate_initial_collection_set(G1ParScanThreadStateSet*, bool)')
f(12,4,1,4,'WorkGang::run_task(AbstractGangTask*, unsigned int, bool)')
f(13,4,1,3,'sem_post')
f(14,4,1,5,'entry_SYSCALL_64_after_hwframe')
f(15,4,1,5,'do_syscall_64')
f(16,4,1,5,'__x64_sys_futex')
f(17,4,1,5,'do_futex')
f(18,4,1,5,'futex_wake')
f(19,4,1,5,'wake_up_q')
f(20,4,1,5,'_raw_spin_unlock_irqrestore')
f(1,5,276,1,'java/lang/Thread.run')
f(2,5,276,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,5,276,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,5,13,1,'java/util/concurrent/FutureTask.run')
f(5,5,13,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,5,13,1,'java/util/concurrent/FutureTask.run')
f(7,5,13,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,5,13,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,5,13,1,'java/lang/reflect/Method.invoke')
f(10,5,13,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,5,13,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,5,13,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,5,13,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,5,13,1,'kyo/bench/jmh_generated/CountdownLatchBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,5,13,1,'kyo/bench/Bench.forkKyo',1,0,0)
f(16,5,1,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(16,6,12,1,'kyo/bench/Bench.runLoop$2',1,0,0)
f(17,6,4,1,'kyo/bench/Bench$$anon$1.apply')
f(18,6,4,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,6,4,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,6,4,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply')
f(21,6,4,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,6,4,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,6,4,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,6,4,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,6,4,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,6,4,1,'jdk/internal/misc/Unsafe.unpark')
f(27,6,4,3,'pthread_cond_signal')
f(28,6,4,5,'entry_SYSCALL_64_after_hwframe')
f(29,6,4,5,'do_syscall_64')
f(30,6,4,5,'__x64_sys_futex')
f(31,6,4,5,'do_futex')
f(32,6,4,5,'futex_wake')
f(33,7,3,5,'wake_up_q')
f(34,7,3,5,'_raw_spin_unlock_irqrestore')
f(17,10,8,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply',1,0,0)
f(18,10,8,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply',1,0,0)
f(19,10,8,1,'kyo/concurrent/scheduler/IOPromise.block',1,0,0)
f(20,10,8,1,'kyo/concurrent/scheduler/IOPromise.loop$4',1,0,0)
f(21,10,7,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,10,7,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,10,7,1,'java/util/concurrent/locks/LockSupport.park')
f(24,10,7,1,'jdk/internal/misc/Unsafe.park')
f(25,10,7,3,'[unknown]')
f(26,10,7,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,10,7,5,'entry_SYSCALL_64_after_hwframe')
f(28,10,7,5,'do_syscall_64')
f(29,10,7,5,'__x64_sys_futex')
f(30,10,7,5,'do_futex')
f(31,10,7,5,'futex_wait')
f(32,10,6,5,'futex_wait_queue_me')
f(33,10,6,5,'schedule')
f(34,11,5,5,'__schedule')
f(35,11,5,5,'finish_task_switch.isra.0')
f(32,16,1,5,'hash_futex')
f(21,17,1,2,'kyo/concurrent/scheduler/IOPromise.loop$5',1,0,0)
f(22,17,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(23,17,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(24,17,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(4,18,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ee58.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,1,'java/lang/Thread.sleep')
f(4,19,262,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23480.run')
f(5,19,262,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,19,262,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,19,255,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,19,255,2,'kyo/concurrent/scheduler/IOTask.eval',244,0,0)
f(9,31,231,2,'kyo/bench/CountdownLatchBench$$anon$1.apply',231,0,0)
f(10,54,49,2,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1',49,0,0)
f(11,59,44,2,'kyo/bench/CountdownLatchBench$$Lambda$62.0x0000000800d4d100.apply',44,0,0)
f(12,59,44,2,'kyo/bench/CountdownLatchBench.$anonfun$1',44,0,0)
f(13,71,32,2,'kyo/bench/CountdownLatchBench.iterate$2',32,0,0)
f(14,85,18,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod',18,0,0)
f(15,87,16,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial',16,0,0)
f(10,103,159,2,'kyo/concurrent/latches$$anon$4.apply',159,0,0)
f(11,105,157,2,'kyo/concurrent/latches$$anon$4.apply',157,0,0)
f(12,187,69,2,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete',69,0,0)
f(13,189,67,2,'kyo/concurrent/fibers$Fiber$Promise.loop$23',67,0,0)
f(14,194,11,2,'java/util/concurrent/atomic/AtomicReference.get',11,0,0)
f(14,205,51,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',51,0,0)
f(15,205,51,2,'kyo/concurrent/scheduler/IOPromise.complete',51,0,0)
f(16,206,35,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',35,0,0)
f(17,213,28,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',28,0,0)
f(18,215,1,2,'java/lang/invoke/VarForm.getMemberName',1,0,0)
f(19,215,1,2,'java/lang/invoke/VarForm.getMemberNameOrNull',1,0,0)
f(18,216,25,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',25,0,0)
f(16,241,15,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',15,0,0)
f(17,241,15,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',15,0,0)
f(12,256,6,2,'kyo/concurrent/latches$$anon$3.count',6,0,0)
f(9,262,2,1,'kyo/bench/CountdownLatchBench$$anon$3.apply')
f(10,262,2,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,262,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,262,1,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c82aa8.apply',1,0,0)
f(13,262,1,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',1,0,0)
f(12,263,1,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',1,0,0)
f(13,263,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(9,264,1,1,'kyo/bench/CountdownLatchBench$$anon$4.apply')
f(10,264,1,2,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$4',1,0,0)
f(11,264,1,2,'kyo/bench/CountdownLatchBench$$Lambda$57.0x0000000800d4a700.apply',1,0,0)
f(12,264,1,2,'kyo/bench/CountdownLatchBench.$anonfun$2',1,0,0)
f(13,264,1,2,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$3',1,0,0)
f(14,264,1,2,'kyo/bench/CountdownLatchBench$$Lambda$59.0x0000000800d4c6a8.apply',1,0,0)
f(15,264,1,2,'kyo/bench/CountdownLatchBench.$anonfun$4',1,0,0)
f(16,264,1,2,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$2',1,0,0)
f(17,264,1,2,'kyo/bench/CountdownLatchBench$$Lambda$60.0x0000000800d4ca78.apply',1,0,0)
f(18,264,1,2,'kyo/bench/CountdownLatchBench.$anonfun$5',1,0,0)
f(19,264,1,2,'scala/runtime/BoxesRunTime.boxToInteger',1,0,0)
f(9,265,8,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,265,8,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,265,8,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,265,8,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,265,8,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,265,8,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,265,8,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,265,8,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,265,8,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,265,8,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,265,8,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,265,8,1,'jdk/internal/misc/Unsafe.unpark')
f(21,265,8,3,'pthread_cond_signal')
f(22,266,7,5,'entry_SYSCALL_64_after_hwframe')
f(23,266,7,5,'do_syscall_64')
f(24,266,7,5,'__x64_sys_futex')
f(25,266,7,5,'do_futex')
f(26,266,7,5,'futex_wake')
f(27,266,7,5,'wake_up_q')
f(28,266,7,5,'_raw_spin_unlock_irqrestore')
f(9,273,1,2,'kyo/concurrent/scheduler/IOTask.st',1,0,0)
f(7,274,7,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,274,7,1,'kyo/concurrent/scheduler/Worker.park')
f(9,274,7,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,274,7,1,'jdk/internal/misc/Unsafe.park')
f(11,274,7,3,'[unknown]')
f(12,274,7,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,274,7,5,'entry_SYSCALL_64_after_hwframe')
f(14,274,7,5,'do_syscall_64')
f(15,274,6,5,'__x64_sys_futex')
f(16,274,6,5,'do_futex')
f(17,274,6,5,'futex_wait')
f(18,274,2,5,'__get_user_nocheck_4')
f(18,276,4,5,'futex_wait_queue_me')
f(19,276,1,5,'hrtimer_sleeper_start_expires')
f(20,276,1,5,'_raw_spin_unlock_irqrestore')
f(19,277,3,5,'schedule')
f(20,277,3,5,'__schedule')
f(21,277,3,5,'finish_task_switch.isra.0')
f(15,280,1,5,'get_timespec64')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 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,19223,3,'all')
f(1,0,19220,1,'java/lang/Thread.run')
f(2,0,19220,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,19220,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,2963,1,'java/util/concurrent/FutureTask.run')
f(5,0,2963,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,2963,1,'java/util/concurrent/FutureTask.run')
f(7,0,2963,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,2963,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,2963,1,'java/lang/reflect/Method.invoke')
f(10,0,2963,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,2963,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,2963,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,2963,1,'kyo/bench/jmh_generated/CountdownLatchBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,2963,1,'kyo/bench/jmh_generated/CountdownLatchBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,2963,1,'kyo/bench/Bench.syncKyo')
f(16,0,1357,1,'kyo/bench/Bench.runLoop$1')
f(17,0,558,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,558,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,558,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,558,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,303,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,303,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,139,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,139,164,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,139,164,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,303,149,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,452,106,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,452,106,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,452,106,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,558,799,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,558,630,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,558,630,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,558,630,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,558,381,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,558,381,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,558,381,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(24,558,381,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,558,44,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(25,602,303,2,'kyo.concurrent.scheduler.IOTask')
f(25,905,22,1,'kyo/concurrent/fibers$Fiber$.promise')
f(26,905,22,2,'kyo.concurrent.fibers$Fiber')
f(25,927,12,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,927,12,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,927,12,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(28,927,12,1,'kyo/concurrent/scheduler/Queue.offer')
f(29,927,12,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(30,927,12,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(31,927,12,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(32,927,12,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(33,927,12,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d478c8')
f(21,939,249,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,939,249,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c88000.apply')
f(23,939,249,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,939,249,1,'kyo/concurrent/fibers$Fiber.join')
f(25,939,249,1,'kyo/concurrent/fibers$Fibers.get')
f(26,939,249,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,939,249,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,1188,169,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,1188,169,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c885f8.apply')
f(20,1188,169,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,1188,169,1,'kyo/concurrent/fibers$Fiber.block')
f(22,1188,169,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,1357,1606,1,'kyo/bench/CountdownLatchBench.kyoBench')
f(17,1357,244,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1357,244,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1357,244,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1357,78,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(21,1357,78,2,'kyo.bench.CountdownLatchBench$$Lambda$37+0x0000000800c81148')
f(20,1435,166,2,'kyo.bench.CountdownLatchBench$$Lambda$37+0x0000000800c81148')
f(17,1601,728,1,'kyo/concurrent/fibers$Fibers.block')
f(18,1601,64,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,1601,64,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,1601,64,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,1601,64,2,'kyo.concurrent.fibers$Fibers$$Lambda$40+0x0000000800c885f8')
f(18,1665,52,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,1665,52,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,1717,441,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,1717,441,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,2158,171,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,2158,171,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,2329,634,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,2329,99,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,2329,99,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,2329,99,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,2329,99,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c88000')
f(18,2428,426,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,2428,180,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,2428,180,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,2428,180,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,2428,180,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c828a0')
f(19,2608,165,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,2608,165,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(19,2773,81,1,'kyo/locals$Locals$.save')
f(20,2773,81,2,'kyo.locals$Locals$$anon$3')
f(18,2854,109,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,2854,109,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(4,2963,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ee58.run')
f(5,2963,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,2963,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,2963,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,2963,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,2963,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,2963,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,2963,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,2974,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1f080.run')
f(5,2974,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,2974,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,2974,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,2974,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,2974,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,2974,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,2974,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$67+0x0000000800d4e7a0')
f(4,2985,16235,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23480.run')
f(5,2985,16235,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,2985,16235,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,2985,16234,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,2985,16234,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,2985,16066,1,'kyo/bench/CountdownLatchBench$$anon$1.apply')
f(10,2985,16063,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(11,2985,16063,1,'kyo/bench/CountdownLatchBench$$Lambda$63.0x0000000800d4d100.apply')
f(12,2985,16063,1,'kyo/bench/CountdownLatchBench.$anonfun$1')
f(13,2985,16063,1,'kyo/bench/CountdownLatchBench.iterate$2')
f(14,2985,6807,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod')
f(15,2985,6807,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial')
f(16,2985,6807,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,2985,6807,2,'kyo.bench.CountdownLatchBench$$Lambda$63+0x0000000800d4d100')
f(14,9792,9256,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1')
f(15,9792,9256,2,'kyo.bench.CountdownLatchBench$$anon$1')
f(10,19048,3,1,'kyo/concurrent/latches$$anon$4.apply')
f(11,19048,3,1,'kyo/concurrent/latches$$anon$4.apply')
f(12,19048,3,1,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete')
f(13,19048,3,1,'kyo/concurrent/fibers$Fiber$Promise.loop$23')
f(14,19048,3,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(15,19048,3,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(16,19048,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(17,19048,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(18,19048,3,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(19,19048,3,1,'scala/runtime/function/JProcedure1.apply')
f(20,19048,3,1,'scala/runtime/function/JProcedure1.apply')
f(21,19048,3,1,'kyo/concurrent/scheduler/IOTask$$Lambda$65.0x0000000800d4dad8.applyVoid')
f(22,19048,3,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(23,19048,3,2,'kyo.concurrent.scheduler.IOTask')
f(9,19051,1,1,'kyo/bench/CountdownLatchBench$$anon$3.apply')
f(10,19051,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,19051,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,19051,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(13,19051,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,19051,1,1,'kyo/concurrent/fibers$Fiber$.promise')
f(15,19051,1,2,'kyo.concurrent.fibers$Fiber')
f(9,19052,16,1,'kyo/bench/CountdownLatchBench$$anon$4.apply')
f(10,19052,6,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$4')
f(11,19052,6,1,'kyo/bench/CountdownLatchBench$$Lambda$58.0x0000000800d4b1e0.apply')
f(12,19052,6,1,'kyo/bench/CountdownLatchBench.$anonfun$2')
f(13,19052,3,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(14,19052,3,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(15,19052,3,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,19052,3,2,'kyo.bench.CountdownLatchBench$$Lambda$59+0x0000000800d4c3e8')
f(13,19055,1,1,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$3')
f(14,19055,1,2,'kyo.bench.CountdownLatchBench$$anon$3')
f(13,19056,2,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(14,19056,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(15,19056,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(16,19056,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,19056,2,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c828a0')
f(10,19058,10,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(11,19058,10,1,'kyo/concurrent/latches$Latches$$anon$2.apply')
f(12,19058,5,2,'kyo.concurrent.latches$$anon$3')
f(12,19063,5,1,'kyo/concurrent/latches$$anon$3.<init>')
f(13,19063,1,2,'java.util.concurrent.atomic.AtomicInteger')
f(13,19064,1,2,'kyo.concurrent.latches$$anon$5')
f(13,19065,1,1,'kyo/concurrent/fibers$Fiber.join')
f(14,19065,1,1,'kyo/concurrent/fibers$Fibers.get')
f(15,19065,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(16,19065,1,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(13,19066,2,1,'kyo/concurrent/fibers$Fibers.unsafePromise')
f(14,19066,2,2,'kyo.concurrent.scheduler.IOPromise')
f(9,19068,147,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,19068,147,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,19068,147,1,'kyo/bench/CountdownLatchBench$$Lambda$37.0x0000000800c81148.apply')
f(12,19068,147,1,'kyo/bench/CountdownLatchBench.kyoBench$$anonfun$1')
f(13,19068,147,1,'kyo/bench/CountdownLatchBench.kyoBenchFiber')
f(14,19068,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(15,19068,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(16,19068,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,19068,2,2,'kyo.bench.CountdownLatchBench$$Lambda$58+0x0000000800d4b1e0')
f(14,19070,145,1,'kyo/concurrent/latches$Latches$.init')
f(15,19070,145,1,'kyo/concurrent/latches$Latches$.kyo$concurrent$latches$Latches$$$_$transformLoop$1')
f(16,19070,145,1,'kyo/concurrent/latches$Latches$$$Lambda$57.0x0000000800d49aa0.apply')
f(17,19070,145,1,'kyo/concurrent/latches$Latches$.$anonfun$adapted$1')
f(18,19070,145,1,'kyo/concurrent/latches$Latches$.$anonfun$1')
f(19,19070,145,2,'kyo.concurrent.latches$Latches$$anon$2')
f(9,19215,2,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,19215,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,19215,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,19215,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,19215,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$64+0x0000000800d4d6d0')
f(10,19216,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,19216,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(9,19217,2,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,19217,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,19217,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,19217,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,19217,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$65+0x0000000800d4dad8')
f(10,19218,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,19218,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,19219,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,19219,1,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,19219,1,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,19219,1,1,'scala/runtime/ObjectRef.create')
f(11,19219,1,2,'scala.runtime.ObjectRef')
f(1,19220,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,19220,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,19220,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,19220,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,19220,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,19220,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,19220,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,19220,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,19220,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,19220,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,19220,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,19220,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,19220,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 608px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(38);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,277,3,'all')
f(1,0,4,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,4,3,'thread_native_entry(Thread*)')
f(3,0,4,4,'Thread::call_run()')
f(4,0,3,4,'JavaThread::thread_main_inner()')
f(5,0,3,4,'CompileBroker::compiler_thread_loop()')
f(6,0,3,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,3,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,3,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,2,4,'Compile::Code_Gen()')
f(10,0,1,4,'PhaseCFG::do_global_code_motion()')
f(11,0,1,4,'PhaseCFG::estimate_block_frequency()')
f(12,0,1,4,'CFGLoop::compute_freq()')
f(13,0,1,4,'CProjNode::is_block_proj() const')
f(10,1,1,4,'PhaseChaitin::Register_Allocate()')
f(11,1,1,4,'PhaseChaitin::build_ifg_physical(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_early(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::start_new_collection_set()')
f(1,4,273,1,'java/lang/Thread.run')
f(2,4,273,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,4,273,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,4,16,1,'java/util/concurrent/FutureTask.run')
f(5,4,16,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,4,16,1,'java/util/concurrent/FutureTask.run')
f(7,4,16,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,4,16,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,4,16,1,'java/lang/reflect/Method.invoke')
f(10,4,16,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,4,16,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,4,16,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,4,16,1,'kyo/bench/jmh_generated/CountdownLatchBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,4,16,1,'kyo/bench/jmh_generated/CountdownLatchBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,4,16,1,'kyo/bench/Bench.syncKyo')
f(16,4,15,1,'kyo/bench/Bench.runLoop$1')
f(17,4,4,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,4,4,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,4,4,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,4,4,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,4,4,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,4,4,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,4,4,1,'java/util/concurrent/locks/LockSupport.park')
f(24,4,4,1,'jdk/internal/misc/Unsafe.park')
f(25,5,3,3,'[unknown]')
f(26,5,3,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,5,3,5,'entry_SYSCALL_64_after_hwframe')
f(28,5,3,5,'do_syscall_64')
f(29,5,3,5,'__x64_sys_futex')
f(30,5,3,5,'do_futex')
f(31,5,3,5,'futex_wait')
f(32,6,2,5,'futex_wait_queue_me')
f(33,6,2,5,'schedule')
f(34,6,2,5,'__schedule')
f(35,6,2,5,'finish_task_switch.isra.0')
f(17,8,11,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,8,11,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,8,11,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,8,11,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,8,11,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,8,11,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,8,11,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(24,8,11,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,8,11,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,8,11,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,8,11,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(28,8,11,1,'java/util/concurrent/locks/LockSupport.unpark')
f(29,8,11,1,'jdk/internal/misc/Unsafe.unpark')
f(30,8,1,3,'Unsafe_Unpark')
f(31,8,1,4,'SafeThreadsListPtr::release_stable_list()')
f(30,9,10,3,'pthread_cond_signal')
f(31,9,10,5,'entry_SYSCALL_64_after_hwframe')
f(32,9,10,5,'do_syscall_64')
f(33,10,9,5,'__x64_sys_futex')
f(34,10,9,5,'do_futex')
f(35,10,9,5,'futex_wake')
f(36,10,1,5,'get_futex_key')
f(36,11,1,5,'try_to_wake_up')
f(36,12,7,5,'wake_up_q')
f(37,12,7,5,'_raw_spin_unlock_irqrestore')
f(16,19,1,1,'kyo/bench/CountdownLatchBench.kyoBench')
f(17,19,1,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,19,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,19,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(20,19,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(21,19,1,4,'MemAllocator::allocate() const')
f(22,19,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(23,19,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(4,20,257,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23480.run')
f(5,20,257,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,20,257,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,20,246,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,61,205,2,'kyo/concurrent/scheduler/IOTask.eval',195,0,0)
f(9,153,88,2,'kyo/bench/CountdownLatchBench$$anon$1.apply',86,0,0)
f(10,155,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(11,155,1,4,'AccessInternal::PostRuntimeDispatch<G1BarrierSet::AccessBarrier<598116ul, G1BarrierSet>, (AccessInternal::BarrierType)2, 598116ul>::oop_access_barrier(void*)')
f(12,155,1,4,'G1BarrierSet::enqueue(oopDesc*)')
f(10,156,46,2,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1',46,0,0)
f(11,159,43,2,'kyo/bench/CountdownLatchBench$$Lambda$63.0x0000000800d4d100.apply',43,0,0)
f(12,160,42,2,'kyo/bench/CountdownLatchBench.$anonfun$1',42,0,0)
f(13,160,42,2,'kyo/bench/CountdownLatchBench.iterate$2',42,0,0)
f(14,174,9,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d50c00.linkToTargetMethod',9,0,0)
f(15,174,9,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50400.newInvokeSpecial',9,0,0)
f(16,174,9,2,'kyo/bench/CountdownLatchBench$$Lambda$63.0x0000000800d4d100.<init>',9,0,0)
f(14,183,19,2,'kyo/bench/CountdownLatchBench.kyo$bench$CountdownLatchBench$$_$transformLoop$1',19,0,0)
f(15,183,19,2,'kyo/bench/CountdownLatchBench$$anon$1.<init>',19,0,0)
f(16,186,16,2,'kyo/core$internal$KyoCont.<init>',16,0,0)
f(17,186,10,2,'kyo/core$internal$Kyo.<init>',10,0,0)
f(18,195,1,2,'java/lang/Object.<init>',1,0,0)
f(17,196,6,2,'kyo/ios$KyoIO.value',6,0,0)
f(10,202,24,2,'kyo/concurrent/latches$$anon$4.apply',23,0,0)
f(11,209,17,2,'kyo/concurrent/latches$$anon$4.apply',16,0,0)
f(12,220,2,2,'java/util/concurrent/atomic/AtomicInteger.decrementAndGet',2,0,0)
f(12,222,1,1,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete')
f(12,223,3,2,'kyo/concurrent/latches$$anon$3.count',3,0,0)
f(10,226,15,2,'kyo/concurrent/scheduler/IOTask.apply',15,0,0)
f(9,241,17,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',17,0,0)
f(9,258,8,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,258,8,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',1,0,0)
f(11,258,8,1,'kyo/concurrent/scheduler/IOPromise.complete',1,0,0)
f(12,258,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(13,258,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(14,258,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(12,259,7,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,259,7,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,259,7,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,259,7,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,260,6,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,260,6,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,260,6,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,260,6,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,260,6,1,'jdk/internal/misc/Unsafe.unpark')
f(21,260,2,3,'Unsafe_Unpark')
f(22,260,1,4,'AccessInternal::PostRuntimeDispatch<G1BarrierSet::AccessBarrier<548964ul, G1BarrierSet>, (AccessInternal::BarrierType)2, 548964ul>::oop_access_barrier(void*)')
f(22,261,1,4,'SafeThreadsListPtr::release_stable_list()')
f(21,262,4,3,'pthread_cond_signal')
f(22,263,3,5,'entry_SYSCALL_64_after_hwframe')
f(23,263,3,5,'do_syscall_64')
f(24,263,3,5,'__x64_sys_futex')
f(25,263,3,5,'do_futex')
f(26,263,3,5,'futex_wake')
f(27,263,3,5,'wake_up_q')
f(28,263,3,5,'_raw_spin_unlock_irqrestore')
f(7,266,11,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,266,11,1,'kyo/concurrent/scheduler/Worker.park')
f(9,266,11,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,266,11,1,'jdk/internal/misc/Unsafe.park')
f(11,266,3,3,'Unsafe_Park')
f(12,266,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,266,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,266,1,5,'do_syscall_64')
f(15,266,1,5,'syscall_enter_from_user_mode')
f(12,267,2,4,'Parker::park(bool, long)')
f(13,268,1,4,'AccessInternal::PostRuntimeDispatch<G1BarrierSet::AccessBarrier<544868ul, G1BarrierSet>, (AccessInternal::BarrierType)2, 544868ul>::oop_access_barrier(void*)')
f(11,269,8,3,'[unknown]')
f(12,269,7,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,270,6,5,'entry_SYSCALL_64_after_hwframe')
f(14,270,6,5,'do_syscall_64')
f(15,270,6,5,'__x64_sys_futex')
f(16,271,5,5,'do_futex')
f(17,271,5,5,'futex_wait')
f(18,271,5,5,'futex_wait_queue_me')
f(19,271,1,5,'hrtimer_sleeper_start_expires')
f(20,271,1,5,'_raw_spin_unlock_irqrestore')
f(19,272,4,5,'schedule')
f(20,272,4,5,'__schedule')
f(21,272,4,5,'finish_task_switch.isra.0')
f(12,276,1,3,'pthread_cond_timedwait')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 400px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(25);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,17643,3,'all')
f(1,0,17640,1,'java/lang/Thread.run')
f(2,0,17640,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,17640,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,2911,1,'java/util/concurrent/FutureTask.run')
f(5,0,2911,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,2911,1,'java/util/concurrent/FutureTask.run')
f(7,0,2911,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,2911,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,2911,1,'java/lang/reflect/Method.invoke')
f(10,0,2911,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,2911,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,2911,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,2911,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,2911,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,2911,1,'kyo/bench/Bench.forkKyo')
f(16,0,152,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,152,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,152,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,152,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3e760')
f(16,152,341,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,152,341,2,'kyo.bench.Bench$$anon$1')
f(16,493,1870,1,'kyo/bench/Bench.runLoop$2')
f(17,493,738,1,'kyo/bench/Bench$$anon$1.apply')
f(18,493,77,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,493,77,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c82ba8.apply')
f(20,493,77,1,'kyo/bench/Bench.$anonfun$2')
f(21,493,77,1,'kyo/concurrent/fibers$Fiber.block')
f(22,493,77,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,570,661,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,570,661,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,570,661,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply')
f(21,570,661,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,570,70,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,640,486,2,'kyo.concurrent.scheduler.IOTask')
f(22,1126,105,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,1126,105,2,'kyo.concurrent.fibers$Fiber')
f(17,1231,1132,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,1231,1132,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,1231,1132,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,1231,1132,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,1231,426,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,1231,426,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,1231,136,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,1367,290,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,1367,290,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,1657,318,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,1975,388,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,1975,388,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,1975,388,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,2363,548,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,2363,343,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,2363,343,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,2363,343,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,2363,343,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84000')
f(17,2706,113,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,2706,113,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,2819,92,1,'kyo/locals$Locals$.save')
f(18,2819,92,2,'kyo.locals$Locals$$anon$3')
f(4,2911,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,2911,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,2911,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,2911,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,2911,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,2911,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,2911,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,2911,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,2922,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e5f8.run')
f(5,2922,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,2922,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,2922,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,2922,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,2922,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,2922,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,2922,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$58+0x0000000800d4c580')
f(4,2933,14707,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,2933,14707,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,2933,14707,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,2933,14669,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,2933,14669,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,2933,14561,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(10,2933,14561,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(11,2933,14561,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(12,2933,14561,2,'kyo.bench.DeepBindBench$$anon$1')
f(9,17494,108,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,17494,108,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,17494,108,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e760.apply')
f(12,17494,108,1,'kyo/bench/Bench.$anonfun$1')
f(13,17494,108,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,17494,108,1,'kyo/bench/DeepBindBench.kyoBench')
f(15,17494,108,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(16,17494,108,2,'kyo.bench.DeepBindBench$$anon$1')
f(7,17602,38,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,17602,38,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,17602,38,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,17602,38,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,17602,38,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(12,17602,38,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d47148')
f(1,17640,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,17640,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,17640,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,17640,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,17640,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,17640,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,17640,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,17640,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,17640,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,17640,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,17640,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,17640,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,17640,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,265,3,'all')
f(1,0,265,1,'java/lang/Thread.run')
f(2,0,265,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,265,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,22,1,'java/util/concurrent/FutureTask.run')
f(5,0,22,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,22,1,'java/util/concurrent/FutureTask.run')
f(7,0,22,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,22,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,22,1,'java/lang/reflect/Method.invoke')
f(10,0,22,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,22,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,22,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,22,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,22,1,'kyo/bench/jmh_generated/DeepBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,22,1,'kyo/bench/Bench.forkKyo')
f(16,0,22,1,'kyo/bench/Bench.runLoop$2')
f(17,0,8,1,'kyo/bench/Bench$$anon$1.apply')
f(18,0,8,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,0,8,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,0,8,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply')
f(21,0,8,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,0,8,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,0,8,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,0,8,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,0,8,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,0,8,1,'jdk/internal/misc/Unsafe.unpark')
f(27,0,1,3,'Unsafe_Unpark')
f(28,0,1,3,'pthread_mutex_unlock')
f(27,1,7,3,'pthread_cond_signal')
f(28,1,7,5,'entry_SYSCALL_64_after_hwframe')
f(29,1,7,5,'do_syscall_64')
f(30,1,7,5,'__x64_sys_futex')
f(31,1,7,5,'do_futex')
f(32,1,7,5,'futex_wake')
f(33,1,1,5,'wake_q_add_safe')
f(33,2,6,5,'wake_up_q')
f(34,2,6,5,'_raw_spin_unlock_irqrestore')
f(17,8,14,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,8,14,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,8,14,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,8,14,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,8,14,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,8,14,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,9,1,2,'java/util/concurrent/locks/AbstractQueuedSynchronizer$Node.setPrevRelaxed',1,0,0)
f(23,10,12,1,'java/util/concurrent/locks/LockSupport.park')
f(24,10,12,1,'jdk/internal/misc/Unsafe.park')
f(25,10,2,3,'Unsafe_Park')
f(26,10,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(26,11,1,4,'Parker::park(bool, long)')
f(25,12,10,3,'[unknown]')
f(26,12,8,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,12,8,5,'entry_SYSCALL_64_after_hwframe')
f(28,12,8,5,'do_syscall_64')
f(29,12,7,5,'__x64_sys_futex')
f(30,12,7,5,'do_futex')
f(31,12,7,5,'futex_wait')
f(32,12,1,5,'__get_user_nocheck_4')
f(32,13,5,5,'futex_wait_queue_me')
f(33,13,5,5,'schedule')
f(34,13,5,5,'__schedule')
f(35,13,5,5,'finish_task_switch.isra.0')
f(32,18,1,5,'futex_wait_setup')
f(29,19,1,5,'syscall_enter_from_user_mode')
f(26,20,2,3,'pthread_cond_wait')
f(4,22,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,22,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,22,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,22,1,1,'java/lang/Thread.sleep')
f(8,22,1,3,'[unknown]')
f(9,22,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,22,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,22,1,5,'do_syscall_64')
f(12,22,1,5,'__x64_sys_futex')
f(13,22,1,5,'do_futex')
f(14,22,1,5,'futex_wait')
f(15,22,1,5,'futex_wait_queue_me')
f(16,22,1,5,'schedule')
f(17,22,1,5,'__schedule')
f(18,22,1,5,'finish_task_switch.isra.0')
f(4,23,242,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,23,242,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,23,242,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,23,52,2,'kyo/concurrent/scheduler/IOTask.run',36,0,0)
f(8,23,52,2,'kyo/concurrent/scheduler/IOTask.eval',42,0,0)
f(9,39,2,2,'kyo/bench/DeepBindBench$$anon$1.apply',2,0,0)
f(10,39,2,2,'kyo/bench/DeepBindBench$$anon$1.apply',2,0,0)
f(11,40,1,2,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1',1,0,0)
f(9,41,24,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',24,0,0)
f(10,41,24,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',24,0,0)
f(11,41,24,2,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e760.apply',24,0,0)
f(12,41,24,2,'kyo/bench/Bench.$anonfun$1',24,0,0)
f(13,41,24,2,'kyo/bench/Bench.kyoBenchFiber',24,0,0)
f(14,41,24,2,'kyo/bench/DeepBindBench.kyoBench',24,0,0)
f(15,41,24,2,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1',24,0,0)
f(16,41,24,2,'kyo/bench/DeepBindBench$$anon$1.<init>',24,0,0)
f(9,65,10,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,65,10,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,65,10,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,65,10,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,65,10,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,65,10,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,65,10,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,65,10,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,65,10,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,65,10,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,65,10,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,65,10,1,'jdk/internal/misc/Unsafe.unpark')
f(21,65,10,3,'pthread_cond_signal')
f(22,66,9,5,'entry_SYSCALL_64_after_hwframe')
f(23,66,9,5,'do_syscall_64')
f(24,66,9,5,'__x64_sys_futex')
f(25,66,9,5,'do_futex')
f(26,66,9,5,'futex_wake')
f(27,66,9,5,'wake_up_q')
f(28,66,9,5,'_raw_spin_unlock_irqrestore')
f(7,75,172,2,'kyo/concurrent/scheduler/Queue.poll',171,0,0)
f(8,75,11,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',11,0,0)
f(8,86,161,2,'kyo/concurrent/scheduler/Queue.modify',160,0,0)
f(9,86,82,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',82,0,0)
f(10,86,82,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',82,0,0)
f(11,115,53,2,'java/lang/invoke/VarForm.getMemberName',53,0,0)
f(12,115,53,2,'java/lang/invoke/VarForm.getMemberNameOrNull',53,0,0)
f(9,168,79,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47148.apply',78,0,0)
f(10,168,79,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',78,0,0)
f(11,230,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(12,230,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(13,230,1,4,'MemAllocator::allocate() const')
f(14,230,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(15,230,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(16,230,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(17,230,1,4,'G1AllocRegion::new_alloc_region_and_allocate(unsigned long, bool)')
f(18,230,1,4,'G1CollectedHeap::new_mutator_alloc_region(unsigned long, bool, unsigned int)')
f(19,230,1,4,'HeapRegionRemSet::clear_fcc()')
f(11,231,16,2,'scala/collection/mutable/PriorityQueue.dequeue',16,0,0)
f(12,232,1,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_size0',1,0,0)
f(12,233,14,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',14,0,0)
f(7,247,18,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,247,18,1,'kyo/concurrent/scheduler/Worker.park')
f(9,247,18,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,247,18,1,'jdk/internal/misc/Unsafe.park')
f(11,247,2,3,'Unsafe_Park')
f(12,247,1,4,'Parker::park(bool, long)')
f(12,248,1,3,'clock_gettime')
f(13,248,1,3,'[vdso]')
f(11,249,15,3,'[unknown]')
f(12,249,14,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,250,13,5,'entry_SYSCALL_64_after_hwframe')
f(14,250,13,5,'do_syscall_64')
f(15,250,12,5,'__x64_sys_futex')
f(16,250,12,5,'do_futex')
f(17,250,12,5,'futex_wait')
f(18,251,11,5,'futex_wait_queue_me')
f(19,251,1,5,'hrtimer_sleeper_start_expires')
f(20,251,1,5,'_raw_spin_unlock_irqrestore')
f(19,252,10,5,'schedule')
f(20,252,10,5,'__schedule')
f(21,252,10,5,'finish_task_switch.isra.0')
f(15,262,1,5,'syscall_exit_to_user_mode')
f(16,262,1,5,'exit_to_user_mode_prepare')
f(17,262,1,5,'exit_to_user_mode_loop')
f(18,262,1,5,'__rseq_handle_notify_resume')
f(19,262,1,5,'__put_user_nocheck_8')
f(12,263,1,3,'pthread_cond_timedwait')
f(11,264,1,4,'java_lang_Thread::set_thread_status(oopDesc*, JavaThreadStatus)')
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,19800,3,'all')
f(1,0,19797,1,'java/lang/Thread.run')
f(2,0,19797,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,19797,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,19797,1,'java/util/concurrent/FutureTask.run')
f(5,0,19797,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,19797,1,'java/util/concurrent/FutureTask.run')
f(7,0,19797,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,19797,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,19797,1,'java/lang/reflect/Method.invoke')
f(10,0,19797,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,19797,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,19797,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,19797,1,'kyo/bench/jmh_generated/DeepBindBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,19797,1,'kyo/bench/jmh_generated/DeepBindBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,19797,1,'kyo/bench/Bench.syncKyo')
f(16,0,19794,1,'kyo/bench/Bench.runLoop$1')
f(17,0,19794,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(18,0,19794,1,'kyo/bench/DeepBindBench$$anon$1.apply')
f(19,0,19794,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(20,0,19794,2,'kyo.bench.DeepBindBench$$anon$1')
f(16,19794,3,1,'kyo/bench/DeepBindBench.kyoBench')
f(17,19794,3,1,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1')
f(18,19794,3,2,'kyo.bench.DeepBindBench$$anon$1')
f(1,19797,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,19797,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,19797,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,19797,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,19797,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,19797,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,19797,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,19797,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,19797,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,19797,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,19797,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,19797,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,19797,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(15,1,183,2,'kyo/bench/Bench.syncKyo',183,0,0)
f(16,1,183,2,'kyo/bench/Bench.runLoop$1',183,0,0)
f(17,114,70,2,'kyo/bench/DeepBindBench$$anon$1.apply',70,0,0)
f(18,114,70,2,'kyo/bench/DeepBindBench$$anon$1.apply',70,0,0)
f(19,168,16,2,'kyo/bench/DeepBindBench.kyo$bench$DeepBindBench$$_$loop$1',16,0,0)
f(20,182,2,2,'kyo/bench/DeepBindBench$$anon$1.<init>',2,0,0)
f(15,184,114,2,'org/openjdk/jmh/infra/Blackhole.consume',114,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,12434,3,'all')
f(1,0,12430,1,'java/lang/Thread.run')
f(2,0,12430,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,12430,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,797,1,'java/util/concurrent/FutureTask.run')
f(5,0,797,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,797,1,'java/util/concurrent/FutureTask.run')
f(7,0,797,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,797,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,797,1,'java/lang/reflect/Method.invoke')
f(10,0,797,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,797,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,797,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,797,1,'kyo/bench/jmh_generated/DeepBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,796,1,'kyo/bench/jmh_generated/DeepBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,796,1,'kyo/bench/Bench.forkKyo')
f(16,0,35,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,35,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,35,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,35,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3e730')
f(16,35,18,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,35,18,2,'kyo.bench.Bench$$anon$1')
f(16,53,722,1,'kyo/bench/Bench.runLoop$2')
f(17,53,370,1,'kyo/bench/Bench$$anon$1.apply')
f(18,53,19,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,53,19,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c82ba8.apply')
f(20,53,19,1,'kyo/bench/Bench.$anonfun$2')
f(21,53,19,1,'kyo/concurrent/fibers$Fiber.block')
f(22,53,19,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,72,351,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,72,351,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,72,351,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply')
f(21,72,351,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,72,1,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,73,350,2,'kyo.concurrent.scheduler.IOTask')
f(17,423,352,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,423,352,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,423,352,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,423,352,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,423,333,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,423,333,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,423,18,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,441,315,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,441,315,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,756,1,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,757,18,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,757,18,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,757,18,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,775,21,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,775,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,775,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,775,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,775,2,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84000')
f(17,777,19,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,777,19,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(14,796,1,2,'org.openjdk.jmh.results.BenchmarkTaskResult')
f(4,797,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,797,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,797,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,797,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,797,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,797,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,797,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,797,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,808,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e5f8.run')
f(5,808,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,808,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,808,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,808,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,808,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,808,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$67+0x0000000800d4e3d0')
f(4,819,11611,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,819,11611,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,819,11611,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,819,11611,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,819,11611,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,819,10815,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(10,819,10815,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(11,819,563,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(12,819,563,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(13,819,563,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(14,819,563,2,'kyo.bench.DeepBindMapBench$$anon$1$$Lambda$66+0x0000000800d4e000')
f(11,1382,229,2,'kyo.bench.DeepBindMapBench$$anon$1$$anon$2')
f(11,1611,889,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(12,1611,889,2,'kyo.bench.DeepBindMapBench$$anon$3')
f(11,2500,1037,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$transformLoop$2')
f(12,2500,1037,2,'kyo.bench.DeepBindMapBench$$anon$4')
f(11,3537,1028,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$transformLoop$3')
f(12,3537,1028,2,'kyo.bench.DeepBindMapBench$$anon$5')
f(11,4565,756,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$transformLoop$4')
f(12,4565,756,2,'kyo.bench.DeepBindMapBench$$anon$6')
f(11,5321,866,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$transformLoop$5')
f(12,5321,866,2,'kyo.bench.DeepBindMapBench$$anon$7')
f(11,6187,885,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$transformLoop$6')
f(12,6187,885,2,'kyo.bench.DeepBindMapBench$$anon$8')
f(11,7072,922,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$transformLoop$7')
f(12,7072,922,2,'kyo.bench.DeepBindMapBench$$anon$9')
f(11,7994,1061,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$transformLoop$8')
f(12,7994,1061,2,'kyo.bench.DeepBindMapBench$$anon$10')
f(11,9055,828,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$transformLoop$9')
f(12,9055,828,2,'kyo.bench.DeepBindMapBench$$anon$11')
f(11,9883,951,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$transformLoop$10')
f(12,9883,951,2,'kyo.bench.DeepBindMapBench$$anon$12')
f(11,10834,800,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(12,10834,800,2,'kyo.bench.DeepBindMapBench$$anon$13')
f(9,11634,691,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(10,11634,691,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(11,11634,691,1,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$66.0x0000000800d4e000.apply')
f(12,11634,691,1,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$$anonfun$adapted$11')
f(13,11634,691,1,'kyo/bench/DeepBindMapBench.$anonfun$11')
f(14,11634,691,1,'kyo/bench/DeepBindMapBench.loop$1')
f(15,11634,691,2,'kyo.bench.DeepBindMapBench$$anon$1')
f(9,12325,105,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,12325,105,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,12325,105,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e730.apply')
f(12,12325,105,1,'kyo/bench/Bench.$anonfun$1')
f(13,12325,105,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,12325,105,1,'kyo/bench/DeepBindMapBench.kyoBench')
f(15,12325,105,1,'kyo/bench/DeepBindMapBench.loop$1')
f(16,12325,105,2,'kyo.bench.DeepBindMapBench$$anon$1')
f(1,12430,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,12430,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,12430,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,12430,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,12430,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,12430,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,12430,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,12430,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,12430,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,12430,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,12430,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,12430,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,12430,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,12433,1,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,12433,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,12433,1,1,'java/lang/ClassLoader.loadClass')
f(10,12433,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,12433,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,12433,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,12433,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,12433,1,1,'jdk/internal/loader/URLClassPath.getResource')
f(15,12433,1,1,'jdk/internal/loader/URLClassPath$JarLoader.getResource')
f(16,12433,1,1,'java/util/jar/JarFile.getJarEntry')
f(17,12433,1,1,'java/util/jar/JarFile.getEntry')
f(18,12433,1,1,'java/util/zip/ZipFile.getEntry')
f(19,12433,1,1,'java/util/zip/ZipFile$Source.getEntryPos')
f(20,12433,1,1,'java/util/zip/ZipCoder$UTF8ZipCoder.toString')
f(21,12433,1,1,'java/lang/System$2.newStringUTF8NoRepl')
f(22,12433,1,1,'java/lang/String.newStringUTF8NoRepl')
f(23,12433,1,1,'java/util/Arrays.copyOfRange')
f(24,12433,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: 1424px}
</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(89);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,296,3,'all')
f(1,0,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,1,3,'thread_native_entry(Thread*)')
f(3,0,1,4,'Thread::call_run()')
f(4,0,1,4,'JavaThread::thread_main_inner()')
f(5,0,1,4,'CompileBroker::compiler_thread_loop()')
f(6,0,1,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,1,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,1,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,1,4,'ParseGenerator::generate(JVMState*)')
f(10,0,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(11,0,1,4,'Parse::do_all_blocks()')
f(12,0,1,4,'Parse::do_one_block()')
f(13,0,1,4,'Parse::do_call()')
f(14,0,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(15,0,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(16,0,1,4,'ParseGenerator::generate(JVMState*)')
f(17,0,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(18,0,1,4,'Parse::do_all_blocks()')
f(19,0,1,4,'Parse::do_one_block()')
f(20,0,1,4,'Parse::do_call()')
f(21,0,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(22,0,1,4,'ParseGenerator::generate(JVMState*)')
f(23,0,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(24,0,1,4,'Parse::do_all_blocks()')
f(25,0,1,4,'Parse::do_one_block()')
f(26,0,1,4,'Parse::do_call()')
f(27,0,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(28,0,1,4,'ParseGenerator::generate(JVMState*)')
f(29,0,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(30,0,1,4,'Parse::do_all_blocks()')
f(31,0,1,4,'Parse::do_one_block()')
f(32,0,1,4,'Parse::do_call()')
f(33,0,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(34,0,1,4,'ParseGenerator::generate(JVMState*)')
f(35,0,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(36,0,1,4,'Parse::do_all_blocks()')
f(37,0,1,4,'Parse::do_one_block()')
f(38,0,1,4,'Parse::do_call()')
f(39,0,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(40,0,1,4,'ParseGenerator::generate(JVMState*)')
f(41,0,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(42,0,1,4,'Parse::do_all_blocks()')
f(43,0,1,4,'Parse::do_one_block()')
f(44,0,1,4,'Parse::do_call()')
f(45,0,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(46,0,1,4,'ParseGenerator::generate(JVMState*)')
f(47,0,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(48,0,1,4,'Parse::do_all_blocks()')
f(49,0,1,4,'Parse::do_one_block()')
f(50,0,1,4,'Parse::do_call()')
f(51,0,1,4,'ParseGenerator::generate(JVMState*)')
f(52,0,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(53,0,1,4,'Parse::do_all_blocks()')
f(54,0,1,4,'Parse::do_one_block()')
f(55,0,1,4,'Parse::do_call()')
f(56,0,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(57,0,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(58,0,1,4,'ParseGenerator::generate(JVMState*)')
f(59,0,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(60,0,1,4,'Parse::do_all_blocks()')
f(61,0,1,4,'Parse::do_one_block()')
f(62,0,1,4,'Parse::do_call()')
f(63,0,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(64,0,1,4,'ParseGenerator::generate(JVMState*)')
f(65,0,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(66,0,1,4,'Parse::do_all_blocks()')
f(67,0,1,4,'Parse::do_one_block()')
f(68,0,1,4,'Parse::do_call()')
f(69,0,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(70,0,1,4,'ParseGenerator::generate(JVMState*)')
f(71,0,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(72,0,1,4,'Parse::do_all_blocks()')
f(73,0,1,4,'Parse::do_one_block()')
f(74,0,1,4,'Parse::do_call()')
f(75,0,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(76,0,1,4,'ParseGenerator::generate(JVMState*)')
f(77,0,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(78,0,1,4,'Parse::do_all_blocks()')
f(79,0,1,4,'Parse::do_one_block()')
f(80,0,1,4,'Parse::do_call()')
f(81,0,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(82,0,1,4,'ParseGenerator::generate(JVMState*)')
f(83,0,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(84,0,1,4,'Parse::create_entry_map()')
f(85,0,1,4,'ciMethod::get_method_at_bci(int, bool&, ciSignature**)')
f(86,0,1,4,'ciBytecodeStream::get_method(bool&, ciSignature**)')
f(87,0,1,4,'ciEnv::get_method_by_index_impl(constantPoolHandle const&, int, Bytecodes::Code, ciInstanceKlass*)')
f(88,0,1,4,'ciObjectFactory::get_metadata(Metadata*)')
f(1,1,3,3,'[unknown_Java]')
f(2,1,1,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(2,2,2,6,'kyo/core$internal$KyoCont.effect',0,2,0)
f(1,4,292,1,'java/lang/Thread.run')
f(2,4,292,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,4,292,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,4,2,1,'java/util/concurrent/FutureTask.run')
f(5,4,2,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,4,2,1,'java/util/concurrent/FutureTask.run')
f(7,4,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,4,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,4,2,1,'java/lang/reflect/Method.invoke')
f(10,4,2,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,4,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,4,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,4,2,1,'kyo/bench/jmh_generated/DeepBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,4,2,1,'kyo/bench/jmh_generated/DeepBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,4,2,1,'kyo/bench/Bench.forkKyo')
f(16,4,2,1,'kyo/bench/Bench.runLoop$2')
f(17,4,1,1,'kyo/bench/Bench$$anon$1.apply')
f(18,4,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,4,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,4,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84000.apply')
f(21,4,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,4,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,4,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,4,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,4,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,4,1,1,'jdk/internal/misc/Unsafe.unpark')
f(27,4,1,3,'pthread_cond_signal')
f(28,4,1,5,'entry_SYSCALL_64_after_hwframe')
f(29,4,1,5,'do_syscall_64')
f(30,4,1,5,'__x64_sys_futex')
f(31,4,1,5,'do_futex')
f(32,4,1,5,'futex_wake')
f(33,4,1,5,'wake_up_q')
f(34,4,1,5,'_raw_spin_unlock_irqrestore')
f(17,5,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,5,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,5,1,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,5,1,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,5,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,5,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,5,1,1,'java/util/concurrent/locks/LockSupport.park')
f(24,5,1,1,'jdk/internal/misc/Unsafe.park')
f(25,5,1,3,'[unknown]')
f(26,5,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(4,6,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,6,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,6,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,6,1,1,'java/lang/Thread.sleep')
f(8,6,1,3,'[unknown]')
f(9,6,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(4,7,289,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,7,289,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,7,289,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,7,289,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,7,289,1,'kyo/concurrent/scheduler/IOTask.eval',29,0,0)
f(9,25,158,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(10,27,156,2,'kyo/bench/DeepBindMapBench$$anon$1.apply',154,0,0)
f(11,36,11,2,'kyo/bench/DeepBindMapBench$$anon$1$$anon$2.<init>',11,0,0)
f(12,36,11,2,'kyo/ios$KyoIO.<init>',11,0,0)
f(13,46,1,2,'kyo/core$internal$Kyo.<init>',1,0,0)
f(11,47,75,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1',75,0,0)
f(12,52,70,2,'kyo/bench/DeepBindMapBench$$anon$3.<init>',70,0,0)
f(13,75,47,2,'kyo/core$internal$KyoCont.<init>',47,0,0)
f(14,80,37,2,'kyo/core$internal$Kyo.<init>',37,0,0)
f(15,105,12,2,'java/lang/Object.<init>',12,0,0)
f(14,117,5,2,'kyo/ios$KyoIO.effect',5,0,0)
f(15,120,2,2,'kyo/ios$KyoIO.effect',2,0,0)
f(11,122,61,2,'scala/runtime/BoxesRunTime.boxToInteger',59,0,0)
f(12,181,2,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(13,181,2,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(14,181,1,4,'MemAllocator::Allocation::notify_allocation_jfr_sampler()')
f(14,182,1,4,'MemAllocator::allocate() const')
f(15,182,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(16,182,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(17,182,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(18,182,1,4,'G1AllocRegion::new_alloc_region_and_allocate(unsigned long, bool)')
f(19,182,1,4,'G1CollectedHeap::new_mutator_alloc_region(unsigned long, bool, unsigned int)')
f(20,182,1,4,'G1RemSetTrackingPolicy::update_at_allocate(HeapRegion*)')
f(21,182,1,4,'G1FromCardCache::clear(unsigned int)')
f(9,183,98,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(10,185,96,2,'kyo/bench/DeepBindMapBench$$anon$12.apply',96,0,0)
f(11,185,96,2,'kyo/bench/DeepBindMapBench$$anon$11.apply',96,0,0)
f(12,185,96,2,'kyo/bench/DeepBindMapBench$$anon$10.apply',96,0,0)
f(13,185,96,2,'kyo/bench/DeepBindMapBench$$anon$9.apply',96,0,0)
f(14,186,95,2,'kyo/bench/DeepBindMapBench$$anon$8.apply',95,0,0)
f(15,196,85,2,'kyo/bench/DeepBindMapBench$$anon$7.apply',85,0,0)
f(16,201,80,2,'kyo/bench/DeepBindMapBench$$anon$6.apply',80,0,0)
f(17,209,72,2,'kyo/bench/DeepBindMapBench$$anon$5.apply',72,0,0)
f(18,252,29,2,'kyo/bench/DeepBindMapBench$$anon$4.apply',29,0,0)
f(19,276,5,2,'kyo/bench/DeepBindMapBench$$anon$3.apply',5,0,0)
f(20,278,1,2,'kyo/bench/DeepBindMapBench$$anon$1$$anon$2.apply',1,0,0)
f(20,279,2,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1',2,0,0)
f(21,279,2,2,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$56.0x0000000800d49a30.apply',2,0,0)
f(22,279,2,2,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$_$$anonfun$adapted$1',2,0,0)
f(9,281,1,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,281,1,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,281,1,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,281,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,281,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,281,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,281,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,281,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,281,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,281,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,281,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,281,1,1,'jdk/internal/misc/Unsafe.unpark')
f(21,281,1,3,'pthread_cond_signal')
f(22,281,1,5,'entry_SYSCALL_64_after_hwframe')
f(23,281,1,5,'do_syscall_64')
f(24,281,1,5,'__x64_sys_futex')
f(25,281,1,5,'do_futex')
f(26,281,1,5,'futex_wake')
f(27,281,1,5,'wake_up_q')
f(28,281,1,5,'_raw_spin_unlock_irqrestore')
f(9,282,3,2,'kyo/concurrent/scheduler/IOTask.st',3,0,0)
f(9,285,2,6,'kyo/core$internal$KyoCont.effect',0,2,0)
f(9,287,1,1,'kyo/ios$KyoIO.effect')
f(9,288,8,3,'vtable stub')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 384px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(24);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,14574,3,'all')
f(1,0,14571,1,'java/lang/Thread.run')
f(2,0,14571,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,14571,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,14571,1,'java/util/concurrent/FutureTask.run')
f(5,0,14571,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,14571,1,'java/util/concurrent/FutureTask.run')
f(7,0,14571,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,14571,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,14571,1,'java/lang/reflect/Method.invoke')
f(10,0,14571,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,14571,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,14571,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,14571,1,'kyo/bench/jmh_generated/DeepBindMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,14571,1,'kyo/bench/jmh_generated/DeepBindMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,14571,1,'kyo/bench/Bench.syncKyo')
f(16,0,14571,1,'kyo/bench/Bench.runLoop$1')
f(17,0,13928,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(18,0,13928,1,'kyo/bench/DeepBindMapBench$$anon$1.apply')
f(19,0,561,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,0,561,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,0,561,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,0,561,2,'kyo.bench.DeepBindMapBench$$anon$1$$Lambda$49+0x0000000800d07778')
f(19,561,611,2,'kyo.bench.DeepBindMapBench$$anon$1$$anon$2')
f(19,1172,912,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(20,1172,912,2,'kyo.bench.DeepBindMapBench$$anon$3')
f(19,2084,1475,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$transformLoop$2')
f(20,2084,1475,2,'kyo.bench.DeepBindMapBench$$anon$4')
f(19,3559,1256,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$transformLoop$3')
f(20,3559,1256,2,'kyo.bench.DeepBindMapBench$$anon$5')
f(19,4815,875,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$transformLoop$4')
f(20,4815,875,2,'kyo.bench.DeepBindMapBench$$anon$6')
f(19,5690,1229,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$transformLoop$5')
f(20,5690,1229,2,'kyo.bench.DeepBindMapBench$$anon$7')
f(19,6919,945,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$transformLoop$6')
f(20,6919,945,2,'kyo.bench.DeepBindMapBench$$anon$8')
f(19,7864,1211,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$transformLoop$7')
f(20,7864,1211,2,'kyo.bench.DeepBindMapBench$$anon$9')
f(19,9075,1454,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$transformLoop$8')
f(20,9075,1454,2,'kyo.bench.DeepBindMapBench$$anon$10')
f(19,10529,944,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$transformLoop$9')
f(20,10529,944,2,'kyo.bench.DeepBindMapBench$$anon$11')
f(19,11473,1245,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$transformLoop$10')
f(20,11473,1245,2,'kyo.bench.DeepBindMapBench$$anon$12')
f(19,12718,1210,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(20,12718,1210,2,'kyo.bench.DeepBindMapBench$$anon$13')
f(17,13928,643,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(18,13928,643,1,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$transformLoop$11')
f(19,13928,643,1,'kyo/bench/DeepBindMapBench$$anon$1$$Lambda$49.0x0000000800d07778.apply')
f(20,13928,643,1,'kyo/bench/DeepBindMapBench.kyo$bench$DeepBindMapBench$$anon$1$$_$_$$anonfun$adapted$11')
f(21,13928,643,1,'kyo/bench/DeepBindMapBench.$anonfun$11')
f(22,13928,643,1,'kyo/bench/DeepBindMapBench.loop$1')
f(23,13928,643,2,'kyo.bench.DeepBindMapBench$$anon$1')
f(1,14571,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,14571,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,14571,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,14571,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,14571,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,14571,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,14571,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,14571,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,14571,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,14571,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,14571,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,14571,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,14571,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 480px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(30);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,298,3,'all')
f(1,0,298,1,'java/lang/Thread.run')
f(2,0,298,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,298,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,298,1,'java/util/concurrent/FutureTask.run')
f(5,0,298,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,298,1,'java/util/concurrent/FutureTask.run')
f(7,0,298,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,298,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,298,1,'java/lang/reflect/Method.invoke')
f(10,0,298,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,298,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,298,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,298,1,'kyo/bench/jmh_generated/DeepBindMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,298,1,'kyo/bench/jmh_generated/DeepBindMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,298,1,'kyo/bench/Bench.syncKyo')
f(16,0,295,2,'kyo/bench/Bench.runLoop$1',171,0,0)
f(17,23,151,2,'kyo/bench/DeepBindMapBench$$anon$1.apply',148,0,0)
f(18,29,145,2,'kyo/bench/DeepBindMapBench$$anon$1.apply',142,0,0)
f(19,93,10,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',10,0,0)
f(20,98,5,2,'java/lang/invoke/LambdaForm$MH.0x0000000800c02400.invoke',5,0,0)
f(19,103,71,2,'scala/runtime/BoxesRunTime.boxToInteger',68,0,0)
f(20,171,3,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(21,171,3,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(22,171,3,4,'MemAllocator::allocate() const')
f(23,171,2,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(24,171,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(24,172,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(25,172,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(26,172,1,4,'G1AllocRegion::new_alloc_region_and_allocate(unsigned long, bool)')
f(27,172,1,4,'G1CollectedHeap::new_mutator_alloc_region(unsigned long, bool, unsigned int)')
f(28,172,1,4,'G1CollectedHeap::new_region(unsigned long, HeapRegionType, bool, unsigned int)')
f(29,172,1,4,'HeapRegionManager::allocate_free_region(HeapRegionType, unsigned int)')
f(23,173,1,4,'ObjAllocator::initialize(HeapWordImpl**) const')
f(17,174,121,1,'kyo/bench/DeepBindMapBench$$anon$13.apply')
f(18,177,118,2,'kyo/bench/DeepBindMapBench$$anon$12.apply',118,0,0)
f(19,178,117,2,'kyo/bench/DeepBindMapBench$$anon$11.apply',117,0,0)
f(20,178,117,2,'kyo/bench/DeepBindMapBench$$anon$10.apply',117,0,0)
f(21,178,117,2,'kyo/bench/DeepBindMapBench$$anon$9.apply',117,0,0)
f(22,182,113,2,'kyo/bench/DeepBindMapBench$$anon$8.apply',113,0,0)
f(23,184,111,2,'kyo/bench/DeepBindMapBench$$anon$7.apply',111,0,0)
f(24,206,89,2,'kyo/bench/DeepBindMapBench$$anon$6.apply',89,0,0)
f(25,272,23,2,'kyo/bench/DeepBindMapBench$$anon$5.apply',23,0,0)
f(26,283,12,2,'kyo/bench/DeepBindMapBench$$anon$4.apply',12,0,0)
f(27,287,8,2,'kyo/bench/DeepBindMapBench$$anon$3.apply',8,0,0)
f(28,292,3,2,'kyo/bench/DeepBindMapBench$$anon$1.kyo$bench$DeepBindMapBench$$anon$1$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1',3,0,0)
f(29,293,2,2,'scala/runtime/BoxesRunTime.unboxToInt',2,0,0)
f(16,295,3,2,'kyo/bench/DeepBindMapBench.kyoBench',3,0,0)
f(17,295,3,2,'kyo/bench/DeepBindMapBench.loop$1',3,0,0)
f(18,295,3,2,'kyo/bench/DeepBindMapBench$$anon$1.<init>',3,0,0)
f(19,295,3,2,'kyo/ios$KyoIO.<init>',3,0,0)
f(20,297,1,2,'kyo/core$internal$Kyo.<init>',1,0,0)
f(21,297,1,2,'java/lang/Object.<init>',1,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 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,13794,3,'all')
f(1,0,13790,1,'java/lang/Thread.run')
f(2,0,13790,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,13790,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,1011,1,'java/util/concurrent/FutureTask.run')
f(5,0,1011,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,1011,1,'java/util/concurrent/FutureTask.run')
f(7,0,1011,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,1011,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1011,1,'java/lang/reflect/Method.invoke')
f(10,0,1011,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,1011,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,1011,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,1011,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,1011,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,1011,1,'kyo/bench/Bench.forkKyo')
f(16,0,68,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,68,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,68,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,68,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c81148')
f(16,68,156,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,68,156,2,'kyo.bench.Bench$$anon$1')
f(16,224,607,1,'kyo/bench/Bench.runLoop$2')
f(17,224,288,1,'kyo/bench/Bench$$anon$1.apply')
f(18,224,102,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,224,102,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c88000.apply')
f(20,224,102,1,'kyo/bench/Bench.$anonfun$2')
f(21,224,102,1,'kyo/concurrent/fibers$Fiber.block')
f(22,224,102,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,326,186,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,326,186,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,326,186,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(21,326,186,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,326,185,2,'kyo.concurrent.scheduler.IOTask')
f(22,511,1,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,511,1,2,'kyo.concurrent.fibers$Fiber')
f(17,512,319,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,512,319,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,512,319,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,512,319,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,512,141,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,512,141,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,512,21,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,533,120,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,533,120,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,653,35,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,688,143,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,688,143,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,688,143,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,831,180,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,831,176,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,831,176,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,831,176,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,831,176,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c828a0')
f(17,1007,4,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,1007,4,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(4,1011,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ea20.run')
f(5,1011,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,1011,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,1011,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,1011,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,1011,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,1011,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,1011,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,1022,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec48.run')
f(5,1022,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,1022,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,1022,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,1022,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,1022,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,1022,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,1022,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$65+0x0000000800d551f8')
f(4,1033,12757,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d230f8.run')
f(5,1033,12757,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,1033,12757,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,1033,12757,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,1033,12757,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,1033,6689,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,1033,6689,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(11,1033,6689,1,'kyo/bench/EnqueueDequeueBench$$Lambda$62.0x0000000800d548a8.apply')
f(12,1033,6689,1,'kyo/bench/EnqueueDequeueBench.$anonfun$2')
f(13,1033,6689,1,'kyo/bench/EnqueueDequeueBench.loop$2')
f(14,1033,1208,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(15,1033,1208,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(16,1033,1208,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,1033,1208,2,'kyo.bench.EnqueueDequeueBench$$Lambda$60+0x0000000800d4fc00')
f(14,2241,1835,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(15,2241,1835,2,'kyo.bench.EnqueueDequeueBench$$anon$2')
f(14,4076,3646,1,'kyo/concurrent/channels$Channels$$anon$14.put')
f(15,4076,3646,1,'kyo/concurrent/channels$Channels$Blocking.put$')
f(16,4076,3646,1,'kyo/concurrent/channels$Channels$Blocking.put')
f(17,4076,1010,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,4076,1010,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,4076,1010,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,4076,1010,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$59+0x0000000800d4f830')
f(17,5086,877,1,'kyo/concurrent/channels$Channels$$anon$14.putFiber')
f(18,5086,877,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$_$transformLoop$10')
f(19,5086,877,1,'kyo/concurrent/channels$Channels$$anon$14$$Lambda$58.0x0000000800d4f460.apply')
f(20,5086,877,1,'kyo/concurrent/channels$Channels$$anon$14.$anonfun$11')
f(21,5086,877,2,'kyo.concurrent.channels$$anon$19')
f(17,5963,1759,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1')
f(18,5963,1759,2,'kyo.concurrent.channels$Channels$Blocking$$anon$1')
f(9,7722,5892,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,7722,5892,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(11,7722,5892,1,'kyo/bench/EnqueueDequeueBench$$Lambda$60.0x0000000800d4fc00.apply')
f(12,7722,5892,1,'kyo/bench/EnqueueDequeueBench.$anonfun$1')
f(13,7722,1309,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(14,7722,1309,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(15,7722,1309,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,7722,1309,2,'kyo.bench.EnqueueDequeueBench$$Lambda$62+0x0000000800d548a8')
f(13,9031,1997,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(14,9031,1997,2,'kyo.bench.EnqueueDequeueBench$$anon$1')
f(13,11028,2586,1,'kyo/concurrent/channels$Channels$$anon$14.take')
f(14,11028,2586,1,'kyo/concurrent/channels$Channels$Blocking.take$')
f(15,11028,2586,1,'kyo/concurrent/channels$Channels$Blocking.take')
f(16,11028,841,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,11028,841,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,11028,841,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,11028,841,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$61+0x0000000800d544d8')
f(16,11869,1745,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2')
f(17,11869,1745,2,'kyo.concurrent.channels$Channels$Blocking$$anon$2')
f(9,13614,49,1,'kyo/bench/EnqueueDequeueBench$$anon$3.apply')
f(10,13614,1,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$3')
f(11,13614,1,1,'kyo/bench/EnqueueDequeueBench$$Lambda$57.0x0000000800d4c768.apply')
f(12,13614,1,1,'kyo/bench/EnqueueDequeueBench.$anonfun$3')
f(13,13614,1,1,'kyo/bench/EnqueueDequeueBench.loop$2')
f(14,13614,1,1,'kyo/concurrent/channels$Channels$$anon$14.put')
f(15,13614,1,1,'kyo/concurrent/channels$Channels$Blocking.put$')
f(16,13614,1,1,'kyo/concurrent/channels$Channels$Blocking.put')
f(17,13614,1,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1')
f(18,13614,1,2,'kyo.concurrent.channels$Channels$Blocking$$anon$1')
f(10,13615,48,1,'kyo/concurrent/channels$Channels$$anon$21.apply')
f(11,13615,47,1,'kyo/concurrent/channels$Channels$.kyo$concurrent$channels$Channels$$$_$transformLoop$11')
f(12,13615,47,1,'kyo/concurrent/channels$Channels$$$Lambda$56.0x0000000800d4bf98.apply')
f(13,13615,47,1,'kyo/concurrent/channels$Channels$.$anonfun$9')
f(14,13615,1,2,'kyo.concurrent.channels$Channels$$anon$14')
f(14,13616,46,1,'kyo/concurrent/channels$Channels$$anon$14.<init>')
f(15,13616,1,1,'kyo/concurrent/queues$Queue.isFull')
f(16,13616,1,2,'kyo.concurrent.queues$Queue$$anon$3')
f(15,13617,11,2,'org.jctools.queues.MpmcUnboundedXaddArrayQueue')
f(15,13628,34,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(16,13628,34,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(17,13628,34,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.<init>')
f(18,13628,7,2,'org.jctools.queues.SpscArrayQueue')
f(18,13635,26,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(19,13635,26,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(20,13635,26,1,'org/jctools/queues/MpmcUnboundedXaddChunk.<init>')
f(21,13635,2,1,'org/jctools/queues/MpUnboundedXaddChunk.<init>')
f(22,13635,2,1,'org/jctools/util/UnsafeRefArrayAccess.allocateRefArray')
f(23,13635,2,2,'java.lang.Object[]')
f(21,13637,24,1,'org/jctools/util/UnsafeLongArrayAccess.allocateLongArray')
f(22,13637,24,2,'long[]')
f(18,13661,1,1,'org/jctools/queues/SpscArrayQueue.<init>')
f(19,13661,1,1,'org/jctools/queues/SpscArrayQueueL3Pad.<init>')
f(20,13661,1,1,'org/jctools/queues/SpscArrayQueueConsumerIndexField.<init>')
f(21,13661,1,1,'org/jctools/queues/SpscArrayQueueL2Pad.<init>')
f(22,13661,1,1,'org/jctools/queues/SpscArrayQueueProducerIndexFields.<init>')
f(23,13661,1,1,'org/jctools/queues/SpscArrayQueueL1Pad.<init>')
f(24,13661,1,1,'org/jctools/queues/SpscArrayQueueColdField.<init>')
f(25,13661,1,1,'org/jctools/queues/ConcurrentCircularArrayQueue.<init>')
f(26,13661,1,1,'org/jctools/util/UnsafeRefArrayAccess.allocateRefArray')
f(27,13661,1,2,'java.lang.Object[]')
f(11,13662,1,1,'kyo/concurrent/queues$Queues$$anon$11.apply')
f(12,13662,1,1,'kyo/concurrent/queues$Queues$$anon$11.apply')
f(13,13662,1,2,'kyo.concurrent.queues$Queue')
f(9,13663,127,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,13663,127,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,13663,127,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c81148.apply')
f(12,13663,127,1,'kyo/bench/Bench.$anonfun$1')
f(13,13663,127,1,'kyo/bench/EnqueueDequeueBench.kyoBenchFiber')
f(14,13663,127,1,'kyo/concurrent/channels$Channels$.blocking')
f(15,13663,127,1,'kyo/concurrent/queues$Queues$.bounded')
f(16,13663,127,2,'kyo.concurrent.queues$Queues$$anon$11')
f(1,13790,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,13790,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,13790,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,13790,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,13790,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,13790,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,13790,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,13790,1,2,'org.openjdk.jmh.runner.InfraControl')
f(8,13791,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,13791,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,13791,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,13791,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,13791,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,13791,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 560px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(35);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,294,3,'all')
f(1,0,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,1,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,'G1BatchedGangTask::~G1BatchedGangTask()')
f(14,0,1,4,'G1PostEvacuateCollectionSetCleanupTask2::FreeCollectionSetTask::~FreeCollectionSetTask()')
f(15,0,1,4,'G1PostEvacuateCollectionSetCleanupTask2::FreeCollectionSetTask::~FreeCollectionSetTask()')
f(16,0,1,4,'G1PostEvacuateCollectionSetCleanupTask2::FreeCollectionSetTask::report_statistics()')
f(1,1,2,3,'[unknown_Java]')
f(2,1,2,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(1,3,291,1,'java/lang/Thread.run')
f(2,3,291,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,3,291,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,3,3,1,'java/util/concurrent/FutureTask.run')
f(5,3,3,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,3,3,1,'java/util/concurrent/FutureTask.run')
f(7,3,3,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,3,3,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,3,3,1,'java/lang/reflect/Method.invoke')
f(10,3,3,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,3,3,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,3,3,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,3,3,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,3,3,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,3,3,1,'kyo/bench/Bench.forkKyo')
f(16,3,3,1,'kyo/bench/Bench.runLoop$2')
f(17,3,2,1,'kyo/bench/Bench$$anon$1.apply')
f(18,3,2,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,3,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,3,2,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(21,3,2,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,3,2,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,3,2,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,3,2,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,3,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,3,2,1,'jdk/internal/misc/Unsafe.unpark')
f(27,3,2,3,'pthread_cond_signal')
f(28,3,2,5,'entry_SYSCALL_64_after_hwframe')
f(29,3,2,5,'do_syscall_64')
f(30,3,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(30,4,1,5,'syscall_enter_from_user_mode')
f(17,5,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,5,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,5,1,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,5,1,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,5,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(4,6,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ea20.run')
f(5,6,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,6,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,6,1,1,'java/lang/Thread.sleep')
f(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$52.0x0000000800d230f8.run')
f(5,7,287,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,7,287,1,'kyo/concurrent/scheduler/Worker.runWorker',0,0,1)
f(7,8,285,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,8,285,1,'kyo/concurrent/scheduler/IOTask.eval',49,0,0)
f(9,48,118,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,54,2,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(11,54,2,1,'kyo/bench/EnqueueDequeueBench$$Lambda$62.0x0000000800d548a8.apply')
f(12,54,2,1,'kyo/bench/EnqueueDequeueBench.$anonfun$2')
f(13,54,2,1,'kyo/bench/EnqueueDequeueBench.loop$2')
f(14,54,2,1,'kyo/concurrent/channels$Channels$$anon$14.put')
f(15,54,2,1,'kyo/concurrent/channels$Channels$Blocking.put$')
f(16,54,2,1,'kyo/concurrent/channels$Channels$Blocking.put')
f(17,54,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,54,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,54,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,54,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(21,54,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(22,54,1,4,'MemAllocator::allocate() const')
f(23,54,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(24,54,1,4,'ThreadLocalAllocBuffer::retire_before_allocation()')
f(25,54,1,4,'CollectedHeap::fill_with_dummy_object(HeapWordImpl**, HeapWordImpl**, bool)')
f(26,54,1,4,'ObjArrayAllocator::initialize(HeapWordImpl**) const')
f(17,55,1,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1')
f(18,55,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(19,55,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(20,55,1,4,'MemAllocator::allocate() const')
f(21,55,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(22,55,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,56,110,2,'kyo/concurrent/channels$Channels$Blocking$$anon$2.apply',108,0,0)
f(11,63,95,2,'kyo/concurrent/channels$$anon$16.apply',93,0,0)
f(12,82,76,2,'kyo/concurrent/channels$$anon$16.apply',74,0,0)
f(13,97,2,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(13,99,18,2,'kyo/concurrent/fibers$Fibers.value',18,0,0)
f(14,99,18,2,'kyo/concurrent/fibers$Fiber$.done',18,0,0)
f(15,99,18,2,'kyo/concurrent/fibers$Fiber.<init>',18,0,0)
f(13,117,39,2,'kyo/concurrent/queues$$anon$12.poll',39,0,0)
f(14,125,30,2,'java/util/concurrent/atomic/AtomicReference.getAndSet',30,0,0)
f(15,125,30,2,'java/lang/invoke/VarHandleGuards.guard_LL_L',30,0,0)
f(16,132,1,2,'java/lang/invoke/VarForm.getMemberName',1,0,0)
f(16,133,3,2,'java/lang/invoke/VarHandle.checkExactAccessMode',3,0,0)
f(16,136,4,2,'java/lang/invoke/VarHandle.isDirect',4,0,0)
f(16,140,15,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.getAndSet',15,0,0)
f(14,155,1,2,'scala/Option$.apply',1,0,0)
f(15,155,1,2,'scala/Some.<init>',1,0,0)
f(16,155,1,2,'scala/Option.<init>',1,0,0)
f(17,155,1,2,'java/lang/Object.<init>',1,0,0)
f(13,156,2,2,'scala/Some.value',2,0,0)
f(11,158,8,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2',8,0,0)
f(12,165,1,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$61.0x0000000800d544d8.apply',1,0,0)
f(13,165,1,2,'kyo/concurrent/channels$Channels$Blocking.$anonfun$2',1,0,0)
f(14,165,1,2,'kyo/concurrent/fibers$Fiber.join',1,0,0)
f(9,166,94,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,181,24,2,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2',24,0,0)
f(11,189,11,2,'kyo/bench/EnqueueDequeueBench$$Lambda$60.0x0000000800d4fc00.apply',11,0,0)
f(12,189,11,2,'kyo/bench/EnqueueDequeueBench.$anonfun$1',11,0,0)
f(13,197,3,2,'kyo/concurrent/channels$Channels$$anon$14.take',3,0,0)
f(14,197,3,2,'kyo/concurrent/channels$Channels$Blocking.take$',3,0,0)
f(15,199,1,2,'kyo/concurrent/channels$Channels$Blocking.take',1,0,0)
f(16,199,1,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2',1,0,0)
f(11,200,5,2,'kyo/bench/EnqueueDequeueBench$$anon$2.<init>',5,0,0)
f(12,203,2,2,'kyo/core$internal$KyoCont.<init>',2,0,0)
f(10,205,55,2,'kyo/concurrent/channels$Channels$Blocking$$anon$1.apply',46,0,0)
f(11,210,37,2,'kyo/concurrent/channels$$anon$19.apply',28,0,0)
f(12,210,37,2,'kyo/concurrent/channels$$anon$19.apply',28,0,0)
f(13,213,9,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(14,220,2,2,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.isEmpty',2,0,0)
f(15,220,2,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.isEmpty',2,0,0)
f(16,220,2,2,'org/jctools/queues/IndexedQueueSizeUtil.isEmpty',2,0,0)
f(13,222,25,2,'kyo/concurrent/queues$$anon$12.offer',25,0,0)
f(14,222,25,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',25,0,0)
f(15,223,24,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',24,0,0)
f(16,242,3,2,'java/lang/invoke/VarForm.getMemberName',3,0,0)
f(16,245,1,2,'java/lang/invoke/VarHandle.checkExactAccessMode',1,0,0)
f(16,246,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(11,247,13,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1',13,0,0)
f(12,247,13,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$59.0x0000000800d4f830.apply',13,0,0)
f(13,253,7,2,'kyo/concurrent/channels$Channels$Blocking.$anonfun$1',7,0,0)
f(9,260,2,1,'kyo/bench/EnqueueDequeueBench$$anon$3.apply')
f(10,260,2,1,'kyo/concurrent/channels$Channels$$anon$21.apply')
f(11,260,2,1,'kyo/concurrent/channels$Channels$.kyo$concurrent$channels$Channels$$$_$transformLoop$11')
f(12,260,2,2,'kyo/concurrent/channels$Channels$$$Lambda$56.0x0000000800d4bf98.apply',2,0,0)
f(13,260,2,2,'kyo/concurrent/channels$Channels$.$anonfun$9',2,0,0)
f(14,260,2,2,'kyo/concurrent/channels$Channels$$anon$14.<init>',2,0,0)
f(15,260,2,2,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>',2,0,0)
f(16,260,2,2,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>',2,0,0)
f(17,260,2,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.<init>',2,0,0)
f(18,260,2,2,'org/jctools/queues/MpUnboundedXaddArrayQueuePad5.<init>',2,0,0)
f(19,260,2,2,'org/jctools/queues/MpUnboundedXaddArrayQueueConsumerFields.<init>',2,0,0)
f(20,260,2,2,'org/jctools/queues/MpUnboundedXaddArrayQueuePad3.<init>',2,0,0)
f(21,260,2,2,'org/jctools/queues/MpUnboundedXaddArrayQueueProducerChunk.<init>',2,0,0)
f(9,262,4,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,262,4,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,262,4,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,262,4,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,262,4,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,262,4,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,262,4,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,262,4,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,262,4,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,262,4,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,262,4,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,262,4,1,'jdk/internal/misc/Unsafe.unpark')
f(21,262,1,3,'Unsafe_Unpark')
f(22,262,1,3,'pthread_mutex_lock')
f(21,263,3,3,'pthread_cond_signal')
f(22,263,3,5,'entry_SYSCALL_64_after_hwframe')
f(23,263,1,5,'__x64_sys_futex')
f(23,264,2,5,'do_syscall_64')
f(24,264,2,5,'__x64_sys_futex')
f(25,264,2,5,'do_futex')
f(26,264,2,5,'futex_wake')
f(27,264,2,5,'wake_up_q')
f(28,264,2,5,'_raw_spin_unlock_irqrestore')
f(9,266,3,2,'kyo/concurrent/scheduler/IOTask.st',3,0,0)
f(9,269,18,6,'kyo/core$internal$KyoCont.effect',0,18,0)
f(10,286,1,5,'asm_sysvec_hyperv_stimer0')
f(11,286,1,5,'sysvec_hyperv_stimer0')
f(12,286,1,5,'irq_exit_rcu')
f(13,286,1,5,'__irq_exit_rcu')
f(14,286,1,5,'__softirqentry_text_start')
f(15,286,1,5,'update_blocked_averages')
f(9,287,6,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')
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,13851,3,'all')
f(1,0,13847,1,'java/lang/Thread.run')
f(2,0,13847,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,13847,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,1431,1,'java/util/concurrent/FutureTask.run')
f(5,0,1431,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,1431,1,'java/util/concurrent/FutureTask.run')
f(7,0,1431,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,1431,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1431,1,'java/lang/reflect/Method.invoke')
f(10,0,1431,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,1431,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,1431,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,1431,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,1430,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,1430,1,'kyo/bench/Bench.syncKyo')
f(16,0,738,1,'kyo/bench/Bench.runLoop$1')
f(17,0,369,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,369,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,369,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,369,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,283,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,283,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,160,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,160,123,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,160,123,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,283,52,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,335,34,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,335,34,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,335,34,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,369,369,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,369,341,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,369,341,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,369,341,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,369,291,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,369,291,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,369,291,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(24,369,291,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,369,291,2,'kyo.concurrent.scheduler.IOTask')
f(21,660,50,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,660,50,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c88000.apply')
f(23,660,50,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,660,50,1,'kyo/concurrent/fibers$Fiber.join')
f(25,660,50,1,'kyo/concurrent/fibers$Fibers.get')
f(26,660,50,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,660,50,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,710,28,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,710,28,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c885f8.apply')
f(20,710,28,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,710,28,1,'kyo/concurrent/fibers$Fiber.block')
f(22,710,28,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,738,692,1,'kyo/bench/EnqueueDequeueBench.kyoBench')
f(17,738,133,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,738,133,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,738,133,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,738,133,2,'kyo.bench.EnqueueDequeueBench$$Lambda$37+0x0000000800c81148')
f(17,871,406,1,'kyo/concurrent/fibers$Fibers.block')
f(18,871,137,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,871,137,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,1008,209,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,1008,209,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,1217,60,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,1217,60,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,1277,153,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,1277,66,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,1277,66,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,1277,66,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,1277,66,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c88000')
f(18,1343,41,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,1343,21,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,1343,21,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,1343,21,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,1343,21,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c828a0')
f(19,1364,20,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,1364,20,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(18,1384,46,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,1384,46,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(14,1430,1,1,'org/openjdk/jmh/results/ThroughputResult.<init>')
f(15,1430,1,1,'java/lang/StringBuilder.toString')
f(16,1430,1,1,'java/lang/StringLatin1.newString')
f(17,1430,1,2,'java.lang.String')
f(4,1431,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec30.run')
f(5,1431,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,1431,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,1431,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,1431,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,1431,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,1431,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,1431,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,1442,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1ee58.run')
f(5,1442,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,1442,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,1442,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,1442,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,1442,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,1442,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$64+0x0000000800d55210')
f(4,1453,12394,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23480.run')
f(5,1453,12394,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,1453,12394,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,1453,12394,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,1453,12394,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,1453,6732,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,1453,5861,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(11,1453,5861,1,'kyo/bench/EnqueueDequeueBench$$Lambda$63.0x0000000800d54e40.apply')
f(12,1453,5861,1,'kyo/bench/EnqueueDequeueBench.$anonfun$2')
f(13,1453,5861,1,'kyo/bench/EnqueueDequeueBench.loop$2')
f(14,1453,1093,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(15,1453,1093,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(16,1453,1093,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,1453,1093,2,'kyo.bench.EnqueueDequeueBench$$Lambda$61+0x0000000800d543d0')
f(14,2546,1440,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(15,2546,1440,2,'kyo.bench.EnqueueDequeueBench$$anon$2')
f(14,3986,3328,1,'kyo/concurrent/channels$Channels$$anon$14.put')
f(15,3986,3328,1,'kyo/concurrent/channels$Channels$Blocking.put$')
f(16,3986,3328,1,'kyo/concurrent/channels$Channels$Blocking.put')
f(17,3986,740,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,3986,740,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,3986,740,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,3986,740,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$60+0x0000000800d54000')
f(17,4726,1061,1,'kyo/concurrent/channels$Channels$$anon$14.putFiber')
f(18,4726,1061,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$_$transformLoop$10')
f(19,4726,1061,1,'kyo/concurrent/channels$Channels$$anon$14$$Lambda$59.0x0000000800d4f950.apply')
f(20,4726,1061,1,'kyo/concurrent/channels$Channels$$anon$14.$anonfun$11')
f(21,4726,1061,2,'kyo.concurrent.channels$$anon$19')
f(17,5787,1527,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1')
f(18,5787,1527,2,'kyo.concurrent.channels$Channels$Blocking$$anon$1')
f(10,7314,871,1,'kyo/concurrent/channels$Channels$Blocking$$anon$2.apply')
f(11,7314,871,1,'kyo/concurrent/channels$$anon$16.apply')
f(12,7314,871,1,'kyo/concurrent/channels$$anon$16.apply')
f(13,7314,871,1,'kyo/concurrent/fibers$Fibers.value')
f(14,7314,871,1,'kyo/concurrent/fibers$Fiber$.done')
f(15,7314,871,2,'kyo.concurrent.fibers$Fiber')
f(9,8185,5466,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,8185,4752,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2')
f(11,8185,4752,1,'kyo/bench/EnqueueDequeueBench$$Lambda$61.0x0000000800d543d0.apply')
f(12,8185,4752,1,'kyo/bench/EnqueueDequeueBench.$anonfun$1')
f(13,8185,1172,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d51000.linkToTargetMethod')
f(14,8185,1172,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d50800.newInvokeSpecial')
f(15,8185,1172,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,8185,1172,2,'kyo.bench.EnqueueDequeueBench$$Lambda$63+0x0000000800d54e40')
f(13,9357,1366,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(14,9357,1366,2,'kyo.bench.EnqueueDequeueBench$$anon$1')
f(13,10723,2214,1,'kyo/concurrent/channels$Channels$$anon$14.take')
f(14,10723,2214,1,'kyo/concurrent/channels$Channels$Blocking.take$')
f(15,10723,2214,1,'kyo/concurrent/channels$Channels$Blocking.take')
f(16,10723,903,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,10723,903,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,10723,903,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,10723,903,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$62+0x0000000800d54a70')
f(16,11626,1311,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2')
f(17,11626,1311,2,'kyo.concurrent.channels$Channels$Blocking$$anon$2')
f(10,12937,714,1,'kyo/concurrent/channels$Channels$Blocking$$anon$1.apply')
f(11,12937,714,1,'kyo/concurrent/channels$$anon$19.apply')
f(12,12937,714,1,'kyo/concurrent/channels$$anon$19.apply')
f(13,12937,714,1,'kyo/concurrent/fibers$Fibers.value')
f(14,12937,714,1,'kyo/concurrent/fibers$Fiber$.done')
f(15,12937,714,2,'kyo.concurrent.fibers$Fiber')
f(9,13651,55,1,'kyo/bench/EnqueueDequeueBench$$anon$3.apply')
f(10,13651,1,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$3')
f(11,13651,1,1,'kyo/bench/EnqueueDequeueBench$$Lambda$58.0x0000000800d4cc58.apply')
f(12,13651,1,1,'kyo/bench/EnqueueDequeueBench.$anonfun$3')
f(13,13651,1,1,'kyo/bench/EnqueueDequeueBench.loop$2')
f(14,13651,1,1,'kyo/concurrent/channels$Channels$$anon$14.put')
f(15,13651,1,1,'kyo/concurrent/channels$Channels$Blocking.put$')
f(16,13651,1,1,'kyo/concurrent/channels$Channels$Blocking.put')
f(17,13651,1,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1')
f(18,13651,1,2,'kyo.concurrent.channels$Channels$Blocking$$anon$1')
f(10,13652,54,1,'kyo/concurrent/channels$Channels$$anon$21.apply')
f(11,13652,54,1,'kyo/concurrent/channels$Channels$.kyo$concurrent$channels$Channels$$$_$transformLoop$11')
f(12,13652,54,1,'kyo/concurrent/channels$Channels$$$Lambda$57.0x0000000800d4c488.apply')
f(13,13652,54,1,'kyo/concurrent/channels$Channels$.$anonfun$9')
f(14,13652,54,1,'kyo/concurrent/channels$Channels$$anon$14.<init>')
f(15,13652,13,2,'org.jctools.queues.MpmcUnboundedXaddArrayQueue')
f(15,13665,41,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(16,13665,41,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(17,13665,41,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.<init>')
f(18,13665,9,2,'org.jctools.queues.SpscArrayQueue')
f(18,13674,32,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(19,13674,32,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(20,13674,32,1,'org/jctools/queues/MpmcUnboundedXaddChunk.<init>')
f(21,13674,1,1,'org/jctools/queues/MpUnboundedXaddChunk.<init>')
f(22,13674,1,1,'org/jctools/util/UnsafeRefArrayAccess.allocateRefArray')
f(23,13674,1,2,'java.lang.Object[]')
f(21,13675,31,1,'org/jctools/util/UnsafeLongArrayAccess.allocateLongArray')
f(22,13675,31,2,'long[]')
f(9,13706,141,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,13706,141,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,13706,141,1,'kyo/bench/EnqueueDequeueBench$$Lambda$37.0x0000000800c81148.apply')
f(12,13706,141,1,'kyo/bench/EnqueueDequeueBench.kyoBench$$anonfun$1')
f(13,13706,141,1,'kyo/bench/EnqueueDequeueBench.kyoBenchFiber')
f(14,13706,141,1,'kyo/concurrent/channels$Channels$.blocking')
f(15,13706,141,1,'kyo/concurrent/queues$Queues$.bounded')
f(16,13706,141,2,'kyo.concurrent.queues$Queues$$anon$11')
f(1,13847,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,13847,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,13847,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,13847,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,13847,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,13847,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,13847,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,13847,1,2,'org.openjdk.jmh.runner.InfraControl')
f(8,13848,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,13848,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,13848,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,13848,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,13848,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,13848,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 608px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(38);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,294,3,'all')
f(1,0,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,1,3,'thread_native_entry(Thread*)')
f(3,0,1,4,'Thread::call_run()')
f(4,0,1,4,'VMThread::run()')
f(5,0,1,4,'VMThread::inner_execute(VM_Operation*)')
f(6,0,1,4,'VMThread::evaluate_operation(VM_Operation*)')
f(7,0,1,4,'VM_Operation::evaluate()')
f(8,0,1,4,'VM_G1CollectForAllocation::doit()')
f(9,0,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint(double)')
f(10,0,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint_helper(double)')
f(11,0,1,4,'G1CollectedHeap::pre_evacuate_collection_set(G1EvacuationInfo&, G1ParScanThreadStateSet*)')
f(12,0,1,4,'WorkGang::run_task(AbstractGangTask*, unsigned int, bool)')
f(13,0,1,3,'sem_post')
f(14,0,1,5,'entry_SYSCALL_64_after_hwframe')
f(15,0,1,5,'do_syscall_64')
f(16,0,1,5,'__x64_sys_futex')
f(17,0,1,5,'do_futex')
f(18,0,1,5,'futex_wake')
f(19,0,1,5,'wake_up_q')
f(20,0,1,5,'_raw_spin_unlock_irqrestore')
f(1,1,3,3,'[unknown_Java]')
f(2,1,1,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(2,2,2,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
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,3,1,'java/util/concurrent/FutureTask.run')
f(5,4,3,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,4,3,1,'java/util/concurrent/FutureTask.run')
f(7,4,3,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,4,3,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,4,3,1,'java/lang/reflect/Method.invoke')
f(10,4,3,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,4,3,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,4,3,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,4,3,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,4,3,1,'kyo/bench/jmh_generated/EnqueueDequeueBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,4,3,1,'kyo/bench/Bench.syncKyo')
f(16,4,3,1,'kyo/bench/Bench.runLoop$1')
f(17,4,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,4,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,4,1,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,4,1,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,4,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,4,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,4,1,1,'java/util/concurrent/locks/LockSupport.park')
f(24,4,1,1,'jdk/internal/misc/Unsafe.park')
f(25,4,1,3,'Unsafe_Park')
f(26,4,1,3,'pthread_mutex_unlock')
f(17,5,2,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,5,2,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,5,2,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,5,2,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,5,2,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,5,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,5,2,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c828a0.apply')
f(24,5,2,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,5,2,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,5,2,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,5,2,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(28,5,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(29,5,2,1,'jdk/internal/misc/Unsafe.unpark')
f(30,5,2,3,'pthread_cond_signal')
f(31,5,2,5,'entry_SYSCALL_64_after_hwframe')
f(32,5,2,5,'do_syscall_64')
f(33,5,2,5,'__x64_sys_futex')
f(34,5,2,5,'do_futex')
f(35,5,2,5,'futex_wake')
f(36,5,2,5,'wake_up_q')
f(37,5,2,5,'_raw_spin_unlock_irqrestore')
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',0,0,1)
f(7,8,283,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,8,283,1,'kyo/concurrent/scheduler/IOTask.eval',36,0,0)
f(9,37,121,1,'kyo/bench/EnqueueDequeueBench$$anon$1.apply')
f(10,41,2,1,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$1')
f(11,41,2,1,'kyo/bench/EnqueueDequeueBench$$Lambda$63.0x0000000800d54e40.apply')
f(12,41,2,1,'kyo/bench/EnqueueDequeueBench.$anonfun$2')
f(13,41,2,1,'kyo/bench/EnqueueDequeueBench.loop$2')
f(14,41,2,1,'kyo/concurrent/channels$Channels$$anon$14.put')
f(15,41,2,1,'kyo/concurrent/channels$Channels$Blocking.put$')
f(16,41,2,1,'kyo/concurrent/channels$Channels$Blocking.put')
f(17,41,2,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1')
f(18,41,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(19,41,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(20,41,1,4,'MemAllocator::allocate() const')
f(21,41,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(22,41,1,4,'G1Allocator::unsafe_max_tlab_alloc()')
f(18,42,1,4,'SharedRuntime::on_slowpath_allocation_exit(JavaThread*)')
f(10,43,115,2,'kyo/concurrent/channels$Channels$Blocking$$anon$2.apply',108,0,0)
f(11,47,104,2,'kyo/concurrent/channels$$anon$16.apply',97,0,0)
f(12,68,83,2,'kyo/concurrent/channels$$anon$16.apply',76,0,0)
f(13,113,7,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(14,119,1,2,'kyo/concurrent/channels$Channels$$anon$14.q',1,0,0)
f(13,120,15,2,'kyo/concurrent/fibers$Fibers.value',15,0,0)
f(14,120,15,2,'kyo/concurrent/fibers$Fiber$.done',15,0,0)
f(15,120,15,2,'kyo/concurrent/fibers$Fiber.<init>',15,0,0)
f(16,120,15,2,'java/lang/Object.<init>',15,0,0)
f(13,135,16,2,'kyo/concurrent/queues$$anon$12.poll',16,0,0)
f(14,138,13,2,'java/util/concurrent/atomic/AtomicReference.getAndSet',13,0,0)
f(15,140,11,2,'java/lang/invoke/VarHandleGuards.guard_LL_L',11,0,0)
f(16,144,7,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.getAndSet',7,0,0)
f(11,151,7,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2',7,0,0)
f(12,153,5,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$62.0x0000000800d54a70.apply',5,0,0)
f(9,158,106,1,'kyo/bench/EnqueueDequeueBench$$anon$2.apply')
f(10,171,16,2,'kyo/bench/EnqueueDequeueBench.kyo$bench$EnqueueDequeueBench$$_$transformLoop$2',16,0,0)
f(11,171,14,2,'kyo/bench/EnqueueDequeueBench$$Lambda$61.0x0000000800d543d0.apply',14,0,0)
f(12,180,5,2,'kyo/bench/EnqueueDequeueBench.$anonfun$1',5,0,0)
f(13,180,5,2,'kyo/concurrent/channels$Channels$$anon$14.take',5,0,0)
f(14,180,5,2,'kyo/concurrent/channels$Channels$Blocking.take$',5,0,0)
f(15,180,5,2,'kyo/concurrent/channels$Channels$Blocking.take',5,0,0)
f(16,182,3,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',3,0,0)
f(11,185,2,2,'kyo/bench/EnqueueDequeueBench$$anon$2.<init>',2,0,0)
f(12,185,2,2,'kyo/core$internal$KyoCont.<init>',2,0,0)
f(10,187,77,2,'kyo/concurrent/channels$Channels$Blocking$$anon$1.apply',67,0,0)
f(11,188,36,2,'kyo/concurrent/channels$$anon$19.apply',26,0,0)
f(12,189,35,2,'kyo/concurrent/channels$$anon$19.apply',25,0,0)
f(13,195,9,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(14,197,2,2,'kyo/concurrent/channels$Channels$$anon$14.q',2,0,0)
f(14,199,5,2,'kyo/concurrent/queues$$anon$12.isFull',5,0,0)
f(15,199,5,2,'java/util/concurrent/atomic/AtomicReference.get',5,0,0)
f(13,204,2,2,'kyo/concurrent/channels$Channels$$anon$14.q',2,0,0)
f(13,206,18,2,'kyo/concurrent/queues$$anon$12.offer',17,0,0)
f(14,206,18,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',17,0,0)
f(15,206,18,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',17,0,0)
f(16,221,1,1,'java/lang/invoke/VarForm.getMemberName')
f(17,221,1,4,'ClassLoaderData::holder_phantom() const')
f(16,222,2,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',2,0,0)
f(11,224,40,2,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$1',40,0,0)
f(12,228,36,2,'kyo/concurrent/channels$Channels$Blocking$$Lambda$60.0x0000000800d54000.apply',36,0,0)
f(13,239,25,2,'kyo/concurrent/channels$Channels$Blocking.$anonfun$1',25,0,0)
f(14,239,25,2,'kyo/concurrent/fibers$Fiber.join',25,0,0)
f(9,264,3,2,'kyo/concurrent/scheduler/IOTask.st',3,0,0)
f(9,267,20,6,'kyo/core$internal$KyoCont.effect',0,20,0)
f(9,287,4,3,'vtable stub')
f(7,291,2,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,291,2,1,'kyo/concurrent/scheduler/Worker.park')
f(9,291,2,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,291,2,1,'jdk/internal/misc/Unsafe.park')
f(11,291,1,3,'Unsafe_Park')
f(12,291,1,3,'clock_gettime')
f(13,291,1,3,'[vdso]')
f(11,292,1,3,'[unknown]')
f(12,292,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,292,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,292,1,5,'do_syscall_64')
f(15,292,1,5,'__x64_sys_futex')
f(16,292,1,5,'do_futex')
f(17,292,1,5,'futex_wait')
f(18,292,1,5,'futex_wait_queue_me')
f(19,292,1,5,'hrtimer_sleeper_start_expires')
f(20,292,1,5,'_raw_spin_unlock_irqrestore')
f(7,293,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,293,1,2,'kyo/concurrent/scheduler/Scheduler$.randomWorker',1,0,0)
f(9,293,1,2,'java/util/Random.nextInt',1,0,0)
f(10,293,1,2,'kyo/concurrent/scheduler/XSRandom$.next',1,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 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,13971,3,'all')
f(1,0,13968,1,'java/lang/Thread.run')
f(2,0,13968,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,13968,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,204,1,'java/util/concurrent/FutureTask.run')
f(5,0,204,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,204,1,'java/util/concurrent/FutureTask.run')
f(7,0,204,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,204,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,204,1,'java/lang/reflect/Method.invoke')
f(10,0,204,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,204,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,204,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,204,1,'kyo/bench/jmh_generated/ForkManyBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,204,1,'kyo/bench/jmh_generated/ForkManyBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,204,1,'kyo/bench/Bench.forkKyo')
f(16,0,7,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,7,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,7,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,5,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,0,5,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3f718')
f(19,5,2,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3f718')
f(16,7,37,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,7,37,2,'kyo.bench.Bench$$anon$1')
f(16,44,124,1,'kyo/bench/Bench.runLoop$2')
f(17,44,68,1,'kyo/bench/Bench$$anon$1.apply')
f(18,44,32,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,44,32,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c83b00.apply')
f(20,44,32,1,'kyo/bench/Bench.$anonfun$2')
f(21,44,32,1,'kyo/concurrent/fibers$Fiber.block')
f(22,44,32,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,76,36,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,76,36,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,76,36,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(21,76,36,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,76,36,2,'kyo.concurrent.scheduler.IOTask')
f(17,112,56,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,112,56,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,112,56,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,112,56,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,112,26,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,112,26,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,112,26,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,112,26,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,138,30,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,138,30,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,138,30,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,168,36,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,168,36,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,168,36,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,168,36,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,168,36,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c85068')
f(4,204,8,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1f2b8.run')
f(5,204,8,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,204,8,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,204,8,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,204,8,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,204,8,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,204,8,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,204,8,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,212,10,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f4e0.run')
f(5,212,10,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,212,2,1,'kyo/concurrent/scheduler/Scheduler$.addWorker')
f(7,212,2,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers')
f(8,212,2,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(9,212,2,1,'java/util/concurrent/ThreadPoolExecutor.addWorker')
f(10,212,2,1,'java/util/concurrent/ThreadPoolExecutor$Worker.<init>')
f(11,212,2,1,'kyo/concurrent/scheduler/Threads$$anon$1.newThread')
f(12,212,2,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$51.0x0000000800d23ff0.apply')
f(13,212,2,1,'kyo/concurrent/scheduler/Scheduler$.$init$$$anonfun$1')
f(14,212,2,1,'kyo/concurrent/scheduler/Worker.<init>')
f(15,212,2,1,'java/lang/Thread.<init>')
f(16,212,2,1,'java/lang/Thread.<init>')
f(17,212,2,1,'java/lang/Thread.<init>')
f(18,212,2,1,'java/security/AccessController.getContext')
f(19,212,2,1,'java/security/AccessControlContext.optimize')
f(20,212,2,1,'java/security/AccessControlContext.combine')
f(21,212,2,2,'java.security.ProtectionDomain[]')
f(6,214,8,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,214,8,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,214,8,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,214,8,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,214,8,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$69+0x0000000800d4fd90')
f(4,222,13746,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fda8.run')
f(5,222,13746,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,222,13746,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,222,10,1,'java/util/concurrent/CopyOnWriteArrayList.add')
f(8,222,10,1,'java/util/Arrays.copyOf')
f(9,222,10,1,'java/util/Arrays.copyOf')
f(10,222,10,2,'java.lang.Object[]')
f(7,232,12314,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,232,12314,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,232,12300,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,232,10113,1,'kyo/bench/ForkManyBench$$anon$1.apply')
f(11,232,4103,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(12,232,4103,1,'kyo/bench/ForkManyBench$$Lambda$61.0x0000000800d4b2f0.apply')
f(13,232,4103,1,'kyo/bench/ForkManyBench.$anonfun$2')
f(14,232,4103,1,'kyo/bench/ForkManyBench.repeat$2')
f(15,232,1929,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4cc00.linkToTargetMethod')
f(16,232,1929,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c400.newInvokeSpecial')
f(17,232,1929,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,232,1929,2,'kyo.bench.ForkManyBench$$Lambda$61+0x0000000800d4b2f0')
f(15,2161,2174,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(16,2161,2174,2,'kyo.bench.ForkManyBench$$anon$1')
f(11,4335,6010,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,4335,6010,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,4335,6010,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(14,4335,6010,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,4335,855,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,5190,4198,2,'kyo.concurrent.scheduler.IOTask')
f(15,9388,952,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,9388,952,2,'kyo.concurrent.fibers$Fiber')
f(15,10340,5,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(16,10340,5,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(17,10340,5,1,'kyo/concurrent/scheduler/Queue.offer')
f(18,10340,5,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(19,10340,5,1,'scala/Function0.apply$mcZ$sp')
f(20,10340,5,1,'kyo/concurrent/scheduler/Queue$$Lambda$54.0x0000000800d474b0.apply')
f(21,10340,5,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1')
f(22,10340,5,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,10340,5,1,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize')
f(24,10340,5,1,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize')
f(25,10340,5,1,'scala/collection/mutable/ArrayBuffer$.scala$collection$mutable$ArrayBuffer$$ensureSize')
f(26,10340,5,5,'java.lang.Object[]')
f(10,10345,2187,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5')
f(11,10345,2186,2,'kyo.bench.ForkManyBench$$anon$6')
f(11,12531,1,1,'kyo/bench/ForkManyBench$$Lambda$62.0x0000000800d4b6c0.apply')
f(12,12531,1,1,'kyo/bench/ForkManyBench.$anonfun$8')
f(13,12531,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$4')
f(14,12531,1,2,'kyo.bench.ForkManyBench$$anon$5')
f(9,12532,3,1,'kyo/bench/ForkManyBench$$anon$7.apply')
f(10,12532,1,1,'kyo/bench/ForkManyBench$$anon$4.apply')
f(11,12532,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$3')
f(12,12532,1,1,'kyo/bench/ForkManyBench$$Lambda$57.0x0000000800d4a2b0.apply')
f(13,12532,1,1,'kyo/bench/ForkManyBench.$anonfun$adapted$3')
f(14,12532,1,1,'kyo/bench/ForkManyBench.$anonfun$4')
f(15,12532,1,1,'scala/Tuple2$.apply')
f(16,12532,1,2,'scala.Tuple2')
f(10,12533,2,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$6')
f(11,12533,2,1,'kyo/bench/ForkManyBench$$Lambda$58.0x0000000800d4a680.apply')
f(12,12533,2,1,'kyo/bench/ForkManyBench.$anonfun$6')
f(13,12533,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(14,12533,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(15,12533,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,12533,1,2,'kyo.bench.ForkManyBench$$Lambda$62+0x0000000800d4b6c0')
f(13,12534,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5')
f(14,12534,1,2,'kyo.bench.ForkManyBench$$anon$6')
f(9,12535,3,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(10,12535,3,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(11,12535,3,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$Promise$$anon$26$$_$loop$22')
f(12,12535,3,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(13,12535,3,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(14,12535,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(15,12535,3,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(16,12535,3,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(17,12535,3,1,'scala/runtime/function/JProcedure1.apply')
f(18,12535,3,1,'scala/runtime/function/JProcedure1.apply')
f(19,12535,3,1,'kyo/concurrent/scheduler/IOTask$$Lambda$66.0x0000000800d4ebe0.applyVoid')
f(20,12535,3,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(21,12535,1,2,'kyo.concurrent.scheduler.IOTask')
f(21,12536,1,1,'kyo/concurrent/scheduler/IOPromise.become')
f(22,12536,1,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(23,12536,1,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(24,12536,1,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(25,12536,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(26,12536,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(21,12537,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(22,12537,1,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(23,12537,1,1,'kyo/concurrent/scheduler/Queue.offer')
f(24,12537,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(25,12537,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(26,12537,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(27,12537,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(28,12537,1,2,'kyo.concurrent.scheduler.Queue$$Lambda$54+0x0000000800d474b0')
f(9,12538,7,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,12538,7,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,12538,7,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3f718.apply')
f(12,12538,7,1,'kyo/bench/Bench.$anonfun$1')
f(13,12538,7,1,'kyo/bench/ForkManyBench.kyoBenchFiber')
f(14,12538,7,1,'kyo/concurrent/fibers$Fibers.promise')
f(15,12538,7,2,'kyo.concurrent.fibers$Fibers$$anon$31')
f(9,12545,1,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,12545,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,12545,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,12545,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,12545,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(14,12545,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$66+0x0000000800d4ebe0')
f(7,12546,1422,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,12546,1422,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,12546,1422,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,12546,1422,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,12546,1422,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d45000')
f(1,13968,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,13968,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,13968,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,13968,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,13968,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,13968,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,13968,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,13968,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,13968,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,13968,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,13968,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,13968,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,13968,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,285,3,'all')
f(1,0,3,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,3,3,'thread_native_entry(Thread*)')
f(3,0,3,4,'Thread::call_run()')
f(4,0,3,4,'JavaThread::thread_main_inner()')
f(5,0,3,4,'CompileBroker::compiler_thread_loop()')
f(6,0,3,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,3,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,3,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,2,4,'Compile::Code_Gen()')
f(10,0,2,4,'Matcher::match()')
f(11,0,2,4,'Matcher::xform(Node*, int)')
f(12,0,1,4,'Matcher::match_tree(Node const*)')
f(13,0,1,4,'Matcher::Label_Root(Node const*, State*, Node*, Node*&)')
f(14,0,1,4,'Matcher::Label_Root(Node const*, State*, Node*, Node*&)')
f(15,0,1,4,'Matcher::Label_Root(Node const*, State*, Node*, Node*&)')
f(16,0,1,4,'TypeInstPtr::add_offset(long) const')
f(12,1,1,4,'Node::clone() const')
f(13,1,1,4,'Compile::copy_node_notes_to(Node*, Node*)')
f(9,2,1,4,'Compile::Optimize()')
f(10,2,1,4,'PhaseMacroExpand::expand_macro_nodes()')
f(11,2,1,4,'PhaseIterGVN::optimize()')
f(12,2,1,4,'PhaseIterGVN::transform_old(Node*)')
f(13,2,1,4,'IfNode::Ideal(PhaseGVN*, bool)')
f(14,2,1,4,'IfNode::Ideal_common(PhaseGVN*, bool)')
f(15,2,1,4,'PhaseIterGVN::subsume_node(Node*, Node*)')
f(16,2,1,4,'PhaseIterGVN::remove_globally_dead_node(Node*)')
f(17,2,1,4,'Node::replace_edge(Node*, Node*, PhaseGVN*)')
f(18,2,1,4,'Node::set_req_X(unsigned int, Node*, PhaseIterGVN*)')
f(1,3,8,3,'[not_walkable_Java]')
f(2,3,6,1,'I2C/C2I adapters')
f(3,3,2,4,'CompiledMethod::is_compiled() const')
f(3,5,4,4,'SharedRuntime::fixup_callers_callsite(Method*, unsigned char*)')
f(4,5,1,4,'CodeCache::find_blob(void*)')
f(4,6,2,4,'CodeHeap::find_blob_unsafe(void*) const')
f(4,8,1,4,'nmethod::is_zombie() const')
f(2,9,2,3,'Interpreter')
f(1,11,44,3,'[unknown_Java]')
f(2,11,43,1,'I2C/C2I adapters')
f(2,54,1,1,'kyo/ios$KyoIO.effect')
f(1,55,230,1,'java/lang/Thread.run')
f(2,55,230,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,55,230,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,55,1,1,'java/util/concurrent/FutureTask.run')
f(5,55,1,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,55,1,1,'java/util/concurrent/FutureTask.run')
f(7,55,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,55,1,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,55,1,1,'java/lang/reflect/Method.invoke')
f(10,55,1,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,55,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,55,1,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,55,1,1,'kyo/bench/jmh_generated/ForkManyBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,55,1,1,'kyo/bench/jmh_generated/ForkManyBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,55,1,1,'kyo/bench/Bench.forkKyo')
f(16,55,1,1,'kyo/bench/Bench.runLoop$2')
f(17,55,1,1,'kyo/bench/Bench$$anon$1.apply')
f(18,55,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,55,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,55,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(21,55,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,55,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,55,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,55,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,55,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,55,1,1,'jdk/internal/misc/Unsafe.unpark')
f(27,55,1,3,'pthread_cond_signal')
f(28,55,1,5,'entry_SYSCALL_64_after_hwframe')
f(29,55,1,5,'do_syscall_64')
f(30,55,1,5,'__x64_sys_futex')
f(31,55,1,5,'do_futex')
f(32,55,1,5,'futex_wake')
f(33,55,1,5,'wake_up_q')
f(34,55,1,5,'_raw_spin_unlock_irqrestore')
f(4,56,229,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fda8.run')
f(5,56,229,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,56,229,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,61,137,1,'kyo/concurrent/scheduler/IOTask.run',9,0,0)
f(8,61,137,1,'kyo/concurrent/scheduler/IOTask.eval',9,0,0)
f(9,68,1,1,'kyo/bench/ForkManyBench$$anon$3.apply')
f(9,69,113,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,70,107,1,'kyo/bench/ForkManyBench$$anon$1.apply')
f(11,71,106,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',21,0,0)
f(12,73,103,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',23,0,0)
f(13,76,95,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply',15,0,0)
f(14,77,94,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',14,0,0)
f(15,77,2,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',2,0,0)
f(16,77,2,2,'kyo/ios$KyoIO.<init>',2,0,0)
f(17,77,2,2,'kyo/core$internal$Kyo.<init>',2,0,0)
f(18,78,1,2,'java/lang/Object.<init>',1,0,0)
f(15,79,10,2,'kyo/concurrent/scheduler/IOTask.<init>',10,0,0)
f(16,83,6,2,'kyo/concurrent/scheduler/IOPromise.<init>',6,0,0)
f(15,89,82,1,'kyo/concurrent/scheduler/Scheduler$.schedule',2,0,0)
f(16,89,1,2,'kyo/concurrent/scheduler/Scheduler$.submit',1,0,0)
f(17,89,1,2,'kyo/concurrent/scheduler/Worker.enqueue',1,0,0)
f(18,89,1,2,'kyo/concurrent/scheduler/Queue.offer',1,0,0)
f(19,89,1,2,'kyo/concurrent/scheduler/Queue.tryModify',1,0,0)
f(20,89,1,2,'scala/Function0.apply$mcZ$sp',1,0,0)
f(21,89,1,2,'kyo/concurrent/scheduler/Queue$$Lambda$54.0x0000000800d474b0.apply',1,0,0)
f(22,89,1,2,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1',1,0,0)
f(16,90,81,1,'kyo/concurrent/scheduler/Worker.enqueueLocal',1,0,0)
f(17,90,81,1,'kyo/concurrent/scheduler/Queue.offer',1,0,0)
f(18,90,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(18,91,80,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(19,91,80,1,'scala/Function0.apply$mcZ$sp')
f(20,91,80,1,'kyo/concurrent/scheduler/Queue$$Lambda$54.0x0000000800d474b0.apply')
f(21,91,80,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1')
f(22,91,80,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,93,21,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize',21,0,0)
f(24,93,21,2,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize',21,0,0)
f(25,93,21,2,'scala/collection/mutable/ArrayBuffer.array_$eq',21,0,0)
f(23,114,57,2,'scala/collection/mutable/PriorityQueue.fixUp',57,0,0)
f(24,125,1,5,'asm_sysvec_hyperv_stimer0')
f(25,125,1,5,'sysvec_hyperv_stimer0')
f(26,125,1,5,'irq_exit_rcu')
f(27,125,1,5,'__irq_exit_rcu')
f(28,125,1,5,'__softirqentry_text_start')
f(29,125,1,5,'run_timer_softirq')
f(30,125,1,5,'__run_timers.part.0')
f(24,126,9,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',9,0,0)
f(25,134,1,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',1,0,0)
f(24,135,36,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_swap',36,0,0)
f(25,165,6,2,'scala/collection/mutable/ArrayBuffer.array',6,0,0)
f(13,171,5,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',5,0,0)
f(14,171,5,2,'kyo/core$internal$KyoCont.<init>',5,0,0)
f(15,172,4,2,'kyo/ios$KyoIO.effect',4,0,0)
f(12,176,1,2,'kyo/concurrent/scheduler/IOTask.apply',1,0,0)
f(10,177,5,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5',4,0,0)
f(11,177,5,2,'kyo/bench/ForkManyBench$$anon$6.<init>',4,0,0)
f(12,177,5,2,'kyo/core$internal$KyoCont.<init>',4,0,0)
f(13,178,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(14,178,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(15,178,1,4,'MemAllocator::allocate() const')
f(16,178,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(17,178,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(18,178,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(19,178,1,4,'G1AllocRegion::new_alloc_region_and_allocate(unsigned long, bool)')
f(20,178,1,4,'G1CollectedHeap::new_mutator_alloc_region(unsigned long, bool, unsigned int)')
f(21,178,1,4,'HeapRegionRemSet::clear_fcc()')
f(13,179,3,3,'vtable stub')
f(9,182,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(9,183,1,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,183,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,183,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,183,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,183,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(14,183,1,4,'InstanceKlass::check_valid_for_instantiation(bool, JavaThread*)')
f(9,184,7,2,'kyo/concurrent/scheduler/IOTask.loop$8',3,0,0)
f(10,187,4,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,187,4,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,187,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,187,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,187,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,187,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,187,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,187,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,187,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,187,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,187,1,1,'jdk/internal/misc/Unsafe.unpark')
f(21,187,1,3,'pthread_cond_signal')
f(22,187,1,5,'entry_SYSCALL_64_after_hwframe')
f(23,187,1,5,'do_syscall_64')
f(24,187,1,5,'__x64_sys_futex')
f(25,187,1,5,'do_futex')
f(26,187,1,5,'futex_wake')
f(27,187,1,5,'wake_up_q')
f(28,187,1,5,'_raw_spin_unlock_irqrestore')
f(12,188,3,1,'kyo/concurrent/scheduler/IOTask.onComplete')
f(9,191,4,6,'kyo/core$internal$KyoCont.effect',0,4,0)
f(9,195,1,1,'kyo/ios$KyoIO.effect')
f(9,196,2,3,'vtable stub')
f(7,198,86,2,'kyo/concurrent/scheduler/Queue.poll',31,0,0)
f(8,202,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,204,80,2,'kyo/concurrent/scheduler/Queue.modify',27,0,40)
f(9,245,1,1,'I2C/C2I adapters')
f(9,246,14,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',12,0,0)
f(10,248,12,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',12,0,0)
f(11,253,2,2,'java/lang/invoke/VarForm.getMemberName',2,0,0)
f(11,255,5,2,'java/lang/invoke/VarHandle.checkExactAccessMode',5,0,0)
f(9,260,24,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d45230.apply',13,0,0)
f(10,261,23,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',23,0,0)
f(11,261,3,2,'kyo/concurrent/scheduler/Queue.items',3,0,0)
f(11,264,3,2,'kyo/concurrent/scheduler/Queue.queue',3,0,0)
f(11,267,17,2,'scala/collection/mutable/PriorityQueue.dequeue',17,0,0)
f(12,272,1,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_size0',1,0,0)
f(12,273,11,2,'scala/collection/mutable/PriorityQueue.fixDown',11,0,0)
f(13,278,6,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.gteq',6,0,0)
f(14,278,6,2,'scala/math/Ordering.gteq$',6,0,0)
f(15,278,6,2,'scala/math/Ordering.gteq',6,0,0)
f(16,278,6,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.compare',6,0,0)
f(7,284,1,1,'kyo/concurrent/scheduler/Worker.stop$1')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 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,21593,3,'all')
f(1,0,21590,1,'java/lang/Thread.run')
f(2,0,21590,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,21590,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,397,1,'java/util/concurrent/FutureTask.run')
f(5,0,397,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,397,1,'java/util/concurrent/FutureTask.run')
f(7,0,397,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,397,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,397,1,'java/lang/reflect/Method.invoke')
f(10,0,397,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,397,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,397,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,397,1,'kyo/bench/jmh_generated/ForkManyBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,396,1,'kyo/bench/jmh_generated/ForkManyBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,396,1,'kyo/bench/Bench.syncKyo')
f(16,0,191,1,'kyo/bench/Bench.runLoop$1')
f(17,0,114,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,114,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,114,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,114,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,75,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,75,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,43,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,43,32,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,43,32,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,75,39,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(17,114,77,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,114,77,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,114,77,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,114,77,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,114,46,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,114,46,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,114,46,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(24,114,46,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,114,46,2,'kyo.concurrent.scheduler.IOTask')
f(21,160,31,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,160,31,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c83b00.apply')
f(23,160,31,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,160,31,1,'kyo/concurrent/fibers$Fiber.join')
f(25,160,31,1,'kyo/concurrent/fibers$Fibers.get')
f(26,160,31,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,160,31,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(16,191,205,1,'kyo/bench/ForkManyBench.kyoBench')
f(17,191,10,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,191,10,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,191,10,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,191,10,2,'kyo.bench.ForkManyBench$$Lambda$37+0x0000000800c3f718')
f(17,201,86,1,'kyo/concurrent/fibers$Fibers.block')
f(18,201,11,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,201,11,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,212,33,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,212,33,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,245,42,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,245,42,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,287,109,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,287,41,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,287,41,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,287,41,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,287,41,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c83b00')
f(18,328,36,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,328,36,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,328,36,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,328,36,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,328,36,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c85068')
f(18,364,32,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,364,32,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(14,396,1,1,'org/openjdk/jmh/results/ThroughputResult.<init>')
f(15,396,1,2,'java.lang.StringBuilder')
f(4,397,9,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f4b8.run')
f(5,397,9,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,397,9,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,397,9,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,397,9,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,397,9,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,397,9,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,397,9,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,406,10,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1f6e0.run')
f(5,406,10,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,406,1,1,'kyo/concurrent/scheduler/Scheduler$.addWorker')
f(7,406,1,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers')
f(8,406,1,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(9,406,1,1,'java/util/concurrent/ThreadPoolExecutor.addWorker')
f(10,406,1,1,'java/util/concurrent/ThreadPoolExecutor$Worker.<init>')
f(11,406,1,1,'kyo/concurrent/scheduler/Threads$$anon$1.newThread')
f(12,406,1,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23ff0.apply')
f(13,406,1,1,'kyo/concurrent/scheduler/Scheduler$.$init$$$anonfun$1')
f(14,406,1,1,'kyo/concurrent/scheduler/Worker.<init>')
f(15,406,1,1,'java/lang/Thread.<init>')
f(16,406,1,1,'java/lang/Thread.<init>')
f(17,406,1,1,'java/lang/Thread.<init>')
f(18,406,1,1,'java/security/AccessController.getContext')
f(19,406,1,1,'java/security/AccessControlContext.optimize')
f(20,406,1,1,'java/security/AccessControlContext.combine')
f(21,406,1,2,'java.security.ProtectionDomain[]')
f(6,407,9,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,407,9,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,407,9,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,407,9,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,407,9,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$70+0x0000000800d4d800')
f(4,416,21174,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d243c0.run')
f(5,416,21174,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,416,21174,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,416,10,1,'java/util/concurrent/CopyOnWriteArrayList.add')
f(8,416,10,1,'java/util/Arrays.copyOf')
f(9,416,10,1,'java/util/Arrays.copyOf')
f(10,416,10,2,'java.lang.Object[]')
f(7,426,19165,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,426,19165,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,426,19117,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,426,15339,1,'kyo/bench/ForkManyBench$$anon$1.apply')
f(11,426,6643,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(12,426,6643,1,'kyo/bench/ForkManyBench$$Lambda$62.0x0000000800d4b2f0.apply')
f(13,426,6643,1,'kyo/bench/ForkManyBench.$anonfun$2')
f(14,426,6643,1,'kyo/bench/ForkManyBench.repeat$2')
f(15,426,2905,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d4cc00.linkToTargetMethod')
f(16,426,2905,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c400.newInvokeSpecial')
f(17,426,2905,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,426,2905,2,'kyo.bench.ForkManyBench$$Lambda$62+0x0000000800d4b2f0')
f(15,3331,3738,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1')
f(16,3331,3738,2,'kyo.bench.ForkManyBench$$anon$1')
f(11,7069,8696,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,7069,8696,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,7069,8696,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(14,7069,8696,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,7069,1204,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,8273,5846,2,'kyo.concurrent.scheduler.IOTask')
f(15,14119,1636,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,14119,1636,2,'kyo.concurrent.fibers$Fiber')
f(15,15755,10,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(16,15755,10,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(17,15755,10,1,'kyo/concurrent/scheduler/Queue.offer')
f(18,15755,10,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(19,15755,10,1,'scala/Function0.apply$mcZ$sp')
f(20,15755,10,1,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d476b8.apply')
f(21,15755,10,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1')
f(22,15755,10,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,15755,10,1,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize')
f(24,15755,10,1,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize')
f(25,15755,10,1,'scala/collection/mutable/ArrayBuffer$.scala$collection$mutable$ArrayBuffer$$ensureSize')
f(26,15755,10,5,'java.lang.Object[]')
f(10,15765,3777,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5')
f(11,15765,3776,2,'kyo.bench.ForkManyBench$$anon$6')
f(11,19541,1,1,'kyo/bench/ForkManyBench$$Lambda$63.0x0000000800d4b6c0.apply')
f(12,19541,1,1,'kyo/bench/ForkManyBench.$anonfun$8')
f(13,19541,1,1,'kyo/concurrent/fibers$Fiber.join')
f(14,19541,1,1,'kyo/concurrent/fibers$Fibers.get')
f(15,19541,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(16,19541,1,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(10,19542,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,19542,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,19542,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply')
f(13,19542,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,19542,1,1,'kyo/concurrent/fibers$Fiber$.promise')
f(15,19542,1,2,'kyo.concurrent.fibers$Fiber')
f(9,19543,2,1,'kyo/bench/ForkManyBench$$anon$7.apply')
f(10,19543,2,1,'kyo/bench/ForkManyBench$$anon$4.apply')
f(11,19543,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$3')
f(12,19543,1,1,'kyo/bench/ForkManyBench$$Lambda$58.0x0000000800d4a2b0.apply')
f(13,19543,1,1,'kyo/bench/ForkManyBench.$anonfun$adapted$3')
f(14,19543,1,1,'kyo/bench/ForkManyBench.$anonfun$4')
f(15,19543,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$2')
f(16,19543,1,2,'kyo.bench.ForkManyBench$$anon$3')
f(11,19544,1,1,'kyo/concurrent/atomics$Atomics$$anon$1.apply')
f(12,19544,1,1,'kyo/concurrent/atomics$Atomics$$anon$1.apply')
f(13,19544,1,2,'java.util.concurrent.atomic.AtomicInteger')
f(9,19545,1,1,'kyo/bench/ForkManyBench$$anon$8.apply')
f(10,19545,1,1,'kyo/concurrent/fibers$Fibers$$anon$31.apply')
f(11,19545,1,1,'kyo/concurrent/fibers$Fibers$$anon$31.apply')
f(12,19545,1,2,'kyo.concurrent.scheduler.IOPromise')
f(9,19546,1,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(10,19546,1,1,'kyo/concurrent/fibers$Fiber$Promise$$anon$26.apply')
f(11,19546,1,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$Promise$$anon$26$$_$loop$22')
f(12,19546,1,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(13,19546,1,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(14,19546,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(15,19546,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(16,19546,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(17,19546,1,1,'scala/runtime/function/JProcedure1.apply')
f(18,19546,1,1,'scala/runtime/function/JProcedure1.apply')
f(19,19546,1,1,'kyo/concurrent/scheduler/IOTask$$Lambda$67.0x0000000800d4ede0.applyVoid')
f(20,19546,1,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(21,19546,1,1,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1')
f(22,19546,1,2,'kyo.concurrent.scheduler.IOTask$$anon$4')
f(9,19547,41,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,19547,41,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,19547,41,1,'kyo/bench/ForkManyBench$$Lambda$37.0x0000000800c3f718.apply')
f(12,19547,41,1,'kyo/bench/ForkManyBench.kyoBench$$anonfun$1')
f(13,19547,41,1,'kyo/bench/ForkManyBench.kyoBenchFiber')
f(14,19547,1,1,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$7')
f(15,19547,1,2,'kyo.bench.ForkManyBench$$anon$8')
f(14,19548,40,1,'kyo/concurrent/fibers$Fibers.promise')
f(15,19548,40,2,'kyo.concurrent.fibers$Fibers$$anon$31')
f(9,19588,1,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,19588,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,19588,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,19588,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,19588,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$66+0x0000000800d4e9d8')
f(9,19589,2,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,19589,1,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,19589,1,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,19589,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,19589,1,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(14,19589,1,2,'kyo.concurrent.scheduler.IOTask$$Lambda$67+0x0000000800d4ede0')
f(10,19590,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,19590,1,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,19591,1998,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,19591,1998,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,19591,1998,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,19591,1998,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,19591,14,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(12,19591,14,2,'kyo.concurrent.scheduler.Queue$$Lambda$56+0x0000000800d45230')
f(11,19605,1984,2,'kyo.concurrent.scheduler.Queue$$Lambda$56+0x0000000800d45230')
f(7,21589,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,21589,1,1,'kyo/concurrent/scheduler/Worker.steal')
f(9,21589,1,1,'kyo/concurrent/scheduler/Queue.steal')
f(10,21589,1,1,'scala/runtime/ObjectRef.create')
f(11,21589,1,2,'scala.runtime.ObjectRef')
f(1,21590,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,21590,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,21590,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,21590,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,21590,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,21590,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,21590,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,21590,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,21590,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,21590,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,21590,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,21590,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,21590,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 992px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(62);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,293,3,'all')
f(1,0,10,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,10,3,'thread_native_entry(Thread*)')
f(3,0,10,4,'Thread::call_run()')
f(4,0,10,4,'JavaThread::thread_main_inner()')
f(5,0,10,4,'CompileBroker::compiler_thread_loop()')
f(6,0,10,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,10,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,10,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,1,4,'CallGenerator::for_inline(ciMethod*, float)')
f(10,0,1,4,'InlineTree::check_can_parse(ciMethod*)')
f(11,0,1,4,'ciMethod::get_flow_analysis()')
f(12,0,1,4,'ciTypeFlow::do_flow()')
f(13,0,1,4,'ciTypeFlow::flow_types()')
f(14,0,1,4,'ciTypeFlow::df_flow_types(ciTypeFlow::Block*, bool, ciTypeFlow::StateVector*, ciTypeFlow::JsrSet*)')
f(9,1,4,4,'Compile::Code_Gen()')
f(10,1,1,4,'Matcher::match()')
f(11,1,1,4,'Matcher::find_shared(Node*)')
f(10,2,3,4,'PhaseChaitin::Register_Allocate()')
f(11,2,1,4,'PhaseChaitin::Split(unsigned int, ResourceArea*)')
f(11,3,1,4,'PhaseChaitin::build_ifg_physical(ResourceArea*)')
f(12,3,1,4,'PhaseChaitin::interfere_with_live(unsigned int, IndexSet*) [clone .part.0]')
f(11,4,1,4,'PhaseChaitin::post_allocate_copy_removal()')
f(12,4,1,4,'PhaseChaitin::elide_copy(Node*, int, Block*, Node_List&, Node_List&, bool)')
f(9,5,3,4,'Compile::Optimize()')
f(10,5,3,4,'PhaseIterGVN::optimize()')
f(11,5,3,4,'PhaseIterGVN::transform_old(Node*)')
f(12,5,1,4,'ConstraintCastNode::Identity(PhaseGVN*)')
f(13,5,1,4,'TypePtr::xmeet(Type const*) const')
f(14,5,1,4,'TypeAryPtr::xmeet_helper(Type const*) const')
f(15,5,1,4,'TypeAryPtr::make(TypePtr::PTR, ciObject*, TypeAry const*, ciKlass*, bool, int, int, TypePtr const*, int, bool)')
f(16,5,1,4,'TypeAry::ary_must_be_exact() const')
f(12,6,1,4,'IfNode::Ideal(PhaseGVN*, bool)')
f(13,6,1,4,'IfNode::Ideal_common(PhaseGVN*, bool)')
f(14,6,1,4,'PhaseIterGVN::subsume_node(Node*, Node*)')
f(15,6,1,4,'PhaseIterGVN::remove_globally_dead_node(Node*)')
f(16,6,1,4,'Unique_Node_List::remove(Node*)')
f(12,7,1,4,'RegionNode::Ideal(PhaseGVN*, bool)')
f(13,7,1,4,'Node::is_CFG() const')
f(9,8,2,4,'ParseGenerator::generate(JVMState*)')
f(10,8,2,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(11,8,2,4,'Parse::do_all_blocks()')
f(12,8,2,4,'Parse::do_one_block()')
f(13,8,2,4,'Parse::do_call()')
f(14,8,2,4,'PredictedCallGenerator::generate(JVMState*)')
f(15,8,2,4,'ParseGenerator::generate(JVMState*)')
f(16,8,2,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(17,8,2,4,'Parse::do_all_blocks()')
f(18,8,2,4,'Parse::do_one_block()')
f(19,8,2,4,'Parse::do_call()')
f(20,8,1,4,'ParseGenerator::generate(JVMState*)')
f(21,8,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(22,8,1,4,'Parse::do_all_blocks()')
f(23,8,1,4,'Parse::do_one_block()')
f(24,8,1,4,'Parse::do_call()')
f(25,8,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(26,8,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(27,8,1,4,'ParseGenerator::generate(JVMState*)')
f(28,8,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(29,8,1,4,'Parse::do_all_blocks()')
f(30,8,1,4,'Parse::do_one_block()')
f(31,8,1,4,'Parse::do_call()')
f(32,8,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(33,8,1,4,'ParseGenerator::generate(JVMState*)')
f(34,8,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(35,8,1,4,'Parse::do_all_blocks()')
f(36,8,1,4,'Parse::do_one_block()')
f(37,8,1,4,'Parse::do_call()')
f(38,8,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(39,8,1,4,'ParseGenerator::generate(JVMState*)')
f(40,8,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(41,8,1,4,'Parse::do_all_blocks()')
f(42,8,1,4,'Parse::do_one_block()')
f(43,8,1,4,'Parse::do_call()')
f(44,8,1,4,'Compile::call_generator(ciMethod*, int, bool, JVMState*, bool, float, ciKlass*, bool)')
f(45,8,1,4,'InlineTree::ok_to_inline(ciMethod*, JVMState*, ciCallProfile&, bool&)')
f(46,8,1,4,'ciMethod::get_flow_analysis()')
f(47,8,1,4,'ciTypeFlow::do_flow()')
f(48,8,1,4,'ciTypeFlow::flow_types()')
f(49,8,1,4,'ciTypeFlow::df_flow_types(ciTypeFlow::Block*, bool, ciTypeFlow::StateVector*, ciTypeFlow::JsrSet*)')
f(50,8,1,4,'ciTypeFlow::flow_block(ciTypeFlow::Block*, ciTypeFlow::StateVector*, ciTypeFlow::JsrSet*)')
f(51,8,1,4,'ciTypeFlow::StateVector::apply_one_bytecode(ciBytecodeStream*)')
f(52,8,1,4,'ciTypeFlow::StateVector::do_invoke(ciBytecodeStream*, bool)')
f(53,8,1,4,'ciBytecodeStream::get_method(bool&, ciSignature**)')
f(54,8,1,4,'ciEnv::get_method_by_index_impl(constantPoolHandle const&, int, Bytecodes::Code, ciInstanceKlass*)')
f(55,8,1,4,'ciObjectFactory::get_metadata(Metadata*)')
f(56,8,1,4,'ciObjectFactory::create_new_metadata(Metadata*)')
f(57,8,1,4,'ciObjectFactory::get_metadata(Metadata*)')
f(58,8,1,4,'ciObjectFactory::create_new_metadata(Metadata*)')
f(59,8,1,4,'ciInstanceKlass::ciInstanceKlass(Klass*)')
f(60,8,1,4,'ciKlass::ciKlass(Klass*)')
f(61,8,1,4,'Symbol::increment_refcount()')
f(20,9,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(21,9,1,4,'ParseGenerator::generate(JVMState*)')
f(22,9,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(23,9,1,4,'Parse::do_all_blocks()')
f(24,9,1,4,'Parse::do_one_block()')
f(25,9,1,4,'Parse::do_call()')
f(26,9,1,4,'GraphKit::cast_not_null(Node*, bool)')
f(27,9,1,4,'TypeOopPtr::cleanup_speculative() const')
f(28,9,1,4,'Type::hashcons()')
f(29,9,1,4,'Type::cmp(Type const*, Type const*)')
f(1,10,7,3,'[not_walkable_Java]')
f(2,10,5,1,'I2C/C2I adapters')
f(3,10,1,4,'CompiledMethod::is_compiled() const')
f(3,11,4,4,'SharedRuntime::fixup_callers_callsite(Method*, unsigned char*)')
f(4,11,2,4,'CodeCache::find_blob(void*)')
f(4,13,1,4,'CodeHeap::find_blob_unsafe(void*) const')
f(4,14,1,4,'nmethod::is_zombie() const')
f(2,15,2,3,'Interpreter')
f(1,17,41,3,'[unknown_Java]')
f(2,17,40,1,'I2C/C2I adapters')
f(2,57,1,1,'kyo/ios$KyoIO.effect')
f(1,58,235,1,'java/lang/Thread.run')
f(2,58,235,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,58,235,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,58,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f4b8.run')
f(5,58,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,58,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,58,1,1,'java/lang/Thread.sleep')
f(8,58,1,3,'[unknown]')
f(9,58,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,58,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,58,1,5,'do_syscall_64')
f(12,58,1,5,'__x64_sys_futex')
f(13,58,1,5,'do_futex')
f(14,58,1,5,'futex_wait')
f(15,58,1,5,'futex_wait_queue_me')
f(16,58,1,5,'schedule')
f(17,58,1,5,'__schedule')
f(18,58,1,5,'finish_task_switch.isra.0')
f(4,59,234,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d243c0.run')
f(5,59,234,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,59,234,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,63,127,1,'kyo/concurrent/scheduler/IOTask.run',7,0,0)
f(8,65,2,2,'kyo/concurrent/scheduler/IOTask.curr_$eq',1,0,0)
f(8,67,123,1,'kyo/concurrent/scheduler/IOTask.eval',7,0,0)
f(9,75,4,1,'kyo/bench/ForkManyBench$$anon$3.apply')
f(10,77,2,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$_$transformLoop$2',2,0,0)
f(11,77,2,2,'kyo/bench/ForkManyBench$$Lambda$60.0x0000000800d4ae90.apply',2,0,0)
f(12,77,2,2,'kyo/bench/ForkManyBench.$anonfun$adapted$2',2,0,0)
f(13,77,2,2,'kyo/bench/ForkManyBench.$anonfun$5',2,0,0)
f(14,77,2,2,'scala/runtime/BoxesRunTime.boxToBoolean',2,0,0)
f(9,79,104,1,'kyo/bench/ForkManyBench$$anon$6.apply')
f(10,82,95,1,'kyo/bench/ForkManyBench$$anon$1.apply',7,0,0)
f(11,82,8,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1',7,0,0)
f(12,82,2,2,'kyo/bench/ForkManyBench$$Lambda$62.0x0000000800d4b520.apply',2,0,0)
f(13,82,2,2,'kyo/bench/ForkManyBench.$anonfun$2',2,0,0)
f(14,82,2,2,'kyo/bench/ForkManyBench.repeat$2',2,0,0)
f(15,82,1,2,'java/lang/invoke/LambdaForm$MH.0x0000000800d4cc00.linkToTargetMethod',1,0,0)
f(16,82,1,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c400.newInvokeSpecial',1,0,0)
f(17,82,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(15,83,1,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$1',1,0,0)
f(12,84,6,2,'kyo/bench/ForkManyBench$$anon$1.<init>',5,0,0)
f(13,84,6,2,'kyo/core$internal$KyoCont.<init>',5,0,0)
f(14,89,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(15,89,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(16,89,1,4,'MemAllocator::allocate() const')
f(17,89,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(18,89,1,4,'G1Allocator::unsafe_max_tlab_alloc()')
f(11,90,87,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,96,81,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',15,0,0)
f(13,96,81,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c85068.apply',15,0,0)
f(14,96,81,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',15,0,0)
f(15,99,8,2,'kyo/concurrent/scheduler/IOTask.<init>',8,0,0)
f(16,105,2,2,'kyo/concurrent/scheduler/IOPromise.<init>',2,0,0)
f(17,105,2,2,'kyo/concurrent/scheduler/IOPromise.<init>',2,0,0)
f(18,106,1,2,'java/util/concurrent/atomic/AtomicReference.<init>',1,0,0)
f(15,107,70,1,'kyo/concurrent/scheduler/Scheduler$.schedule',4,0,0)
f(16,107,4,2,'kyo/concurrent/scheduler/Scheduler$.submit',4,0,0)
f(17,107,4,2,'kyo/concurrent/scheduler/Worker.enqueue',4,0,0)
f(16,111,66,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(17,111,66,1,'kyo/concurrent/scheduler/Queue.offer')
f(18,111,66,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(19,111,66,1,'scala/Function0.apply$mcZ$sp')
f(20,111,66,1,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d476b8.apply')
f(21,111,66,1,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1')
f(22,111,66,1,'scala/collection/mutable/PriorityQueue.addOne')
f(23,111,15,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize',15,0,0)
f(24,111,15,2,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize',15,0,0)
f(25,111,15,2,'scala/collection/mutable/ArrayBuffer.array_$eq',15,0,0)
f(23,126,51,2,'scala/collection/mutable/PriorityQueue.fixUp',51,0,0)
f(24,129,10,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',10,0,0)
f(25,136,3,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',3,0,0)
f(26,138,1,2,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$runtime',1,0,0)
f(24,139,34,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_swap',34,0,0)
f(25,167,6,2,'scala/collection/mutable/ArrayBuffer.array',6,0,0)
f(24,173,4,2,'scala/collection/mutable/PriorityQueue.ord',4,0,0)
f(10,177,6,2,'kyo/bench/ForkManyBench.kyo$bench$ForkManyBench$$_$transformLoop$5',2,0,0)
f(11,177,6,2,'kyo/bench/ForkManyBench$$anon$6.<init>',2,0,0)
f(12,177,6,2,'kyo/core$internal$KyoCont.<init>',2,0,0)
f(13,178,4,6,'kyo/core$internal$KyoCont.value',0,4,0)
f(13,182,1,3,'vtable stub')
f(9,183,2,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,183,2,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',2,0,0)
f(9,185,1,1,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf')
f(9,186,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(9,187,3,3,'vtable stub')
f(7,190,1,2,'kyo/concurrent/scheduler/Queue.addAndPoll',1,0,0)
f(8,190,1,2,'kyo/concurrent/scheduler/Queue.modify',1,0,0)
f(7,191,89,1,'kyo/concurrent/scheduler/Queue.poll',15,0,0)
f(8,193,3,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',3,0,0)
f(9,193,3,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',3,0,0)
f(10,193,1,2,'java/lang/invoke/DirectMethodHandle.constructorMethod',1,0,0)
f(10,194,2,2,'kyo/concurrent/scheduler/Queue$$Lambda$56.0x0000000800d45230.<init>',2,0,0)
f(8,196,84,0,'kyo/concurrent/scheduler/Queue.modify',12,0,52)
f(9,245,3,1,'I2C/C2I adapters')
f(9,248,12,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',4,0,0)
f(10,254,6,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',6,0,0)
f(11,255,5,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',5,0,0)
f(12,258,2,2,'java/util/Objects.requireNonNull',2,0,0)
f(9,260,1,1,'java/util/concurrent/atomic/AtomicBoolean.set')
f(9,261,19,2,'kyo/concurrent/scheduler/Queue$$Lambda$56.0x0000000800d45230.apply',9,0,0)
f(10,262,18,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',18,0,0)
f(11,262,2,2,'kyo/concurrent/scheduler/Queue.isEmpty',2,0,0)
f(11,264,16,2,'scala/collection/mutable/PriorityQueue.dequeue',16,0,0)
f(12,271,1,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',1,0,0)
f(12,272,8,2,'scala/collection/mutable/PriorityQueue.fixDown',8,0,0)
f(13,272,6,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.gteq',6,0,0)
f(14,272,6,2,'scala/math/Ordering.gteq$',6,0,0)
f(15,272,6,2,'scala/math/Ordering.gteq',6,0,0)
f(16,272,6,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.compare',6,0,0)
f(13,278,2,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',2,0,0)
f(14,279,1,2,'kyo/concurrent/scheduler/IOTask$TaskOrdering$.lt',1,0,0)
f(7,280,4,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,280,4,1,'kyo/concurrent/scheduler/Worker.park')
f(9,280,4,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,280,4,1,'jdk/internal/misc/Unsafe.park')
f(11,280,4,3,'[unknown]')
f(12,280,4,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,280,4,5,'entry_SYSCALL_64_after_hwframe')
f(14,280,4,5,'do_syscall_64')
f(15,280,4,5,'__x64_sys_futex')
f(16,280,4,5,'do_futex')
f(17,280,4,5,'futex_wait')
f(18,280,3,5,'futex_wait_queue_me')
f(19,280,3,5,'schedule')
f(20,280,3,5,'__schedule')
f(21,280,3,5,'finish_task_switch.isra.0')
f(18,283,1,5,'futex_wait_setup')
f(7,284,3,1,'kyo/concurrent/scheduler/Worker.flush')
f(8,284,3,1,'kyo/concurrent/scheduler/Queue.drain')
f(9,284,3,1,'kyo/concurrent/scheduler/Queue.modify')
f(10,284,3,1,'kyo/concurrent/scheduler/Queue$$Lambda$74.0x0000000800d51fa8.apply')
f(11,284,3,1,'kyo/concurrent/scheduler/Queue.drain$$anonfun$adapted$1')
f(12,284,3,1,'kyo/concurrent/scheduler/Queue.drain$$anonfun$1')
f(13,284,3,1,'scala/collection/AbstractIterable.foreach')
f(14,284,3,1,'scala/collection/IterableOnceOps.foreach$')
f(15,284,3,1,'scala/collection/IterableOnceOps.foreach')
f(16,284,3,1,'scala/runtime/function/JProcedure1.apply')
f(17,284,3,1,'scala/runtime/function/JProcedure1.apply')
f(18,284,3,1,'kyo/concurrent/scheduler/Worker$$Lambda$73.0x0000000800d51ba8.applyVoid')
f(19,284,3,1,'kyo/concurrent/scheduler/Worker.flush$$anonfun$1')
f(20,284,3,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(21,284,2,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(22,284,2,1,'java/util/concurrent/locks/LockSupport.unpark')
f(23,284,2,1,'jdk/internal/misc/Unsafe.unpark')
f(24,284,2,3,'pthread_cond_signal')
f(25,284,2,5,'entry_SYSCALL_64_after_hwframe')
f(26,284,2,5,'do_syscall_64')
f(27,284,2,5,'__x64_sys_futex')
f(28,284,2,5,'do_futex')
f(29,284,2,5,'futex_wake')
f(30,284,2,5,'wake_up_q')
f(31,284,2,5,'_raw_spin_unlock_irqrestore')
f(21,286,1,6,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.poll',0,1,0)
f(22,286,1,2,'org/jctools/queues/MpUnboundedXaddChunk.lvElement',1,0,0)
f(7,287,6,1,'kyo/concurrent/scheduler/Worker.stop$1',1,0,0)
f(8,289,4,1,'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: 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,10857,3,'all')
f(1,0,10854,1,'java/lang/Thread.run')
f(2,0,10854,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,10854,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,2056,1,'java/util/concurrent/FutureTask.run')
f(5,0,2056,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,2056,1,'java/util/concurrent/FutureTask.run')
f(7,0,2056,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,2056,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,2056,1,'java/lang/reflect/Method.invoke')
f(10,0,2056,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,2056,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,2056,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,2056,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,2056,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,2056,1,'kyo/bench/Bench.forkKyo')
f(16,0,167,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,167,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,167,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,167,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3e9f8')
f(16,167,55,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,167,55,2,'kyo.bench.Bench$$anon$1')
f(16,222,1369,1,'kyo/bench/Bench.runLoop$2')
f(17,222,681,1,'kyo/bench/Bench$$anon$1.apply')
f(18,222,38,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,222,38,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c82da8.apply')
f(20,222,38,1,'kyo/bench/Bench.$anonfun$2')
f(21,222,38,1,'kyo/concurrent/fibers$Fiber.block')
f(22,222,38,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,260,643,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,260,643,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,260,643,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(21,260,643,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,260,86,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,346,378,2,'kyo.concurrent.scheduler.IOTask')
f(22,724,179,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,724,179,2,'kyo.concurrent.fibers$Fiber')
f(17,903,688,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,903,688,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,903,688,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,903,688,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,903,349,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,903,349,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,903,77,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,980,272,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,980,272,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,1252,99,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,1351,240,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,1351,240,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,1351,240,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,1591,465,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,1591,101,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1591,101,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1591,101,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1591,101,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(17,1692,219,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,1692,219,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,1911,145,1,'kyo/locals$Locals$.save')
f(18,1911,145,2,'kyo.locals$Locals$$anon$3')
f(4,2056,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,2056,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,2056,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,2056,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,2056,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,2056,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,2056,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,2056,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,2067,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e5f8.run')
f(5,2067,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,2067,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,2067,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,2067,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,2067,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,2067,11,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(11,2067,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$69+0x0000000800d4bcb8')
f(4,2078,8776,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,2078,8776,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,2078,8776,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,2078,8316,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,2078,8316,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,2078,4294,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,2078,1182,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,2078,198,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(12,2078,198,1,'kyo/bench/InterruptBench$$Lambda$57.0x0000000800d45460.apply')
f(13,2078,198,1,'kyo/bench/InterruptBench.$anonfun$2')
f(14,2078,198,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(15,2078,198,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(16,2078,198,2,'kyo.concurrent.fibers$Fiber$$anon$11')
f(11,2276,984,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,2276,984,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,2276,984,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(14,2276,984,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,2276,227,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,2503,545,2,'kyo.concurrent.scheduler.IOTask')
f(15,3048,212,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,3048,212,2,'kyo.concurrent.fibers$Fiber')
f(10,3260,1208,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(11,3260,1208,2,'kyo.bench.InterruptBench$$anon$3')
f(10,4468,631,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,4468,457,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(12,4468,457,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$61.0x0000000800d494c0.apply')
f(13,4468,457,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$_$$anonfun$adapted$1')
f(14,4468,457,1,'kyo/concurrent/fibers$.$anonfun$3')
f(15,4468,258,2,'kyo.concurrent.fibers$Fiber')
f(15,4726,199,1,'kyo/concurrent/fibers$Fiber.join')
f(16,4726,199,1,'kyo/concurrent/fibers$Fibers.get')
f(17,4726,199,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(18,4726,199,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(11,4925,174,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(12,4925,174,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(13,4925,174,1,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10')
f(14,4925,174,2,'kyo.concurrent.fibers$Fiber$$anon$13$$anon$14')
f(10,5099,1273,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,5099,1273,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(12,5099,353,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(13,5099,353,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(14,5099,353,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(15,5099,193,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$60+0x0000000800d48fb0')
f(15,5292,160,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$61+0x0000000800d494c0')
f(12,5452,283,2,'kyo.concurrent.scheduler.IOPromise')
f(12,5735,361,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(13,5735,361,2,'kyo.concurrent.fibers$$anon$12')
f(12,6096,276,1,'kyo/concurrent/fibers$Fiber.interrupt')
f(13,6096,276,2,'kyo.concurrent.fibers$Fiber$$anon$13')
f(9,6372,2,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,6372,2,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,6372,2,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3e9f8.apply')
f(12,6372,2,1,'kyo/bench/Bench.$anonfun$1')
f(13,6372,2,1,'kyo/bench/InterruptBench.kyoBenchFiber')
f(14,6372,2,1,'kyo/bench/InterruptBench.iterate$2')
f(15,6372,2,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(16,6372,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(17,6372,2,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(9,6374,3020,1,'kyo/concurrent/scheduler/IOTask.finalize$1')
f(10,6374,3020,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$60.0x0000000800d48fb0.apply$mcV$sp')
f(11,6374,3020,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1')
f(12,6374,3020,1,'kyo/concurrent/fibers$.loop$9')
f(13,6374,3020,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(14,6374,3020,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(15,6374,3020,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,6374,3020,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,6374,3020,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,6374,3020,1,'scala/runtime/function/JProcedure1.apply')
f(19,6374,3020,1,'scala/runtime/function/JProcedure1.apply')
f(20,6374,3020,1,'kyo/concurrent/scheduler/IOTask$$Lambda$67.0x0000000800d4b4e0.applyVoid')
f(21,6374,3020,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(22,6374,533,2,'kyo.concurrent.scheduler.IOTask')
f(22,6907,512,1,'kyo/concurrent/scheduler/IOPromise.become')
f(23,6907,512,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(24,6907,173,1,'kyo/concurrent/scheduler/IOPromise$Linked$.apply')
f(25,6907,173,2,'kyo.concurrent.scheduler.IOPromise$Linked')
f(24,7080,339,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(25,7080,339,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(26,7080,339,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(27,7080,339,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(22,7419,1975,1,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1')
f(23,7419,1975,1,'kyo/concurrent/scheduler/IOTask$$Lambda$68.0x0000000800d4b8e8.apply')
f(24,7419,1975,1,'kyo/concurrent/scheduler/IOTask.$anonfun$1')
f(25,7419,1975,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(26,7419,1975,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(27,7419,1975,1,'kyo/bench/InterruptBench$$Lambda$58.0x0000000800d44400.apply')
f(28,7419,1975,1,'kyo/bench/InterruptBench.$anonfun$adapted$1')
f(29,7419,1975,1,'kyo/bench/InterruptBench.$anonfun$3')
f(30,7419,1975,1,'kyo/bench/InterruptBench.iterate$2')
f(31,7419,401,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(32,7419,169,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(33,7419,169,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,7419,169,2,'kyo.bench.InterruptBench$$Lambda$56+0x0000000800d47cc8')
f(32,7588,232,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(33,7588,232,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,7588,232,2,'kyo.bench.InterruptBench$$Lambda$58+0x0000000800d44400')
f(31,7820,424,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(32,7820,424,2,'kyo.bench.InterruptBench$$anon$2')
f(31,8244,365,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(32,8244,365,2,'kyo.bench.InterruptBench$$anon$3')
f(31,8609,785,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(32,8609,201,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(33,8609,201,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(34,8609,201,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(35,8609,201,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(32,8810,337,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(33,8810,337,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(32,9147,247,1,'kyo/locals$Locals$.save')
f(33,9147,247,2,'kyo.locals$Locals$$anon$3')
f(9,9394,478,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,9394,187,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,9394,187,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,9394,187,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,9394,187,2,'kyo.concurrent.scheduler.IOTask$$Lambda$62+0x0000000800d4a2a8')
f(10,9581,291,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,9581,291,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(9,9872,522,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,9872,248,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,9872,248,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,9872,248,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,9872,248,2,'kyo.concurrent.scheduler.IOTask$$Lambda$67+0x0000000800d4b4e0')
f(10,10120,274,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,10120,274,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,10394,460,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,10394,460,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,10394,460,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,10394,460,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,10394,460,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d47148')
f(1,10854,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,10854,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,10854,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,10854,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,10854,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,10854,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,10854,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,10854,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,10854,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,10854,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,10854,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,10854,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,10854,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 592px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(37);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,289,3,'all')
f(1,0,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,2,3,'thread_native_entry(Thread*)')
f(3,0,2,4,'Thread::call_run()')
f(4,0,2,4,'JavaThread::thread_main_inner()')
f(5,0,2,4,'CompileBroker::compiler_thread_loop()')
f(6,0,2,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,2,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,2,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,1,4,'Compile::Code_Gen()')
f(10,0,1,4,'PhaseChaitin::Register_Allocate()')
f(11,0,1,4,'PhaseChaitin::gather_lrg_masks(bool)')
f(9,1,1,4,'ParseGenerator::generate(JVMState*)')
f(10,1,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(11,1,1,4,'Parse::do_all_blocks()')
f(12,1,1,4,'Parse::do_one_block()')
f(13,1,1,4,'Parse::do_call()')
f(14,1,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(15,1,1,4,'ParseGenerator::generate(JVMState*)')
f(16,1,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(17,1,1,4,'Parse::do_all_blocks()')
f(18,1,1,4,'Parse::do_one_block()')
f(19,1,1,4,'Parse::do_call()')
f(20,1,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(21,1,1,4,'ParseGenerator::generate(JVMState*)')
f(22,1,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(23,1,1,4,'Parse::do_all_blocks()')
f(24,1,1,4,'Parse::do_one_block()')
f(25,1,1,4,'Parse::do_call()')
f(26,1,1,4,'PredictedCallGenerator::generate(JVMState*)')
f(27,1,1,4,'ParseGenerator::generate(JVMState*)')
f(28,1,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(29,1,1,4,'Parse::do_all_blocks()')
f(30,1,1,4,'Parse::do_one_block()')
f(31,1,1,4,'Parse::do_call()')
f(32,1,1,4,'LibraryIntrinsic::generate(JVMState*)')
f(33,1,1,4,'LibraryCallKit::inline_unsafe_access(bool, BasicType, LibraryCallKit::AccessKind, bool) [clone .part.0]')
f(34,1,1,4,'PhaseGVN::transform_no_reclaim(Node*)')
f(35,1,1,4,'Type::hashcons()')
f(1,2,6,3,'[unknown_Java]')
f(2,2,1,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(2,3,1,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(2,4,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(2,5,1,1,'kyo/core$internal$KyoRoot.apply')
f(2,6,2,1,'kyo/ios$KyoIO.effect')
f(1,8,281,1,'java/lang/Thread.run')
f(2,8,281,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,8,281,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,8,6,1,'java/util/concurrent/FutureTask.run')
f(5,8,6,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,8,6,1,'java/util/concurrent/FutureTask.run')
f(7,8,6,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,8,6,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,8,6,1,'java/lang/reflect/Method.invoke')
f(10,8,6,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,8,6,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,8,6,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,8,6,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,8,6,1,'kyo/bench/jmh_generated/InterruptBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub',0,0,1)
f(15,9,5,1,'kyo/bench/Bench.forkKyo')
f(16,9,5,1,'kyo/bench/Bench.runLoop$2')
f(17,9,1,1,'kyo/bench/Bench$$anon$1.apply')
f(18,9,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,9,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,9,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(21,9,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,9,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,9,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,9,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,9,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,9,1,1,'jdk/internal/misc/Unsafe.unpark')
f(27,9,1,3,'pthread_cond_signal')
f(28,9,1,5,'entry_SYSCALL_64_after_hwframe')
f(29,9,1,5,'do_syscall_64')
f(30,9,1,5,'__x64_sys_futex')
f(31,9,1,5,'do_futex')
f(32,9,1,5,'futex_wake')
f(33,9,1,5,'wake_up_q')
f(34,9,1,5,'_raw_spin_unlock_irqrestore')
f(17,10,4,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,10,4,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,10,4,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,10,4,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,10,4,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,10,4,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,10,4,1,'java/util/concurrent/locks/LockSupport.park')
f(24,10,4,1,'jdk/internal/misc/Unsafe.park')
f(25,10,4,3,'[unknown]')
f(26,10,3,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,10,3,5,'entry_SYSCALL_64_after_hwframe')
f(28,10,3,5,'do_syscall_64')
f(29,10,3,5,'__x64_sys_futex')
f(30,10,3,5,'do_futex')
f(31,10,3,5,'futex_wait')
f(32,11,2,5,'futex_wait_queue_me')
f(33,11,2,5,'schedule')
f(34,11,2,5,'__schedule')
f(35,11,2,5,'finish_task_switch.isra.0')
f(26,13,1,3,'pthread_mutex_trylock')
f(4,14,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e3d0.run')
f(5,14,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,14,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,14,1,1,'java/lang/Thread.sleep')
f(8,14,1,3,'[unknown]')
f(9,14,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,14,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,14,1,5,'do_syscall_64')
f(12,14,1,5,'__x64_sys_futex')
f(13,14,1,5,'do_futex')
f(14,14,1,5,'futex_wait')
f(15,14,1,5,'futex_wait_queue_me')
f(16,14,1,5,'schedule')
f(17,14,1,5,'__schedule')
f(18,14,1,5,'finish_task_switch.isra.0')
f(4,15,274,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d23278.run')
f(5,15,274,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,15,274,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,28,224,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,32,1,2,'kyo/concurrent/scheduler/Coordinator$.tick',1,0,0)
f(8,33,3,2,'kyo/concurrent/scheduler/IOTask.curr',3,0,0)
f(8,36,215,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,42,79,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,47,25,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,52,1,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1',1,0,0)
f(12,52,1,2,'kyo/bench/InterruptBench$$Lambda$57.0x0000000800d45460.apply',1,0,0)
f(13,52,1,2,'kyo/bench/InterruptBench.$anonfun$2',1,0,0)
f(14,52,1,2,'kyo/concurrent/fibers$Fiber.interruptAwait',1,0,0)
f(15,52,1,2,'kyo/concurrent/fibers$Fiber.interruptAwait',1,0,0)
f(11,53,19,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,53,19,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,53,15,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply',15,0,0)
f(14,53,15,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',15,0,0)
f(15,56,2,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',2,0,0)
f(16,56,2,2,'kyo/ios$KyoIO.<init>',2,0,0)
f(15,58,9,2,'kyo/concurrent/scheduler/IOTask.<init>',9,0,0)
f(16,61,6,2,'kyo/concurrent/scheduler/IOPromise.<init>',6,0,0)
f(17,61,6,2,'kyo/concurrent/scheduler/IOPromise.<init>',6,0,0)
f(18,61,6,2,'java/util/concurrent/atomic/AtomicReference.<init>',6,0,0)
f(15,67,1,2,'kyo/concurrent/scheduler/Scheduler$.schedule',1,0,0)
f(13,68,4,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',4,0,0)
f(14,71,1,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(15,71,1,2,'kyo/ios$KyoIO.value',1,0,0)
f(10,72,18,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',14,0,0)
f(11,79,11,2,'kyo/bench/InterruptBench$$anon$3.<init>',7,0,0)
f(12,79,11,2,'kyo/core$internal$KyoCont.<init>',7,0,0)
f(13,82,2,6,'kyo/core$internal$KyoCont.effect',0,2,0)
f(13,84,1,6,'kyo/core$internal$KyoCont.value',0,1,0)
f(13,85,1,6,'kyo/core$internal$KyoRoot.effect',0,1,0)
f(13,86,4,3,'vtable stub')
f(10,90,12,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,91,1,2,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1',1,0,0)
f(12,91,1,2,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$61.0x0000000800d494c0.apply',1,0,0)
f(13,91,1,2,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$_$$anonfun$adapted$1',1,0,0)
f(14,91,1,2,'kyo/concurrent/fibers$.$anonfun$3',1,0,0)
f(15,91,1,2,'kyo/concurrent/fibers$Fiber.join',1,0,0)
f(16,91,1,2,'kyo/concurrent/fibers$Fibers.get',1,0,0)
f(17,91,1,2,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1',1,0,0)
f(11,92,10,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',10,0,0)
f(12,92,10,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',10,0,0)
f(13,92,10,2,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10',10,0,0)
f(14,92,10,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',10,0,0)
f(15,92,10,2,'kyo/concurrent/scheduler/IOPromise.complete',10,0,0)
f(16,93,6,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',6,0,0)
f(17,93,6,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',6,0,0)
f(18,93,6,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',6,0,0)
f(16,99,3,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',3,0,0)
f(17,99,3,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',3,0,0)
f(10,102,17,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,102,17,2,'kyo/concurrent/fibers$Fiber$$anon$11.apply',16,0,0)
f(12,104,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(13,104,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(14,104,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(12,105,1,2,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1',1,0,0)
f(13,105,1,2,'kyo/concurrent/fibers$$anon$12.<init>',1,0,0)
f(12,106,8,2,'kyo/concurrent/scheduler/IOPromise.<init>',8,0,0)
f(13,106,8,2,'kyo/concurrent/scheduler/IOPromise.<init>',8,0,0)
f(14,106,8,2,'java/util/concurrent/atomic/AtomicReference.<init>',8,0,0)
f(12,114,5,2,'kyo/concurrent/scheduler/IOTask.ensure',4,0,0)
f(13,114,3,2,'kyo/concurrent/scheduler/IOTask.curr',3,0,0)
f(13,117,1,2,'kyo/concurrent/scheduler/IOTask.ensures_$eq',1,0,0)
f(13,118,1,1,'scala/runtime/BoxesRunTime.equals')
f(14,118,1,1,'scala/runtime/BoxesRunTime.equals2')
f(15,118,1,1,'java/lang/Object.equals')
f(10,119,2,3,'vtable stub')
f(9,121,101,1,'kyo/concurrent/scheduler/IOTask.finalize$1',18,0,0)
f(10,121,101,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$60.0x0000000800d48fb0.apply$mcV$sp',18,0,0)
f(11,121,101,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1',18,0,0)
f(12,121,101,1,'kyo/concurrent/fibers$.loop$9',18,0,0)
f(13,121,85,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',2,0,0)
f(14,121,85,1,'kyo/concurrent/scheduler/IOPromise.complete',2,0,0)
f(15,121,84,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush',2,0,0)
f(16,121,84,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',2,0,0)
f(17,123,82,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,123,82,1,'scala/runtime/function/JProcedure1.apply')
f(19,124,81,1,'scala/runtime/function/JProcedure1.apply')
f(20,125,80,1,'kyo/concurrent/scheduler/IOTask$$Lambda$66.0x0000000800d4b220.applyVoid',23,0,0)
f(21,133,72,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',42,0,0)
f(22,135,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(22,137,4,2,'kyo/concurrent/scheduler/IOTask.<init>',4,0,0)
f(23,138,3,2,'kyo/concurrent/scheduler/IOPromise.<init>',3,0,0)
f(24,138,1,2,'kyo/concurrent/scheduler/IOPromise$Pending$.apply',1,0,0)
f(24,139,2,2,'kyo/concurrent/scheduler/IOPromise.<init>',2,0,0)
f(25,139,2,2,'java/util/concurrent/atomic/AtomicReference.<init>',2,0,0)
f(22,141,61,2,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1',31,0,0)
f(23,145,57,2,'kyo/concurrent/scheduler/IOTask$$Lambda$67.0x0000000800d4b628.apply',27,0,0)
f(24,146,56,2,'kyo/concurrent/scheduler/IOTask.$anonfun$1',26,0,0)
f(25,146,56,2,'kyo/bench/InterruptBench$$anon$3.apply',26,0,0)
f(26,150,52,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',22,0,0)
f(27,156,32,1,'kyo/bench/InterruptBench$$Lambda$58.0x0000000800d44400.apply',2,0,0)
f(28,158,30,1,'kyo/bench/InterruptBench.$anonfun$adapted$1')
f(29,158,30,1,'kyo/bench/InterruptBench.$anonfun$3')
f(30,158,30,1,'kyo/bench/InterruptBench.iterate$2')
f(31,158,2,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1',2,0,0)
f(31,160,17,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',14,0,0)
f(32,165,12,2,'kyo/bench/InterruptBench$$anon$3.<init>',9,0,0)
f(33,166,11,2,'kyo/core$internal$KyoCont.<init>',8,0,0)
f(34,174,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(34,175,2,6,'kyo/core$internal$KyoCont.value',0,2,0)
f(31,177,11,2,'kyo/concurrent/fibers$Fibers.forkFiber',7,0,0)
f(32,178,6,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',6,0,0)
f(33,178,6,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',6,0,0)
f(34,178,6,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',6,0,0)
f(32,184,4,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(33,186,2,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply',2,0,0)
f(34,186,2,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',2,0,0)
f(35,187,1,2,'kyo/concurrent/scheduler/Scheduler$.schedule',1,0,0)
f(36,187,1,2,'kyo/concurrent/scheduler/Worker$.apply',1,0,0)
f(27,188,14,2,'kyo/bench/InterruptBench$$anon$3.<init>',14,0,0)
f(28,190,12,2,'kyo/core$internal$KyoCont.<init>',12,0,0)
f(22,202,3,2,'kyo/concurrent/scheduler/Scheduler$.schedule',3,0,0)
f(23,203,2,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',2,0,0)
f(24,203,2,2,'kyo/concurrent/scheduler/Queue.offer',2,0,0)
f(25,203,2,2,'kyo/concurrent/scheduler/Queue.tryModify',2,0,0)
f(26,203,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(26,204,1,2,'scala/Function0.apply$mcZ$sp',1,0,0)
f(27,204,1,2,'kyo/concurrent/scheduler/Queue$$Lambda$54.0x0000000800d43cd0.apply',1,0,0)
f(15,205,1,1,'kyo/concurrent/scheduler/IOPromise.onComplete')
f(13,206,16,2,'scala/runtime/BoxesRunTime.boxToBoolean',16,0,0)
f(9,222,1,2,'kyo/concurrent/scheduler/IOTask.loop$2',1,0,0)
f(10,222,1,2,'java/util/concurrent/atomic/AtomicReference.get',1,0,0)
f(9,223,6,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,223,4,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',4,0,0)
f(11,223,4,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',4,0,0)
f(12,223,4,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',4,0,0)
f(10,227,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,227,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(12,227,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(13,227,1,4,'MemAllocator::allocate() const')
f(14,227,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(15,227,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(16,227,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(17,227,1,4,'G1Policy::preventive_collection_required(unsigned int)')
f(10,228,1,2,'kyo/concurrent/scheduler/Scheduler$.schedule',1,0,0)
f(11,228,1,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',1,0,0)
f(12,228,1,2,'kyo/concurrent/scheduler/Queue.offer',1,0,0)
f(13,228,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(14,228,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(9,229,16,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,229,16,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',8,0,0)
f(11,229,16,2,'kyo/concurrent/scheduler/IOPromise.complete',8,0,0)
f(12,229,16,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',8,0,0)
f(13,229,16,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',8,0,0)
f(14,231,14,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run',6,0,0)
f(15,231,6,3,'itable stub')
f(15,237,5,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,237,5,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,237,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,237,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,237,5,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,237,5,1,'jdk/internal/misc/Unsafe.unpark')
f(21,237,5,3,'pthread_cond_signal')
f(22,237,5,5,'entry_SYSCALL_64_after_hwframe')
f(23,237,5,5,'do_syscall_64')
f(24,237,5,5,'__x64_sys_futex')
f(25,237,5,5,'do_futex')
f(26,237,5,5,'futex_wake')
f(27,237,5,5,'wake_up_q')
f(28,237,5,5,'_raw_spin_unlock_irqrestore')
f(15,242,3,1,'scala/runtime/function/JProcedure1.apply')
f(16,244,1,1,'scala/runtime/function/JProcedure1.apply')
f(17,244,1,2,'kyo/concurrent/scheduler/IOTask$$Lambda$66.0x0000000800d4b220.applyVoid',1,0,0)
f(18,244,1,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',1,0,0)
f(19,244,1,2,'kyo/concurrent/scheduler/Scheduler$.schedule',1,0,0)
f(20,244,1,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',1,0,0)
f(21,244,1,2,'kyo/concurrent/scheduler/Queue.offer',1,0,0)
f(22,244,1,2,'kyo/concurrent/scheduler/Queue.tryModify',1,0,0)
f(9,245,3,6,'kyo/core$internal$KyoCont.effect',0,3,0)
f(9,248,1,1,'scala/runtime/function/JProcedure1.apply')
f(10,248,1,1,'scala/runtime/function/JProcedure1.apply')
f(9,249,2,3,'vtable stub')
f(8,251,1,2,'scala/runtime/BoxesRunTime.equals',1,0,0)
f(7,252,34,2,'kyo/concurrent/scheduler/Queue.poll',34,0,0)
f(8,253,10,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',10,0,0)
f(9,253,10,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',10,0,0)
f(10,259,4,2,'java/lang/invoke/DirectMethodHandle.constructorMethod',4,0,0)
f(8,263,23,2,'kyo/concurrent/scheduler/Queue.modify',23,0,0)
f(9,270,3,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',3,0,0)
f(10,271,2,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',2,0,0)
f(9,273,13,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47148.apply',13,0,0)
f(10,282,4,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',4,0,0)
f(11,282,4,2,'scala/collection/mutable/PriorityQueue.dequeue',4,0,0)
f(12,283,3,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',3,0,0)
f(7,286,1,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,286,1,1,'kyo/concurrent/scheduler/Worker.park')
f(9,286,1,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,286,1,1,'jdk/internal/misc/Unsafe.park')
f(11,286,1,3,'[unknown]')
f(12,286,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,286,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,286,1,5,'do_syscall_64')
f(15,286,1,5,'__x64_sys_futex')
f(16,286,1,5,'do_futex')
f(17,286,1,5,'futex_wait')
f(18,286,1,5,'futex_wait_queue_me')
f(19,286,1,5,'schedule')
f(20,286,1,5,'__schedule')
f(21,286,1,5,'finish_task_switch.isra.0')
f(7,287,2,2,'kyo/concurrent/scheduler/Worker.stop$1',2,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 576px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(36);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,10113,3,'all')
f(1,0,10110,1,'java/lang/Thread.run')
f(2,0,10110,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,10110,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,2026,1,'java/util/concurrent/FutureTask.run')
f(5,0,2026,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,2026,1,'java/util/concurrent/FutureTask.run')
f(7,0,2026,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,2026,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,2026,1,'java/lang/reflect/Method.invoke')
f(10,0,2026,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,2026,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,2026,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,2026,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,2026,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,2026,1,'kyo/bench/Bench.syncKyo')
f(16,0,1695,1,'kyo/bench/Bench.runLoop$1')
f(17,0,1413,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,0,1413,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,0,1413,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,0,1413,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,0,39,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,0,39,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,0,20,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,20,19,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,20,19,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,39,482,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,521,892,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,521,892,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,521,892,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(17,1413,282,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,1413,207,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,1413,207,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,1413,207,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,1413,155,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,1413,155,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,1413,155,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(24,1413,155,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,1413,26,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(25,1439,102,2,'kyo.concurrent.scheduler.IOTask')
f(25,1541,26,1,'kyo/concurrent/fibers$Fiber$.promise')
f(26,1541,26,2,'kyo.concurrent.fibers$Fiber')
f(25,1567,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,1567,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,1567,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.poll')
f(28,1567,1,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.switchToNextConsumerChunkAndPoll')
f(29,1567,1,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.moveToNextConsumerChunk')
f(30,1567,1,1,'org/jctools/queues/SpscArrayQueue.offer')
f(31,1567,1,2,'java.lang.String')
f(21,1568,52,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(22,1568,52,1,'kyo/concurrent/fibers$Fibers$$Lambda$39.0x0000000800c82da8.apply')
f(23,1568,52,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(24,1568,52,1,'kyo/concurrent/fibers$Fiber.join')
f(25,1568,52,1,'kyo/concurrent/fibers$Fibers.get')
f(26,1568,52,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(27,1568,52,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(18,1620,75,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,1620,75,1,'kyo/concurrent/fibers$Fibers$$Lambda$40.0x0000000800c835a8.apply')
f(20,1620,75,1,'kyo/concurrent/fibers$Fibers.$anonfun$31')
f(21,1620,75,1,'kyo/concurrent/fibers$Fiber.block')
f(22,1620,75,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(16,1695,331,1,'kyo/bench/InterruptBench.kyoBench')
f(17,1695,36,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,1695,36,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,1695,36,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,1695,36,2,'kyo.bench.InterruptBench$$Lambda$37+0x0000000800c3e9f8')
f(17,1731,132,1,'kyo/concurrent/fibers$Fibers.block')
f(18,1731,25,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,1731,25,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,1731,25,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,1731,25,2,'kyo.concurrent.fibers$Fibers$$Lambda$40+0x0000000800c835a8')
f(18,1756,29,1,'kyo/concurrent/fibers$Fibers.handler$3')
f(19,1756,29,2,'kyo.concurrent.fibers$Fibers$$anon$115')
f(18,1785,45,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$_$shallowHandleLoop$1')
f(19,1785,45,2,'kyo.concurrent.fibers$Fibers$$anon$116')
f(18,1830,33,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$26')
f(19,1830,33,2,'kyo.concurrent.fibers$Fibers$$anon$117')
f(17,1863,163,1,'kyo/concurrent/fibers$Fibers.fork')
f(18,1863,28,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(19,1863,28,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(20,1863,28,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(21,1863,28,2,'kyo.concurrent.fibers$Fibers$$Lambda$39+0x0000000800c82da8')
f(18,1891,100,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(19,1891,37,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,1891,37,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,1891,37,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,1891,37,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(19,1928,36,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,1928,36,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(19,1964,27,1,'kyo/locals$Locals$.save')
f(20,1964,27,2,'kyo.locals$Locals$$anon$3')
f(18,1991,35,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(19,1991,35,2,'kyo.concurrent.fibers$Fibers$$anon$34')
f(4,2026,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec28.run')
f(5,2026,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,2026,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,2026,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,2026,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,2026,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,2026,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,2026,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,2037,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$51.0x0000000800d1ee50.run')
f(5,2037,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,2037,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,2037,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,2037,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,2037,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,2037,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$70+0x0000000800d4bd78')
f(4,2048,8062,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23cb0.run')
f(5,2048,8062,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,2048,8062,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,2048,7691,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,2048,7691,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,2048,3788,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,2048,1041,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,2048,206,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(12,2048,206,1,'kyo/bench/InterruptBench$$Lambda$58.0x0000000800d48230.apply')
f(13,2048,206,1,'kyo/bench/InterruptBench.$anonfun$2')
f(14,2048,206,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(15,2048,206,1,'kyo/concurrent/fibers$Fiber.interruptAwait')
f(16,2048,206,2,'kyo.concurrent.fibers$Fiber$$anon$11')
f(11,2254,835,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,2254,835,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,2254,835,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(14,2254,835,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,2254,180,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(15,2434,480,2,'kyo.concurrent.scheduler.IOTask')
f(15,2914,175,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,2914,175,2,'kyo.concurrent.fibers$Fiber')
f(10,3089,1016,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(11,3089,1016,2,'kyo.bench.InterruptBench$$anon$3')
f(10,4105,583,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,4105,402,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(12,4105,402,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$62.0x0000000800d4a2d8.apply')
f(13,4105,402,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$_$$anonfun$adapted$1')
f(14,4105,402,1,'kyo/concurrent/fibers$.$anonfun$3')
f(15,4105,229,2,'kyo.concurrent.fibers$Fiber')
f(15,4334,173,1,'kyo/concurrent/fibers$Fiber.join')
f(16,4334,173,1,'kyo/concurrent/fibers$Fibers.get')
f(17,4334,173,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(18,4334,173,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(11,4507,181,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(12,4507,181,1,'kyo/concurrent/fibers$Fiber$$anon$13.apply')
f(13,4507,181,1,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10')
f(14,4507,181,2,'kyo.concurrent.fibers$Fiber$$anon$13$$anon$14')
f(10,4688,1148,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,4688,1148,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(12,4688,295,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(13,4688,295,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(14,4688,295,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(15,4688,160,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$61+0x0000000800d49dc8')
f(15,4848,135,2,'kyo.concurrent.fibers$Fiber$$anon$11$$Lambda$62+0x0000000800d4a2d8')
f(12,4983,239,2,'kyo.concurrent.scheduler.IOPromise')
f(12,5222,340,1,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1')
f(13,5222,340,2,'kyo.concurrent.fibers$$anon$12')
f(12,5562,274,1,'kyo/concurrent/fibers$Fiber.interrupt')
f(13,5562,274,2,'kyo.concurrent.fibers$Fiber$$anon$13')
f(9,5836,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,5836,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,5836,1,1,'kyo/bench/InterruptBench$$Lambda$37.0x0000000800c3e9f8.apply')
f(12,5836,1,1,'kyo/bench/InterruptBench.kyoBench$$anonfun$1')
f(13,5836,1,1,'kyo/bench/InterruptBench.kyoBenchFiber')
f(14,5836,1,1,'kyo/bench/InterruptBench.iterate$2')
f(15,5836,1,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(16,5836,1,2,'kyo.bench.InterruptBench$$anon$3')
f(9,5837,2992,1,'kyo/concurrent/scheduler/IOTask.finalize$1')
f(10,5837,2992,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$61.0x0000000800d49dc8.apply$mcV$sp')
f(11,5837,2992,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1')
f(12,5837,2992,1,'kyo/concurrent/fibers$.loop$9')
f(13,5837,2992,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(14,5837,2992,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(15,5837,2992,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(16,5837,2992,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(17,5837,2992,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,5837,2992,1,'scala/runtime/function/JProcedure1.apply')
f(19,5837,2992,1,'scala/runtime/function/JProcedure1.apply')
f(20,5837,2992,1,'kyo/concurrent/scheduler/IOTask$$Lambda$68.0x0000000800d4e580.applyVoid')
f(21,5837,2992,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(22,5837,536,2,'kyo.concurrent.scheduler.IOTask')
f(22,6373,475,1,'kyo/concurrent/scheduler/IOPromise.become')
f(23,6373,475,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(24,6373,166,1,'kyo/concurrent/scheduler/IOPromise$Linked$.apply')
f(25,6373,166,2,'kyo.concurrent.scheduler.IOPromise$Linked')
f(24,6539,309,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(25,6539,309,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(26,6539,309,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(27,6539,309,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(22,6848,1981,1,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1')
f(23,6848,1981,1,'kyo/concurrent/scheduler/IOTask$$Lambda$69.0x0000000800d4e988.apply')
f(24,6848,1981,1,'kyo/concurrent/scheduler/IOTask.$anonfun$1')
f(25,6848,1981,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(26,6848,1981,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(27,6848,1981,1,'kyo/bench/InterruptBench$$Lambda$59.0x0000000800d490d8.apply')
f(28,6848,1981,1,'kyo/bench/InterruptBench.$anonfun$adapted$1')
f(29,6848,1981,1,'kyo/bench/InterruptBench.$anonfun$3')
f(30,6848,1981,1,'kyo/bench/InterruptBench.iterate$2')
f(31,6848,395,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(32,6848,200,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(33,6848,200,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,6848,200,2,'kyo.bench.InterruptBench$$Lambda$57+0x0000000800d45b80')
f(32,7048,195,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial')
f(33,7048,195,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(34,7048,195,2,'kyo.bench.InterruptBench$$Lambda$59+0x0000000800d490d8')
f(31,7243,410,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1')
f(32,7243,410,2,'kyo.bench.InterruptBench$$anon$2')
f(31,7653,369,1,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2')
f(32,7653,369,2,'kyo.bench.InterruptBench$$anon$3')
f(31,8022,807,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(32,8022,227,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(33,8022,227,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(34,8022,227,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(35,8022,227,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84200')
f(32,8249,378,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(33,8249,378,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(32,8627,202,1,'kyo/locals$Locals$.save')
f(33,8627,202,2,'kyo.locals$Locals$$anon$3')
f(9,8829,434,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,8829,165,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,8829,165,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,8829,165,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,8829,165,2,'kyo.concurrent.scheduler.IOTask$$Lambda$63+0x0000000800d4b0c0')
f(10,8994,269,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,8994,269,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(9,9263,476,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,9263,248,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,9263,248,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,9263,248,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,9263,248,2,'kyo.concurrent.scheduler.IOTask$$Lambda$68+0x0000000800d4e580')
f(10,9511,228,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,9511,228,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(7,9739,371,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,9739,371,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,9739,371,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,9739,371,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,9739,371,2,'kyo.concurrent.scheduler.Queue$$Lambda$56+0x0000000800d45000')
f(1,10110,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,10110,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,10110,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,10110,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,10110,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,10110,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,10110,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,10110,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,10110,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,10110,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,10110,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,10110,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,10110,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 624px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(39);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,290,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::estimate_block_frequency()')
f(12,0,1,4,'CFGLoop::compute_freq()')
f(13,0,1,4,'CFGLoop::compute_freq()')
f(14,0,1,4,'CFGLoop::compute_freq()')
f(15,0,1,4,'CFGLoop::compute_freq()')
f(16,0,1,4,'Block::succ_prob(unsigned int)')
f(9,1,1,4,'ParseGenerator::generate(JVMState*)')
f(10,1,1,4,'Parse::Parse(JVMState*, ciMethod*, float)')
f(11,1,1,4,'Parse::do_all_blocks()')
f(12,1,1,4,'Parse::do_one_block()')
f(13,1,1,4,'Parse::do_field_access(bool, bool)')
f(14,1,1,4,'Parse::do_get_xxx(Node*, ciField*, bool)')
f(15,1,1,4,'Compile::alias_type(ciField*)')
f(16,1,1,4,'TypeInstPtr::add_offset(long) const')
f(17,1,1,4,'TypeOopPtr::TypeOopPtr(Type::TYPES, TypePtr::PTR, ciKlass*, bool, ciObject*, int, int, TypePtr const*, int)')
f(18,1,1,4,'ciInstanceKlass::get_field_by_offset(int, bool)')
f(19,1,1,4,'ciInstanceKlass::compute_nonstatic_fields()')
f(20,1,1,4,'ciInstanceKlass::compute_nonstatic_fields()')
f(21,1,1,4,'ciInstanceKlass::compute_nonstatic_fields()')
f(22,1,1,4,'ciInstanceKlass::compute_nonstatic_fields()')
f(23,1,1,4,'ciInstanceKlass::compute_nonstatic_fields_impl(GrowableArray<ciField*>*)')
f(24,1,1,4,'ciField::ciField(fieldDescriptor*)')
f(1,2,6,3,'[unknown_Java]')
f(2,2,1,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(2,3,1,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(2,4,1,1,'kyo/bench/InterruptBench.iterate$2')
f(2,5,1,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(2,6,2,1,'kyo/concurrent/scheduler/IOTask.eval')
f(1,8,281,1,'java/lang/Thread.run')
f(2,8,281,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,8,281,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,8,6,1,'java/util/concurrent/FutureTask.run')
f(5,8,6,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,8,6,1,'java/util/concurrent/FutureTask.run')
f(7,8,6,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,8,6,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,8,6,1,'java/lang/reflect/Method.invoke')
f(10,8,6,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,8,6,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,8,6,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,8,6,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,8,6,1,'kyo/bench/jmh_generated/InterruptBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,8,6,1,'kyo/bench/Bench.syncKyo')
f(16,8,6,1,'kyo/bench/Bench.runLoop$1')
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,1,5,'futex_wait_queue_me')
f(33,8,1,5,'schedule')
f(34,8,1,5,'__schedule')
f(35,8,1,5,'finish_task_switch.isra.0')
f(32,9,1,5,'hash_futex')
f(17,10,4,1,'kyo/concurrent/fibers$Fibers$$anon$117.apply')
f(18,10,4,1,'kyo/concurrent/fibers$Fibers$$anon$116.apply')
f(19,10,4,1,'kyo/concurrent/fibers$Fibers$$anon$116.liftedTree3$1')
f(20,10,4,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(21,10,4,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(22,10,4,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(23,10,4,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply')
f(24,10,4,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(25,10,4,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(26,10,4,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(27,10,4,1,'kyo/concurrent/scheduler/Worker.enqueue',0,0,1)
f(28,11,3,1,'java/util/concurrent/locks/LockSupport.unpark')
f(29,11,3,1,'jdk/internal/misc/Unsafe.unpark')
f(30,11,3,3,'pthread_cond_signal')
f(31,11,3,5,'entry_SYSCALL_64_after_hwframe')
f(32,11,3,5,'do_syscall_64')
f(33,11,3,5,'__x64_sys_futex')
f(34,11,3,5,'do_futex')
f(35,11,3,5,'futex_wake')
f(36,11,3,5,'wake_up_q')
f(37,11,3,5,'_raw_spin_unlock_irqrestore')
f(4,14,1,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1ec28.run')
f(5,14,1,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,14,1,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,14,1,1,'java/lang/Thread.sleep')
f(8,14,1,3,'[unknown]')
f(9,14,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(10,14,1,5,'entry_SYSCALL_64_after_hwframe')
f(11,14,1,5,'do_syscall_64')
f(12,14,1,5,'__x64_sys_futex')
f(13,14,1,5,'do_futex')
f(14,14,1,5,'futex_wait')
f(15,14,1,5,'futex_wait_queue_me')
f(16,14,1,5,'schedule')
f(17,14,1,5,'__schedule')
f(18,14,1,5,'finish_task_switch.isra.0')
f(4,15,274,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$53.0x0000000800d23cb0.run')
f(5,15,274,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,15,274,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,21,4,2,'kyo/concurrent/scheduler/IOTask.reenqueue',4,0,0)
f(8,21,4,2,'kyo/concurrent/scheduler/IOTask.curr',4,0,0)
f(7,25,235,1,'kyo/concurrent/scheduler/IOTask.run',9,0,0)
f(8,28,5,2,'kyo/concurrent/scheduler/Coordinator$.tick',5,0,0)
f(8,33,1,2,'kyo/concurrent/scheduler/IOTask.curr',1,0,0)
f(8,34,226,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,45,99,1,'kyo/bench/InterruptBench$$anon$3.apply')
f(10,49,31,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(11,51,2,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1',2,0,0)
f(12,51,2,2,'kyo/bench/InterruptBench$$Lambda$58.0x0000000800d44800.apply',2,0,0)
f(13,51,2,2,'kyo/bench/InterruptBench.$anonfun$2',2,0,0)
f(14,51,2,2,'kyo/concurrent/fibers$Fiber.interruptAwait',2,0,0)
f(15,51,2,2,'kyo/concurrent/fibers$Fiber.interruptAwait',2,0,0)
f(11,53,27,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply',1,0,0)
f(12,54,26,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,55,19,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply',18,0,0)
f(14,55,19,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',18,0,0)
f(15,61,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(16,61,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(17,61,1,4,'MemAllocator::allocate() const')
f(18,61,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(19,61,1,4,'G1Allocator::unsafe_max_tlab_alloc()')
f(15,62,4,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',4,0,0)
f(15,66,4,2,'kyo/concurrent/scheduler/IOTask.<init>',4,0,0)
f(16,69,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(17,69,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(18,69,1,2,'java/util/concurrent/atomic/AtomicReference.<init>',1,0,0)
f(15,70,4,2,'kyo/concurrent/scheduler/Scheduler$.schedule',4,0,0)
f(16,70,4,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',4,0,0)
f(13,74,6,2,'kyo/concurrent/fibers$Fibers$$anon$33.<init>',6,0,0)
f(14,78,2,2,'kyo/core$internal$KyoCont.<init>',2,0,0)
f(10,80,31,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',20,0,0)
f(11,91,19,2,'kyo/bench/InterruptBench$$anon$3.<init>',8,0,0)
f(12,91,19,2,'kyo/core$internal$KyoCont.<init>',8,0,0)
f(13,95,3,6,'kyo/core$internal$KyoCont.effect',0,3,0)
f(13,98,4,6,'kyo/core$internal$KyoCont.value',0,4,0)
f(13,102,3,6,'kyo/core$internal$KyoRoot.value',0,3,0)
f(13,105,1,1,'kyo/ios$KyoIO.effect')
f(13,106,4,3,'vtable stub')
f(11,110,1,2,'scala/runtime/BoxesRunTime.unboxToBoolean',1,0,0)
f(10,111,18,1,'kyo/concurrent/fibers$$anon$12.apply')
f(11,111,2,2,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1',2,0,0)
f(12,111,2,2,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$62.0x0000000800d49f40.apply',2,0,0)
f(13,111,2,2,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$_$$anonfun$adapted$1',2,0,0)
f(14,111,2,2,'kyo/concurrent/fibers$.$anonfun$3',2,0,0)
f(15,112,1,2,'kyo/concurrent/fibers$Fiber.join',1,0,0)
f(16,112,1,2,'kyo/concurrent/fibers$Fibers.get',1,0,0)
f(17,112,1,2,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1',1,0,0)
f(11,113,16,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',16,0,0)
f(12,113,16,2,'kyo/concurrent/fibers$Fiber$$anon$13.apply',16,0,0)
f(13,114,15,2,'kyo/concurrent/fibers$Fiber$$anon$13.loop$10',15,0,0)
f(14,114,15,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',15,0,0)
f(15,114,15,2,'kyo/concurrent/scheduler/IOPromise.complete',15,0,0)
f(16,114,11,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',11,0,0)
f(17,114,11,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',11,0,0)
f(18,114,11,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',11,0,0)
f(16,125,4,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',4,0,0)
f(17,125,4,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',4,0,0)
f(10,129,15,1,'kyo/concurrent/fibers$Fiber$$anon$11.apply')
f(11,129,15,2,'kyo/concurrent/fibers$Fiber$$anon$11.apply',13,0,0)
f(12,132,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(13,132,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',2,0,0)
f(14,132,2,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',2,0,0)
f(12,134,3,2,'kyo/concurrent/fibers$Fiber$$anon$11.kyo$concurrent$fibers$Fiber$$anon$11$$_$transformLoop$1',2,0,0)
f(13,134,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(14,134,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(15,134,1,4,'MemAllocator::allocate() const')
f(16,134,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(13,135,2,2,'kyo/concurrent/fibers$$anon$12.<init>',2,0,0)
f(12,137,1,2,'kyo/concurrent/fibers$Fiber.interrupt',1,0,0)
f(12,138,4,2,'kyo/concurrent/scheduler/IOPromise.<init>',4,0,0)
f(13,138,4,2,'kyo/concurrent/scheduler/IOPromise.<init>',4,0,0)
f(14,138,4,2,'java/util/concurrent/atomic/AtomicReference.<init>',4,0,0)
f(12,142,2,2,'kyo/concurrent/scheduler/IOTask.ensure',1,0,0)
f(13,142,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(14,142,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(15,142,1,4,'MemAllocator::allocate() const')
f(16,142,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(17,142,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(18,142,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(19,142,1,4,'G1AllocRegion::new_alloc_region_and_allocate(unsigned long, bool)')
f(20,142,1,4,'G1CollectedHeap::new_mutator_alloc_region(unsigned long, bool, unsigned int)')
f(21,142,1,4,'G1CollectedHeap::new_region(unsigned long, HeapRegionType, bool, unsigned int)')
f(22,142,1,4,'HeapRegionManager::allocate_free_region(HeapRegionType, unsigned int)')
f(13,143,1,2,'kyo/concurrent/scheduler/IOTask.curr',1,0,0)
f(9,144,1,2,'kyo/concurrent/scheduler/Coordinator$.tick',1,0,0)
f(9,145,69,1,'kyo/concurrent/scheduler/IOTask.finalize$1',7,0,0)
f(10,145,69,1,'kyo/concurrent/fibers$Fiber$$anon$11$$Lambda$61.0x0000000800d49a30.apply$mcV$sp',7,0,0)
f(11,145,69,1,'kyo/concurrent/fibers$.kyo$concurrent$fibers$Fiber$$anon$11$$_$apply$$anonfun$1',7,0,0)
f(12,145,69,1,'kyo/concurrent/fibers$.loop$9',7,0,0)
f(13,145,63,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',1,0,0)
f(14,145,63,1,'kyo/concurrent/scheduler/IOPromise.complete',1,0,0)
f(15,145,62,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush',1,0,0)
f(16,145,62,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',1,0,0)
f(17,146,61,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(18,146,61,1,'scala/runtime/function/JProcedure1.apply')
f(19,147,60,2,'scala/runtime/function/JProcedure1.apply',33,0,0)
f(20,147,60,2,'kyo/concurrent/scheduler/IOTask$$Lambda$68.0x0000000800d4e000.applyVoid',35,0,0)
f(21,150,57,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',32,0,0)
f(22,150,7,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',7,0,0)
f(23,150,7,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',7,0,0)
f(24,156,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(22,157,1,2,'kyo/concurrent/scheduler/IOTask.<init>',1,0,0)
f(23,157,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(24,157,1,2,'kyo/concurrent/scheduler/IOPromise$Pending$.apply',1,0,0)
f(22,158,46,2,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1',21,0,0)
f(23,159,45,2,'kyo/concurrent/scheduler/IOTask$$Lambda$69.0x0000000800d4e408.apply',20,0,0)
f(24,159,45,2,'kyo/concurrent/scheduler/IOTask.$anonfun$1',20,0,0)
f(25,162,42,2,'kyo/bench/InterruptBench$$anon$3.apply',17,0,0)
f(26,162,40,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',17,0,0)
f(27,168,23,1,'kyo/bench/InterruptBench$$Lambda$59.0x0000000800d48230.apply')
f(28,168,23,1,'kyo/bench/InterruptBench.$anonfun$adapted$1')
f(29,168,23,1,'kyo/bench/InterruptBench.$anonfun$3')
f(30,168,23,1,'kyo/bench/InterruptBench.iterate$2')
f(31,169,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(32,169,2,2,'java/lang/invoke/LambdaForm$DMH.0x0000000800d4c000.newInvokeSpecial',2,0,0)
f(33,169,2,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',2,0,0)
f(31,171,6,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$_$transformLoop$1',5,0,0)
f(32,176,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(33,176,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(34,176,1,4,'MemAllocator::allocate() const')
f(35,176,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(36,176,1,4,'ThreadLocalAllocBuffer::retire_before_allocation()')
f(37,176,1,4,'CollectedHeap::fill_with_dummy_object(HeapWordImpl**, HeapWordImpl**, bool)')
f(38,176,1,4,'ObjArrayAllocator::initialize(HeapWordImpl**) const')
f(31,177,12,2,'kyo/bench/InterruptBench.kyo$bench$InterruptBench$$_$transformLoop$2',6,0,0)
f(32,179,10,2,'kyo/bench/InterruptBench$$anon$3.<init>',4,0,0)
f(33,180,9,2,'kyo/core$internal$KyoCont.<init>',3,0,0)
f(34,183,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(34,184,5,6,'kyo/core$internal$KyoCont.value',0,5,0)
f(31,189,2,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(32,189,2,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(33,189,2,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84200.apply',2,0,0)
f(34,189,2,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',2,0,0)
f(35,189,2,2,'kyo/concurrent/scheduler/IOTask.<init>',2,0,0)
f(36,190,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(37,190,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(38,190,1,2,'java/util/concurrent/atomic/AtomicReference.<init>',1,0,0)
f(27,191,10,2,'kyo/bench/InterruptBench$$anon$3.<init>',10,0,0)
f(28,192,9,2,'kyo/core$internal$KyoCont.<init>',9,0,0)
f(27,201,1,2,'scala/runtime/BoxesRunTime.unboxToBoolean',1,0,0)
f(26,202,2,1,'kyo/core$internal$KyoRoot.apply')
f(22,204,3,2,'kyo/concurrent/scheduler/Scheduler$.schedule',3,0,0)
f(23,204,3,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',3,0,0)
f(24,204,3,2,'kyo/concurrent/scheduler/Queue.offer',3,0,0)
f(25,204,3,2,'kyo/concurrent/scheduler/Queue.tryModify',3,0,0)
f(26,204,2,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',2,0,0)
f(27,204,2,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',2,0,0)
f(28,204,2,2,'java/lang/invoke/VarForm.getMemberName',2,0,0)
f(29,204,2,2,'java/lang/invoke/VarForm.getMemberNameOrNull',2,0,0)
f(26,206,1,2,'scala/Function0.apply$mcZ$sp',1,0,0)
f(27,206,1,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47258.apply',1,0,0)
f(15,207,1,1,'kyo/concurrent/scheduler/IOPromise.onComplete')
f(13,208,6,2,'scala/runtime/BoxesRunTime.boxToBoolean',6,0,0)
f(9,214,2,2,'kyo/concurrent/scheduler/IOTask.loop$1',2,0,0)
f(10,214,2,2,'java/util/concurrent/atomic/AtomicReference.get',2,0,0)
f(9,216,2,2,'kyo/concurrent/scheduler/IOTask.loop$2',2,0,0)
f(10,216,1,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',1,0,0)
f(11,216,1,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',1,0,0)
f(12,216,1,2,'java/lang/invoke/DirectMethodHandle.allocateInstance',1,0,0)
f(10,217,1,2,'kyo/concurrent/scheduler/IOPromise$Pending.add',1,0,0)
f(9,218,15,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,219,7,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',7,0,0)
f(11,220,6,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',6,0,0)
f(12,222,2,2,'java/lang/invoke/DirectMethodHandle.constructorMethod',2,0,0)
f(12,224,2,2,'kyo/concurrent/scheduler/IOTask$$Lambda$68.0x0000000800d4e000.<init>',2,0,0)
f(13,225,1,2,'java/lang/Object.<init>',1,0,0)
f(10,226,6,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',6,0,0)
f(11,226,6,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',6,0,0)
f(12,226,6,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',6,0,0)
f(10,232,1,2,'kyo/concurrent/scheduler/Scheduler$.schedule',1,0,0)
f(11,232,1,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',1,0,0)
f(12,232,1,2,'kyo/concurrent/scheduler/Queue.offer',1,0,0)
f(13,232,1,2,'kyo/concurrent/scheduler/Queue.tryModify',1,0,0)
f(14,232,1,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',1,0,0)
f(15,232,1,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',1,0,0)
f(16,232,1,2,'java/lang/invoke/VarHandle.checkExactAccessMode',1,0,0)
f(9,233,17,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,233,17,2,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',7,0,0)
f(11,233,17,2,'kyo/concurrent/scheduler/IOPromise.complete',7,0,0)
f(12,233,17,2,'kyo/concurrent/scheduler/IOPromise$Pending.flush',7,0,0)
f(13,233,17,2,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7',7,0,0)
f(14,234,16,2,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run',6,0,0)
f(15,234,6,3,'itable stub')
f(15,240,6,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,240,6,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,240,6,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,240,6,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,240,6,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,240,6,1,'jdk/internal/misc/Unsafe.unpark')
f(21,240,6,3,'pthread_cond_signal')
f(22,240,6,5,'entry_SYSCALL_64_after_hwframe')
f(23,240,6,5,'do_syscall_64')
f(24,240,6,5,'__x64_sys_futex')
f(25,240,6,5,'do_futex')
f(26,240,6,5,'futex_wake')
f(27,240,6,5,'wake_up_q')
f(28,240,6,5,'_raw_spin_unlock_irqrestore')
f(15,246,4,1,'scala/runtime/function/JProcedure1.apply')
f(16,246,4,2,'scala/runtime/function/JProcedure1.apply',4,0,0)
f(17,246,4,2,'kyo/concurrent/scheduler/IOTask$$Lambda$68.0x0000000800d4e000.applyVoid',4,0,0)
f(18,246,4,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',4,0,0)
f(19,246,4,2,'kyo/concurrent/scheduler/Scheduler$.schedule',4,0,0)
f(20,246,4,2,'kyo/concurrent/scheduler/Worker.enqueueLocal',4,0,0)
f(21,246,4,2,'kyo/concurrent/scheduler/Queue.offer',4,0,0)
f(22,246,2,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',2,0,0)
f(23,246,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',2,0,0)
f(24,246,2,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47258.<init>',2,0,0)
f(25,246,2,2,'java/lang/Object.<init>',2,0,0)
f(22,248,2,2,'kyo/concurrent/scheduler/Queue.tryModify',2,0,0)
f(23,248,2,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',2,0,0)
f(9,250,4,6,'kyo/core$internal$KyoCont.effect',0,4,0)
f(9,254,6,3,'vtable stub')
f(7,260,27,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,260,27,1,'kyo/concurrent/scheduler/Queue.modify')
f(9,260,13,2,'java/util/concurrent/atomic/AtomicBoolean.compareAndSet',13,0,0)
f(10,263,10,2,'java/lang/invoke/VarHandleGuards.guard_LII_Z',10,0,0)
f(11,266,7,2,'java/lang/invoke/VarHandleInts$FieldInstanceReadWrite.compareAndSet',7,0,0)
f(12,268,5,2,'java/util/Objects.requireNonNull',5,0,0)
f(9,273,14,2,'kyo/concurrent/scheduler/Queue$$Lambda$60.0x0000000800d49770.apply',14,0,0)
f(10,273,14,2,'kyo/concurrent/scheduler/Queue.addAndPoll$$anonfun$1',14,0,0)
f(11,274,13,2,'scala/collection/mutable/PriorityQueue.dequeue',13,0,0)
f(12,281,5,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',5,0,0)
f(12,286,1,2,'scala/collection/mutable/PriorityQueue.scala$collection$mutable$PriorityQueue$$resarr',1,0,0)
f(7,287,2,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,287,2,1,'kyo/concurrent/scheduler/Worker.park')
f(9,287,2,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,287,2,1,'jdk/internal/misc/Unsafe.park')
f(11,287,2,3,'[unknown]')
f(12,287,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,287,2,5,'entry_SYSCALL_64_after_hwframe')
f(14,287,2,5,'do_syscall_64')
f(15,287,2,5,'__x64_sys_futex')
f(16,287,2,5,'do_futex')
f(17,287,2,5,'futex_wait')
f(18,288,1,5,'futex_wait_queue_me')
f(19,288,1,5,'schedule')
f(20,288,1,5,'__schedule')
f(21,288,1,5,'finish_task_switch.isra.0')
f(1,289,1,1,'kyo/bench/InterruptBench$$anon$2.apply')
f(2,289,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(3,289,1,6,'kyo/core$internal$KyoCont.value',0,1,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 496px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(31);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,20313,3,'all')
f(1,0,20309,1,'java/lang/Thread.run')
f(2,0,20309,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,20309,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,4112,1,'java/util/concurrent/FutureTask.run')
f(5,0,4112,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,4112,1,'java/util/concurrent/FutureTask.run')
f(7,0,4112,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,4112,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,4112,1,'java/lang/reflect/Method.invoke')
f(10,0,4112,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,4112,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,4112,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,4112,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,4112,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,4112,1,'kyo/bench/Bench.forkKyo')
f(16,0,242,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,242,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,242,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,96,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(20,0,96,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3ee58')
f(19,96,146,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c3ee58')
f(16,242,401,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,242,401,2,'kyo.bench.Bench$$anon$1')
f(16,643,3019,1,'kyo/bench/Bench.runLoop$2')
f(17,643,1248,1,'kyo/bench/Bench$$anon$1.apply')
f(18,643,125,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,643,125,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c83220.apply')
f(20,643,125,1,'kyo/bench/Bench.$anonfun$2')
f(21,643,125,1,'kyo/concurrent/fibers$Fiber.block')
f(22,643,125,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,768,1123,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,768,1123,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,768,1123,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84600.apply')
f(21,768,1123,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,768,85,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(22,853,967,2,'kyo.concurrent.scheduler.IOTask')
f(22,1820,56,1,'kyo/concurrent/fibers$Fiber$.promise')
f(23,1820,56,2,'kyo.concurrent.fibers$Fiber')
f(22,1876,15,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,1876,15,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,1876,15,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,1876,15,1,'kyo/concurrent/scheduler/Queue.offer')
f(26,1876,15,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(27,1876,15,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(28,1876,15,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(29,1876,15,1,'jdk/internal/misc/Unsafe.allocateInstance')
f(30,1876,15,2,'kyo.concurrent.scheduler.Queue$$Lambda$54+0x0000000800d47258')
f(17,1891,1771,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,1891,1771,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,1891,1771,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,1891,1771,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,1891,688,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,1891,688,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,1891,161,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,2052,527,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,2052,527,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,2579,639,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,3218,444,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,3218,444,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,3218,444,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,3662,450,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,3662,281,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,3662,281,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,3662,281,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,3662,281,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c84600')
f(17,3943,108,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,3943,108,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(17,4051,61,1,'kyo/locals$Locals$.save')
f(18,4051,61,2,'kyo.locals$Locals$$anon$3')
f(4,4112,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1ee28.run')
f(5,4112,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,4112,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,4112,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,4112,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,4112,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,4112,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,4112,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,4123,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1f050.run')
f(5,4123,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,4123,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,4123,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,4123,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,4123,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,4123,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$60+0x0000000800d49920')
f(4,4134,16175,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fd98.run')
f(5,4134,16175,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,4134,16175,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,4134,16175,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,4134,16175,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,4134,15983,1,'kyo/bench/NarrowBindBench$$anon$2.apply')
f(10,4134,15983,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(11,4134,15983,1,'kyo/bench/NarrowBindBench$$Lambda$57.0x0000000800d44800.apply')
f(12,4134,15983,1,'kyo/bench/NarrowBindBench.$anonfun$adapted$1')
f(13,4134,15983,1,'kyo/bench/NarrowBindBench.$anonfun$1')
f(14,4134,15983,1,'kyo/bench/NarrowBindBench.loop$1')
f(15,4134,4202,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,4134,4202,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,4134,4202,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,4134,4202,2,'kyo.bench.NarrowBindBench$$Lambda$57+0x0000000800d44800')
f(15,8336,3478,2,'kyo.bench.NarrowBindBench$$anon$1')
f(15,11814,8303,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(16,11814,8303,2,'kyo.bench.NarrowBindBench$$anon$2')
f(9,20117,1,1,'kyo/bench/NarrowBindBench$$anon$5.apply')
f(10,20117,1,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$2')
f(11,20117,1,1,'kyo/bench/NarrowBindBench$$Lambda$56.0x0000000800d45690.apply')
f(12,20117,1,1,'kyo/bench/NarrowBindBench.$anonfun$adapted$2')
f(13,20117,1,1,'kyo/bench/NarrowBindBench.$anonfun$2')
f(14,20117,1,1,'kyo/bench/NarrowBindBench.loop$1')
f(15,20117,1,2,'kyo.bench.NarrowBindBench$$anon$1')
f(9,20118,191,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,20118,191,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,20118,191,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c3ee58.apply')
f(12,20118,191,1,'kyo/bench/Bench.$anonfun$1')
f(13,20118,191,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,20118,191,1,'kyo/bench/NarrowBindBench.kyoBench')
f(15,20118,2,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,20118,2,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,20118,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,20118,2,2,'kyo.bench.NarrowBindBench$$Lambda$56+0x0000000800d45690')
f(15,20120,189,2,'kyo.bench.NarrowBindBench$$anon$4')
f(1,20309,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,20309,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,20309,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,20309,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,20309,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,20309,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,20309,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,20309,1,2,'org.openjdk.jmh.runner.InfraControl')
f(8,20310,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,20310,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,20310,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,20310,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,20310,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,20310,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 576px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(36);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,279,3,'all')
f(1,0,3,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,3,3,'thread_native_entry(Thread*)')
f(3,0,3,4,'Thread::call_run()')
f(4,0,2,4,'JavaThread::thread_main_inner()')
f(5,0,2,4,'CompileBroker::compiler_thread_loop()')
f(6,0,2,4,'CompileBroker::invoke_compiler_on_method(CompileTask*)')
f(7,0,2,4,'C2Compiler::compile_method(ciEnv*, ciMethod*, int, bool, DirectiveSet*)')
f(8,0,2,4,'Compile::Compile(ciEnv*, ciMethod*, int, bool, bool, bool, bool, bool, DirectiveSet*)')
f(9,0,1,4,'Compile::Code_Gen()')
f(10,0,1,4,'PhaseChaitin::Register_Allocate()')
f(11,0,1,4,'PhaseIFG::SquareUp()')
f(9,1,1,4,'Compile::Optimize()')
f(10,1,1,4,'PhaseIdealLoop::optimize(PhaseIterGVN&, LoopOptsMode)')
f(11,1,1,4,'PhaseIdealLoop::build_and_optimize(LoopOptsMode)')
f(12,1,1,4,'PhaseIdealLoop::build_loop_late(VectorSet&, Node_List&, Node_Stack&)')
f(13,1,1,4,'PhaseIdealLoop::build_loop_late_post_work(Node*, bool)')
f(14,1,1,4,'PhaseIdealLoop::compute_lca_of_uses(Node*, Node*, bool)')
f(4,2,1,4,'VMThread::run()')
f(5,2,1,4,'VMThread::inner_execute(VM_Operation*)')
f(6,2,1,4,'VMThread::evaluate_operation(VM_Operation*)')
f(7,2,1,4,'VM_Operation::evaluate()')
f(8,2,1,4,'VM_G1CollectForAllocation::doit()')
f(9,2,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint(double)')
f(10,2,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint_helper(double)')
f(11,2,1,4,'void QuickSort::inner_sort<true, unsigned int, int (*)(unsigned int, unsigned int)>(unsigned int*, unsigned long, int (*)(unsigned int, unsigned int)) [clone .constprop.0]')
f(1,3,276,1,'java/lang/Thread.run')
f(2,3,276,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,3,276,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,3,12,1,'java/util/concurrent/FutureTask.run')
f(5,3,12,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,3,12,1,'java/util/concurrent/FutureTask.run')
f(7,3,12,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,3,12,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,3,12,1,'java/lang/reflect/Method.invoke')
f(10,3,12,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,3,12,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,3,12,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,3,12,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,3,12,1,'kyo/bench/jmh_generated/NarrowBindBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,3,12,1,'kyo/bench/Bench.forkKyo')
f(16,3,1,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,3,1,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c83220.apply')
f(18,3,1,1,'kyo/bench/Bench.$anonfun$2')
f(19,3,1,1,'kyo/concurrent/fibers$Fiber.block')
f(20,3,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(21,3,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(22,3,1,4,'MemAllocator::allocate() const')
f(23,3,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(24,3,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(25,3,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(26,3,1,4,'VMThread::execute(VM_Operation*)')
f(27,3,1,4,'VMThread::wait_until_executed(VM_Operation*)')
f(28,3,1,4,'Monitor::wait(long)')
f(16,4,11,1,'kyo/bench/Bench.runLoop$2')
f(17,4,6,1,'kyo/bench/Bench$$anon$1.apply')
f(18,4,6,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,4,6,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,4,6,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c84600.apply')
f(21,4,6,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,4,6,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,4,6,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,4,6,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,4,6,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,4,6,1,'jdk/internal/misc/Unsafe.unpark')
f(27,4,6,3,'pthread_cond_signal')
f(28,4,6,5,'entry_SYSCALL_64_after_hwframe')
f(29,4,6,5,'do_syscall_64')
f(30,4,6,5,'__x64_sys_futex')
f(31,4,6,5,'do_futex')
f(32,5,1,5,'__raw_callee_save___pv_queued_spin_unlock')
f(32,6,4,5,'futex_wake')
f(33,6,4,5,'wake_up_q')
f(34,6,4,5,'_raw_spin_unlock_irqrestore')
f(17,10,5,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,10,5,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,10,5,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,10,5,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,10,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,10,5,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,10,5,1,'java/util/concurrent/locks/LockSupport.park',1,0,0)
f(24,10,1,2,'java/util/concurrent/locks/LockSupport.setBlocker',1,0,0)
f(24,11,4,1,'jdk/internal/misc/Unsafe.park')
f(25,11,1,4,'AccessInternal::PostRuntimeDispatch<G1BarrierSet::AccessBarrier<548964ul, G1BarrierSet>, (AccessInternal::BarrierType)2, 548964ul>::oop_access_barrier(void*)')
f(25,12,3,3,'[unknown]')
f(26,12,2,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,12,2,5,'entry_SYSCALL_64_after_hwframe')
f(28,12,2,5,'do_syscall_64')
f(29,12,1,5,'__x64_sys_futex')
f(30,12,1,5,'do_futex')
f(31,12,1,5,'futex_wait')
f(32,12,1,5,'futex_wait_queue_me')
f(33,12,1,5,'schedule')
f(34,12,1,5,'__schedule')
f(35,12,1,5,'finish_task_switch.isra.0')
f(29,13,1,5,'syscall_enter_from_user_mode')
f(26,14,1,3,'pthread_cond_wait')
f(4,15,264,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d1fd98.run')
f(5,15,264,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,15,264,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,15,65,2,'kyo/concurrent/scheduler/IOTask.run',57,0,0)
f(8,19,5,2,'kyo/concurrent/scheduler/IOTask.curr_$eq',5,0,0)
f(8,24,56,2,'kyo/concurrent/scheduler/IOTask.eval',48,0,0)
f(9,70,2,2,'kyo/bench/NarrowBindBench$$anon$2.apply',2,0,0)
f(10,70,2,2,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1',2,0,0)
f(11,70,2,2,'kyo/bench/NarrowBindBench$$Lambda$57.0x0000000800d48000.apply',2,0,0)
f(12,70,2,2,'kyo/bench/NarrowBindBench.$anonfun$adapted$1',2,0,0)
f(13,70,2,2,'kyo/bench/NarrowBindBench.$anonfun$1',2,0,0)
f(14,70,2,2,'kyo/bench/NarrowBindBench.loop$1',2,0,0)
f(15,71,1,2,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1',1,0,0)
f(9,72,8,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,72,8,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,72,8,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,72,8,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,72,8,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,72,8,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,72,8,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,72,8,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,72,8,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,72,8,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,72,8,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,72,8,1,'jdk/internal/misc/Unsafe.unpark')
f(21,72,8,3,'pthread_cond_signal')
f(22,72,8,5,'entry_SYSCALL_64_after_hwframe')
f(23,72,8,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,7,5,'wake_up_q')
f(28,73,7,5,'_raw_spin_unlock_irqrestore')
f(7,80,189,2,'kyo/concurrent/scheduler/Queue.poll',187,0,0)
f(8,80,3,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',3,0,0)
f(9,81,2,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',2,0,0)
f(10,81,2,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47ca0.<init>',2,0,0)
f(8,83,186,2,'kyo/concurrent/scheduler/Queue.modify',184,0,0)
f(9,115,154,2,'kyo/concurrent/scheduler/Queue$$Lambda$55.0x0000000800d47ca0.apply',152,0,0)
f(10,115,154,2,'kyo/concurrent/scheduler/Queue.poll$$anonfun$1',152,0,0)
f(11,130,10,2,'kyo/concurrent/scheduler/Queue.isEmpty',10,0,0)
f(12,130,10,2,'kyo/concurrent/scheduler/Queue.items',10,0,0)
f(11,140,129,2,'scala/collection/mutable/PriorityQueue.dequeue',127,0,0)
f(12,257,2,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(13,257,2,4,'AccessInternal::PostRuntimeDispatch<G1BarrierSet::AccessBarrier<598116ul, G1BarrierSet>, (AccessInternal::BarrierType)2, 598116ul>::oop_access_barrier(void*)')
f(14,257,2,4,'G1BarrierSet::enqueue(oopDesc*)')
f(12,259,7,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_array',7,0,0)
f(13,259,7,2,'scala/collection/mutable/ArrayBuffer.array',7,0,0)
f(12,266,3,2,'scala/collection/mutable/PriorityQueue.fixDown',3,0,0)
f(7,269,10,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,269,10,1,'kyo/concurrent/scheduler/Worker.park')
f(9,269,10,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,269,10,1,'jdk/internal/misc/Unsafe.park')
f(11,269,3,3,'Unsafe_Park')
f(12,269,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,269,1,5,'entry_SYSCALL_64_after_hwframe')
f(14,269,1,5,'do_syscall_64')
f(15,269,1,5,'__x64_sys_futex')
f(16,269,1,5,'do_futex')
f(17,269,1,5,'futex_wake')
f(12,270,2,4,'Parker::park(bool, long)')
f(11,272,7,3,'[unknown]')
f(12,272,7,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,273,6,5,'entry_SYSCALL_64_after_hwframe')
f(14,273,6,5,'do_syscall_64')
f(15,273,5,5,'__x64_sys_futex')
f(16,273,5,5,'do_futex')
f(17,273,5,5,'futex_wait')
f(18,273,5,5,'futex_wait_queue_me')
f(19,273,5,5,'schedule')
f(20,273,5,5,'__schedule')
f(21,273,5,5,'finish_task_switch.isra.0')
f(15,278,1,5,'syscall_exit_to_user_mode')
f(16,278,1,5,'exit_to_user_mode_prepare')
f(17,278,1,5,'exit_to_user_mode_loop')
f(18,278,1,5,'__rseq_handle_notify_resume')
f(19,278,1,5,'rseq_ip_fixup')
f(20,278,1,5,'rseq_get_rseq_cs.isra.0')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 400px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(25);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,18866,3,'all')
f(1,0,18861,1,'java/lang/Thread.run')
f(2,0,18861,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,18861,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,18861,1,'java/util/concurrent/FutureTask.run')
f(5,0,18861,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,18861,1,'java/util/concurrent/FutureTask.run')
f(7,0,18861,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,18861,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,18861,1,'java/lang/reflect/Method.invoke')
f(10,0,18861,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,18861,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,18861,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,18861,1,'kyo/bench/jmh_generated/NarrowBindBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,18861,1,'kyo/bench/jmh_generated/NarrowBindBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,18861,1,'kyo/bench/Bench.syncKyo')
f(16,0,18859,1,'kyo/bench/Bench.runLoop$1')
f(17,0,18858,1,'kyo/bench/NarrowBindBench$$anon$2.apply')
f(18,0,18858,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(19,0,18858,1,'kyo/bench/NarrowBindBench$$Lambda$40.0x0000000800cd38c0.apply')
f(20,0,18858,1,'kyo/bench/NarrowBindBench.$anonfun$adapted$1')
f(21,0,18858,1,'kyo/bench/NarrowBindBench.$anonfun$1')
f(22,0,18858,1,'kyo/bench/NarrowBindBench.loop$1')
f(23,0,9422,2,'kyo.bench.NarrowBindBench$$anon$1')
f(23,9422,1,2,'kyo.bench.NarrowBindBench$$anon$3')
f(23,9423,9435,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(24,9423,9435,2,'kyo.bench.NarrowBindBench$$anon$2')
f(17,18858,1,1,'kyo/bench/NarrowBindBench$$anon$5.apply')
f(18,18858,1,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$2')
f(19,18858,1,1,'kyo/bench/NarrowBindBench$$Lambda$37.0x0000000800c2d568.apply')
f(20,18858,1,1,'kyo/bench/NarrowBindBench.$anonfun$adapted$2')
f(21,18858,1,1,'kyo/bench/NarrowBindBench.$anonfun$2')
f(22,18858,1,1,'kyo/bench/NarrowBindBench.loop$1')
f(23,18858,1,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1')
f(24,18858,1,2,'kyo.bench.NarrowBindBench$$anon$2')
f(16,18859,2,1,'kyo/bench/NarrowBindBench.kyoBench')
f(17,18859,1,2,'kyo.bench.NarrowBindBench$$anon$4')
f(17,18860,1,1,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$2')
f(18,18860,1,2,'kyo.bench.NarrowBindBench$$anon$5')
f(1,18861,5,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,18861,5,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,18861,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,18861,5,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,18861,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,18861,5,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,18861,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,18861,1,2,'org.openjdk.jmh.runner.InfraControl')
f(8,18862,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,18862,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,18862,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,18862,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,18862,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,18862,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(7,18865,1,1,'org/openjdk/jmh/runner/ForkedRunner$1.accept')
f(8,18865,1,1,'org/openjdk/jmh/runner/link/BinaryLinkClient.pushResults')
f(9,18865,1,1,'java/lang/ClassLoader.loadClass')
f(10,18865,1,1,'jdk/internal/loader/ClassLoaders$AppClassLoader.loadClass')
f(11,18865,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClass')
f(12,18865,1,1,'jdk/internal/loader/BuiltinClassLoader.loadClassOrNull')
f(13,18865,1,1,'jdk/internal/loader/BuiltinClassLoader.findClassOnClassPathOrNull')
f(14,18865,1,1,'jdk/internal/loader/URLClassPath.getResource')
f(15,18865,1,1,'jdk/internal/loader/URLClassPath$JarLoader.getResource')
f(16,18865,1,1,'java/util/jar/JarFile.getJarEntry')
f(17,18865,1,1,'java/util/jar/JarFile.getEntry')
f(18,18865,1,1,'java/util/zip/ZipFile.getEntry')
f(19,18865,1,1,'java/util/zip/ZipFile$Source.getEntryPos')
f(20,18865,1,1,'java/util/zip/ZipCoder$UTF8ZipCoder.toString')
f(21,18865,1,1,'java/lang/System$2.newStringUTF8NoRepl')
f(22,18865,1,1,'java/lang/String.newStringUTF8NoRepl')
f(23,18865,1,1,'java/util/Arrays.copyOfRange')
f(24,18865,1,2,'byte[]')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 496px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(31);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,298,3,'all')
f(1,0,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(2,0,1,3,'thread_native_entry(Thread*)')
f(3,0,1,4,'Thread::call_run()')
f(4,0,1,4,'VMThread::run()')
f(5,0,1,4,'VMThread::inner_execute(VM_Operation*)')
f(6,0,1,4,'VMThread::evaluate_operation(VM_Operation*)')
f(7,0,1,4,'VM_Operation::evaluate()')
f(8,0,1,4,'VM_G1CollectForAllocation::doit()')
f(9,0,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint(double)')
f(10,0,1,4,'G1CollectedHeap::do_collection_pause_at_safepoint_helper(double)')
f(11,0,1,4,'G1CollectedHeap::post_evacuate_collection_set(G1EvacuationInfo&, G1RedirtyCardsQueueSet*, G1ParScanThreadStateSet*)')
f(12,0,1,4,'HeapRegionManager::rebuild_free_list(WorkGang*)')
f(13,0,1,4,'WorkGang::run_task(AbstractGangTask*, unsigned int, bool)')
f(14,0,1,3,'sem_post')
f(15,0,1,5,'entry_SYSCALL_64_after_hwframe')
f(16,0,1,5,'do_syscall_64')
f(17,0,1,5,'__x64_sys_futex')
f(18,0,1,5,'do_futex')
f(19,0,1,5,'futex_wake')
f(20,0,1,5,'wake_up_q')
f(21,0,1,5,'_raw_spin_unlock_irqrestore')
f(1,1,297,1,'java/lang/Thread.run')
f(2,1,297,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,1,297,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,1,297,1,'java/util/concurrent/FutureTask.run')
f(5,1,297,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,1,297,1,'java/util/concurrent/FutureTask.run')
f(7,1,297,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,1,297,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,1,297,1,'java/lang/reflect/Method.invoke')
f(10,1,297,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,1,297,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,1,297,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,1,297,1,'kyo/bench/jmh_generated/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,186,2,'kyo/bench/Bench.runLoop$1',185,0,0)
f(17,127,54,2,'kyo/bench/NarrowBindBench$$anon$2.apply',53,0,0)
f(18,135,7,2,'kyo/bench/NarrowBindBench$$anon$1.apply',7,0,0)
f(18,142,39,2,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$1',38,0,0)
f(19,142,21,2,'kyo/bench/NarrowBindBench$$Lambda$40.0x0000000800cd38c0.apply',20,0,0)
f(20,142,21,2,'kyo/bench/NarrowBindBench.$anonfun$adapted$1',20,0,0)
f(21,142,21,2,'kyo/bench/NarrowBindBench.$anonfun$1',20,0,0)
f(22,142,21,2,'kyo/bench/NarrowBindBench.loop$1',20,0,0)
f(23,142,21,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',20,0,0)
f(24,147,16,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',15,0,0)
f(25,162,1,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(26,162,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(27,162,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(28,162,1,4,'MemAllocator::allocate() const')
f(29,162,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(30,162,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(19,163,18,2,'scala/runtime/BoxesRunTime.unboxToInt',18,0,0)
f(17,181,6,2,'kyo/locals$Locals$State$.empty',6,0,0)
f(16,187,111,2,'kyo/bench/NarrowBindBench.kyoBench',111,0,0)
f(17,187,24,2,'java/lang/invoke/Invokers$Holder.linkToTargetMethod',24,0,0)
f(18,187,24,2,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial',24,0,0)
f(17,211,87,2,'kyo/bench/NarrowBindBench.kyo$bench$NarrowBindBench$$_$transformLoop$2',87,0,0)
f(18,211,87,2,'kyo/bench/NarrowBindBench$$anon$5.<init>',87,0,0)
f(19,270,28,2,'kyo/core$internal$KyoCont.<init>',28,0,0)
f(20,276,3,2,'kyo/ios$KyoIO.effect',3,0,0)
f(20,279,19,2,'kyo/ios$KyoIO.value',19,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,13176,3,'all')
f(1,0,13173,1,'java/lang/Thread.run')
f(2,0,13173,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,13173,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,953,1,'java/util/concurrent/FutureTask.run')
f(5,0,953,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,953,1,'java/util/concurrent/FutureTask.run')
f(7,0,953,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,953,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,953,1,'java/lang/reflect/Method.invoke')
f(10,0,953,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,953,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,953,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,953,1,'kyo/bench/jmh_generated/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,952,1,'kyo/bench/jmh_generated/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,952,1,'kyo/bench/Bench.forkKyo')
f(16,0,89,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,89,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,89,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,89,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c80820')
f(16,89,111,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,89,111,2,'kyo.bench.Bench$$anon$1')
f(16,200,608,1,'kyo/bench/Bench.runLoop$2')
f(17,200,293,1,'kyo/bench/Bench$$anon$1.apply')
f(18,200,92,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,200,92,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c85ba8.apply')
f(20,200,92,1,'kyo/bench/Bench.$anonfun$2')
f(21,200,92,1,'kyo/concurrent/fibers$Fiber.block')
f(22,200,92,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,292,201,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,292,201,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,292,201,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c81f78.apply')
f(21,292,201,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,292,201,2,'kyo.concurrent.scheduler.IOTask')
f(17,493,315,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,493,315,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,493,315,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,493,315,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,493,111,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,493,111,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,493,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(23,496,108,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.tryInitializeHead')
f(24,496,108,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$ExclusiveNode')
f(21,604,73,2,'kyo.concurrent.scheduler.IOPromise$$anon$1')
f(21,677,131,1,'kyo/concurrent/scheduler/IOPromise.loop$5')
f(22,677,131,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(23,677,131,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(16,808,144,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,808,144,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,808,144,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,808,144,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,808,144,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c81f78')
f(14,952,1,1,'org/openjdk/jmh/results/BenchmarkTaskResult.add')
f(15,952,1,1,'java/util/ArrayList.add')
f(16,952,1,1,'java/util/ArrayList.add')
f(17,952,1,1,'java/util/ArrayList.grow')
f(18,952,1,1,'java/util/ArrayList.grow')
f(19,952,1,2,'java.lang.Object[]')
f(4,953,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d1e478.run')
f(5,953,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,953,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,953,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,953,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,953,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,953,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,953,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,964,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d1e6a0.run')
f(5,964,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,964,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,964,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,964,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,964,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,964,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$70+0x0000000800d4d180')
f(4,975,12198,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d22b68.run')
f(5,975,12198,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,975,12198,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,975,12198,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,975,12198,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,975,12062,1,'kyo/bench/NarrowBindMapBench$$anon$12.apply')
f(10,975,12062,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11')
f(11,975,12062,1,'kyo/bench/NarrowBindMapBench$$Lambda$67.0x0000000800d4c830.apply')
f(12,975,12062,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$11')
f(13,975,12062,1,'kyo/bench/NarrowBindMapBench.$anonfun$11')
f(14,975,12062,1,'kyo/bench/NarrowBindMapBench.loop$1')
f(15,975,1641,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(16,975,1641,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(17,975,1641,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(18,975,1641,2,'kyo.bench.NarrowBindMapBench$$Lambda$67+0x0000000800d4c830')
f(15,2616,31,2,'kyo.bench.NarrowBindMapBench$$anon$1')
f(15,2647,1411,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(16,2647,1411,2,'kyo.bench.NarrowBindMapBench$$anon$2')
f(15,4058,594,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$transformLoop$2')
f(16,4058,594,2,'kyo.bench.NarrowBindMapBench$$anon$3')
f(15,4652,1258,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$transformLoop$3')
f(16,4652,1258,2,'kyo.bench.NarrowBindMapBench$$anon$4')
f(15,5910,682,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$transformLoop$4')
f(16,5910,682,2,'kyo.bench.NarrowBindMapBench$$anon$5')
f(15,6592,1474,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$transformLoop$5')
f(16,6592,1474,2,'kyo.bench.NarrowBindMapBench$$anon$6')
f(15,8066,576,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$transformLoop$6')
f(16,8066,576,2,'kyo.bench.NarrowBindMapBench$$anon$7')
f(15,8642,1562,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$transformLoop$7')
f(16,8642,1562,2,'kyo.bench.NarrowBindMapBench$$anon$8')
f(15,10204,556,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$transformLoop$8')
f(16,10204,556,2,'kyo.bench.NarrowBindMapBench$$anon$9')
f(15,10760,1765,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$transformLoop$9')
f(16,10760,1765,2,'kyo.bench.NarrowBindMapBench$$anon$10')
f(15,12525,187,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$transformLoop$10')
f(16,12525,187,2,'kyo.bench.NarrowBindMapBench$$anon$11')
f(15,12712,325,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11')
f(16,12712,325,2,'kyo.bench.NarrowBindMapBench$$anon$12')
f(9,13037,136,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,13037,136,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,13037,136,1,'kyo/bench/Bench$$Lambda$37.0x0000000800c80820.apply')
f(12,13037,136,1,'kyo/bench/Bench.$anonfun$1')
f(13,13037,136,1,'kyo/bench/Bench.kyoBenchFiber')
f(14,13037,136,1,'kyo/bench/NarrowBindMapBench.kyoBench')
f(15,13037,136,2,'kyo.bench.NarrowBindMapBench$$anon$14')
f(1,13173,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,13173,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,13173,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,13173,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,13173,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,13173,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,13173,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,13173,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,13173,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,13173,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,13173,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,13173,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,13173,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 576px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(36);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,293,3,'all')
f(1,0,293,1,'java/lang/Thread.run')
f(2,0,293,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,293,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,2,1,'java/util/concurrent/FutureTask.run')
f(5,0,2,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,2,1,'java/util/concurrent/FutureTask.run')
f(7,0,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,2,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,2,1,'java/lang/reflect/Method.invoke')
f(10,0,2,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,2,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,2,1,'kyo/bench/jmh_generated/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,2,1,'kyo/bench/jmh_generated/NarrowBindMapBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,2,1,'kyo/bench/Bench.forkKyo')
f(16,0,2,1,'kyo/bench/Bench.runLoop$2')
f(17,0,1,1,'kyo/bench/Bench$$anon$1.apply')
f(18,0,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,0,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,0,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c81f78.apply')
f(21,0,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,0,1,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,0,1,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,0,1,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,0,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(26,0,1,1,'jdk/internal/misc/Unsafe.unpark')
f(27,0,1,3,'pthread_cond_signal')
f(28,0,1,5,'entry_SYSCALL_64_after_hwframe')
f(29,0,1,5,'do_syscall_64')
f(30,0,1,5,'__x64_sys_futex')
f(31,0,1,5,'do_futex')
f(32,0,1,5,'futex_wake')
f(33,0,1,5,'wake_up_q')
f(34,0,1,5,'_raw_spin_unlock_irqrestore')
f(17,1,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,1,1,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,1,1,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,1,1,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,1,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,1,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,1,1,1,'java/util/concurrent/locks/LockSupport.park')
f(24,1,1,1,'jdk/internal/misc/Unsafe.park')
f(25,1,1,3,'[unknown]')
f(26,1,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,1,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,1,1,5,'do_syscall_64')
f(29,1,1,5,'__x64_sys_futex')
f(30,1,1,5,'do_futex')
f(31,1,1,5,'futex_wait')
f(32,1,1,5,'futex_wait_queue_me')
f(33,1,1,5,'schedule')
f(34,1,1,5,'__schedule')
f(35,1,1,5,'finish_task_switch.isra.0')
f(4,2,291,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d22b68.run')
f(5,2,291,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,2,291,1,'kyo/concurrent/scheduler/Worker.runWorker',0,0,1)
f(7,3,283,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,3,283,1,'kyo/concurrent/scheduler/IOTask.eval',11,0,0)
f(9,13,271,1,'kyo/bench/NarrowBindMapBench$$anon$12.apply')
f(10,13,271,2,'kyo/bench/NarrowBindMapBench$$anon$11.apply',269,0,0)
f(11,13,271,2,'kyo/bench/NarrowBindMapBench$$anon$10.apply',269,0,0)
f(12,15,269,2,'kyo/bench/NarrowBindMapBench$$anon$9.apply',267,0,0)
f(13,16,268,2,'kyo/bench/NarrowBindMapBench$$anon$8.apply',266,0,0)
f(14,16,268,2,'kyo/bench/NarrowBindMapBench$$anon$7.apply',266,0,0)
f(15,16,268,2,'kyo/bench/NarrowBindMapBench$$anon$6.apply',266,0,0)
f(16,17,267,2,'kyo/bench/NarrowBindMapBench$$anon$5.apply',265,0,0)
f(17,18,261,2,'kyo/bench/NarrowBindMapBench$$anon$4.apply',259,0,0)
f(18,21,209,2,'kyo/bench/NarrowBindMapBench$$anon$3.apply',207,0,0)
f(19,49,1,5,'asm_sysvec_hyperv_stimer0')
f(20,49,1,5,'sysvec_hyperv_stimer0')
f(21,49,1,5,'irq_exit_rcu')
f(22,49,1,5,'__irq_exit_rcu')
f(23,49,1,5,'__softirqentry_text_start')
f(19,50,136,2,'kyo/bench/NarrowBindMapBench$$anon$2.apply',134,0,0)
f(20,153,2,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(21,153,2,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(22,153,2,4,'MemAllocator::allocate() const')
f(23,154,1,4,'MemAllocator::allocate_inside_tlab_slow(MemAllocator::Allocation&) const')
f(24,154,1,4,'G1CollectedHeap::allocate_new_tlab(unsigned long, unsigned long, unsigned long*)')
f(25,154,1,4,'G1CollectedHeap::attempt_allocation_slow(unsigned long)')
f(26,154,1,4,'MutatorAllocRegion::retire(bool)')
f(27,154,1,4,'G1CollectedHeap::capacity() const')
f(20,155,23,2,'kyo/bench/NarrowBindMapBench$$anon$1.apply',23,0,0)
f(21,173,5,2,'kyo/bench/NarrowBindMapBench$$anon$1.apply',5,0,0)
f(22,177,1,2,'scala/runtime/BoxesRunTime.boxToInteger',1,0,0)
f(20,178,8,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1',8,0,0)
f(21,180,6,2,'kyo/bench/NarrowBindMapBench$$Lambda$57.0x0000000800d49bd0.apply',6,0,0)
f(22,181,5,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$1',5,0,0)
f(19,186,44,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$transformLoop$2',44,0,0)
f(20,213,3,2,'kyo/bench/NarrowBindMapBench$$Lambda$58.0x0000000800d4a628.apply',3,0,0)
f(20,216,8,2,'scala/runtime/BoxesRunTime.boxToInteger',8,0,0)
f(20,224,6,2,'scala/runtime/BoxesRunTime.unboxToInt',6,0,0)
f(18,230,49,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$transformLoop$3',49,0,0)
f(19,274,5,2,'kyo/bench/NarrowBindMapBench$$Lambda$59.0x0000000800d4a9f0.apply',5,0,0)
f(20,274,5,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$3',5,0,0)
f(21,274,4,2,'kyo/bench/NarrowBindMapBench.$anonfun$3',4,0,0)
f(22,276,2,2,'scala/runtime/BoxesRunTime.boxToInteger',2,0,0)
f(21,278,1,2,'scala/runtime/BoxesRunTime.unboxToInt',1,0,0)
f(17,279,5,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$transformLoop$4',5,0,0)
f(18,279,4,2,'kyo/bench/NarrowBindMapBench$$Lambda$60.0x0000000800d4adb8.apply',4,0,0)
f(19,279,4,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$4',4,0,0)
f(20,279,4,2,'scala/runtime/BoxesRunTime.unboxToInt',4,0,0)
f(18,283,1,2,'scala/runtime/BoxesRunTime.unboxToInt',1,0,0)
f(9,284,1,2,'kyo/concurrent/scheduler/IOTask$.kyo$concurrent$scheduler$IOTask$$$avoidUnstableIf',1,0,0)
f(9,285,1,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,285,1,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,285,1,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,285,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,285,1,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,285,1,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,285,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(16,285,1,1,'kyo/concurrent/scheduler/IOPromise$$anon$1.apply')
f(17,285,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.releaseShared')
f(18,285,1,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.signalNext')
f(19,285,1,1,'java/util/concurrent/locks/LockSupport.unpark')
f(20,285,1,1,'jdk/internal/misc/Unsafe.unpark')
f(21,285,1,3,'pthread_cond_signal')
f(22,285,1,5,'entry_SYSCALL_64_after_hwframe')
f(23,285,1,5,'do_syscall_64')
f(24,285,1,5,'__x64_sys_futex')
f(25,285,1,5,'do_futex')
f(26,285,1,5,'futex_wake')
f(27,285,1,5,'wake_up_q')
f(28,285,1,5,'_raw_spin_unlock_irqrestore')
f(7,286,6,1,'kyo/concurrent/scheduler/Scheduler$.idle')
f(8,286,6,1,'kyo/concurrent/scheduler/Worker.park')
f(9,286,6,1,'java/util/concurrent/locks/LockSupport.parkNanos')
f(10,286,6,1,'jdk/internal/misc/Unsafe.park')
f(11,286,1,3,'Unsafe_Park')
f(11,287,5,3,'[unknown]')
f(12,287,5,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(13,287,5,5,'entry_SYSCALL_64_after_hwframe')
f(14,287,5,5,'do_syscall_64')
f(15,287,4,5,'__x64_sys_futex')
f(16,287,3,5,'do_futex')
f(17,287,3,5,'futex_wait')
f(18,287,2,5,'futex_wait_queue_me')
f(19,287,2,5,'schedule')
f(20,287,2,5,'__schedule')
f(21,287,2,5,'finish_task_switch.isra.0')
f(18,289,1,5,'hash_futex')
f(16,290,1,5,'get_timespec64')
f(17,290,1,5,'_copy_from_user')
f(15,291,1,5,'syscall_exit_to_user_mode')
f(16,291,1,5,'exit_to_user_mode_prepare')
f(17,291,1,5,'exit_to_user_mode_loop')
f(18,291,1,5,'__rseq_handle_notify_resume')
f(19,291,1,5,'__put_user_nocheck_8')
f(7,292,1,1,'kyo/concurrent/scheduler/Scheduler$.steal')
f(8,292,1,2,'kyo/concurrent/scheduler/Scheduler$.randomWorker',1,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 432px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(27);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,13697,3,'all')
f(1,0,13693,1,'java/lang/Thread.run')
f(2,0,13693,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,13693,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,13693,1,'java/util/concurrent/FutureTask.run')
f(5,0,13693,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,13693,1,'java/util/concurrent/FutureTask.run')
f(7,0,13693,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,13693,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,13693,1,'java/lang/reflect/Method.invoke')
f(10,0,13693,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,13693,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,13693,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,13693,1,'kyo/bench/jmh_generated/NarrowBindMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,0,13693,1,'kyo/bench/jmh_generated/NarrowBindMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,0,13693,1,'kyo/bench/Bench.syncKyo')
f(16,0,13693,1,'kyo/bench/Bench.runLoop$1')
f(17,0,13693,1,'kyo/bench/NarrowBindMapBench$$anon$12.apply')
f(18,0,13693,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11')
f(19,0,13693,1,'kyo/bench/NarrowBindMapBench$$Lambda$50.0x0000000800cd7440.apply')
f(20,0,13693,1,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$11')
f(21,0,13693,1,'kyo/bench/NarrowBindMapBench.$anonfun$11')
f(22,0,13693,1,'kyo/bench/NarrowBindMapBench.loop$1')
f(23,0,198,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(24,0,198,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(25,0,198,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(26,0,198,2,'kyo.bench.NarrowBindMapBench$$Lambda$50+0x0000000800cd7440')
f(23,198,817,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1')
f(24,198,817,2,'kyo.bench.NarrowBindMapBench$$anon$2')
f(23,1015,1307,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$transformLoop$2')
f(24,1015,1307,2,'kyo.bench.NarrowBindMapBench$$anon$3')
f(23,2322,1258,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$transformLoop$3')
f(24,2322,1258,2,'kyo.bench.NarrowBindMapBench$$anon$4')
f(23,3580,1257,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$transformLoop$4')
f(24,3580,1257,2,'kyo.bench.NarrowBindMapBench$$anon$5')
f(23,4837,1407,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$transformLoop$5')
f(24,4837,1407,2,'kyo.bench.NarrowBindMapBench$$anon$6')
f(23,6244,1105,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$transformLoop$6')
f(24,6244,1105,2,'kyo.bench.NarrowBindMapBench$$anon$7')
f(23,7349,1255,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$transformLoop$7')
f(24,7349,1255,2,'kyo.bench.NarrowBindMapBench$$anon$8')
f(23,8604,1082,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$transformLoop$8')
f(24,8604,1082,2,'kyo.bench.NarrowBindMapBench$$anon$9')
f(23,9686,1632,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$transformLoop$9')
f(24,9686,1632,2,'kyo.bench.NarrowBindMapBench$$anon$10')
f(23,11318,792,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$transformLoop$10')
f(24,11318,792,2,'kyo.bench.NarrowBindMapBench$$anon$11')
f(23,12110,1583,1,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$transformLoop$11')
f(24,12110,1583,2,'kyo.bench.NarrowBindMapBench$$anon$12')
f(1,13693,4,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,13693,4,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,13693,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,13693,4,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,13693,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,13693,4,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,13693,4,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,13693,1,2,'org.openjdk.jmh.runner.InfraControl')
f(8,13694,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,13694,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,13694,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,13694,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,13694,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,13694,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 592px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>CPU profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(37);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,298,3,'all')
f(1,0,1,3,'[unknown_Java]')
f(2,0,1,1,'kyo/bench/NarrowBindMapBench$$anon$12.apply')
f(1,1,297,1,'java/lang/Thread.run')
f(2,1,297,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,1,297,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,1,297,1,'java/util/concurrent/FutureTask.run')
f(5,1,297,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,1,297,1,'java/util/concurrent/FutureTask.run')
f(7,1,297,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,1,297,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,1,297,1,'java/lang/reflect/Method.invoke')
f(10,1,297,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,1,297,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,1,297,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,1,297,1,'kyo/bench/jmh_generated/NarrowBindMapBench_syncKyo_jmhTest.syncKyo_Throughput')
f(14,1,297,1,'kyo/bench/jmh_generated/NarrowBindMapBench_syncKyo_jmhTest.syncKyo_thrpt_jmhStub')
f(15,1,297,1,'kyo/bench/Bench.syncKyo')
f(16,1,297,1,'kyo/bench/Bench.runLoop$1',13,0,0)
f(17,14,284,1,'kyo/bench/NarrowBindMapBench$$anon$12.apply')
f(18,16,282,2,'kyo/bench/NarrowBindMapBench$$anon$11.apply',281,0,0)
f(19,17,281,2,'kyo/bench/NarrowBindMapBench$$anon$10.apply',280,0,0)
f(20,17,281,2,'kyo/bench/NarrowBindMapBench$$anon$9.apply',280,0,0)
f(21,18,280,2,'kyo/bench/NarrowBindMapBench$$anon$8.apply',279,0,0)
f(22,19,279,2,'kyo/bench/NarrowBindMapBench$$anon$7.apply',278,0,0)
f(23,26,272,2,'kyo/bench/NarrowBindMapBench$$anon$6.apply',271,0,0)
f(24,31,267,2,'kyo/bench/NarrowBindMapBench$$anon$5.apply',266,0,0)
f(25,49,237,2,'kyo/bench/NarrowBindMapBench$$anon$4.apply',236,0,0)
f(26,96,165,2,'kyo/bench/NarrowBindMapBench$$anon$3.apply',164,0,0)
f(27,145,45,2,'kyo/bench/NarrowBindMapBench$$anon$2.apply',44,0,0)
f(28,156,26,2,'kyo/bench/NarrowBindMapBench$$anon$1.apply',25,0,0)
f(29,166,1,5,'asm_sysvec_hyperv_stimer0')
f(30,166,1,5,'sysvec_hyperv_stimer0')
f(31,166,1,5,'irq_exit_rcu')
f(32,166,1,5,'__irq_exit_rcu')
f(33,166,1,5,'__softirqentry_text_start')
f(34,166,1,5,'run_rebalance_domains')
f(35,166,1,5,'rebalance_domains')
f(36,166,1,5,'load_balance')
f(29,167,15,2,'kyo/bench/NarrowBindMapBench$$anon$1.apply',14,0,0)
f(30,175,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(31,175,1,4,'InstanceKlass::allocate_instance(JavaThread*)')
f(32,175,1,4,'MemAllocator::allocate() const')
f(33,175,1,4,'MemAllocator::Allocation::notify_allocation_jvmti_sampler()')
f(30,176,6,2,'scala/runtime/BoxesRunTime.boxToInteger',6,0,0)
f(28,182,8,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$_$transformLoop$1',8,0,0)
f(29,188,1,2,'kyo/bench/NarrowBindMapBench$$Lambda$40.0x0000000800cd4e70.apply',1,0,0)
f(30,188,1,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$1',1,0,0)
f(29,189,1,2,'scala/runtime/BoxesRunTime.unboxToInt',1,0,0)
f(27,190,71,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$_$transformLoop$2',71,0,0)
f(28,197,64,2,'kyo/bench/NarrowBindMapBench$$Lambda$41.0x0000000800cd5238.apply',64,0,0)
f(29,197,64,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$2',64,0,0)
f(30,198,63,2,'kyo/bench/NarrowBindMapBench.$anonfun$2',63,0,0)
f(31,200,61,2,'scala/runtime/BoxesRunTime.boxToInteger',61,0,0)
f(26,261,25,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$_$transformLoop$3',25,0,0)
f(27,267,19,2,'kyo/bench/NarrowBindMapBench$$Lambda$42.0x0000000800cd5600.apply',19,0,0)
f(28,271,15,2,'kyo/bench/NarrowBindMapBench.$anonfun$adapted$3',15,0,0)
f(29,273,9,2,'kyo/bench/NarrowBindMapBench.$anonfun$3',9,0,0)
f(29,282,4,2,'scala/runtime/BoxesRunTime.unboxToInt',4,0,0)
f(25,286,12,2,'kyo/bench/NarrowBindMapBench.kyo$bench$NarrowBindMapBench$$_$_$_$_$_$_$_$_$transformLoop$4',12,0,0)
f(26,287,11,2,'scala/runtime/BoxesRunTime.unboxToInt',11,0,0)
f(27,288,10,2,'java/lang/Integer.intValue',10,0,0)
search();
</script></body></html>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<style>
body {margin: 0; padding: 10px; background-color: #ffffff}
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
header {margin: -24px 0 5px 0; line-height: 24px}
button {font: 12px sans-serif; cursor: pointer}
p {margin: 5px 0 5px 0}
a {color: #0366d6}
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: #ffffe0; outline: 1px solid #ffc000; height: 15px}
#hl span {padding: 0 3px 0 3px}
#status {overflow: hidden; white-space: nowrap}
#match {overflow: hidden; white-space: nowrap; display: none; float: right; text-align: right}
#reset {cursor: pointer}
#canvas {width: 100%; height: 544px}
</style>
</head>
<body style='font: 12px Verdana, sans-serif'>
<h1>Allocation profile</h1>
<header style='text-align: left'><button id='reverse' title='Reverse'>&#x1f53b;</button>&nbsp;&nbsp;<button id='search' title='Search'>&#x1f50d;</button></header>
<header style='text-align: right'>Produced by <a href='https://github.com/jvm-profiling-tools/async-profiler'>async-profiler</a></header>
<canvas id='canvas'></canvas>
<div id='hl'><span></span></div>
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>&#x274c;</span></p>
<p id='status'>&nbsp;</p>
<script>
// Copyright 2020 Andrei Pangin
// Licensed under the Apache License, Version 2.0.
'use strict';
var root, rootLevel, px, pattern;
var reverse = false;
const levels = Array(34);
for (let h = 0; h < levels.length; h++) {
levels[h] = [];
}
const canvas = document.getElementById('canvas');
const c = canvas.getContext('2d');
const hl = document.getElementById('hl');
const status = document.getElementById('status');
const canvasWidth = canvas.offsetWidth;
const canvasHeight = canvas.offsetHeight;
canvas.style.width = canvasWidth + 'px';
canvas.width = canvasWidth * (devicePixelRatio || 1);
canvas.height = canvasHeight * (devicePixelRatio || 1);
if (devicePixelRatio) c.scale(devicePixelRatio, devicePixelRatio);
c.font = document.body.style.font;
const palette = [
[0xb2e1b2, 20, 20, 20],
[0x50e150, 30, 30, 30],
[0x50cccc, 30, 30, 30],
[0xe15a5a, 30, 40, 40],
[0xc8c83c, 30, 30, 10],
[0xe17d00, 30, 30, 0],
[0xcce880, 20, 20, 20],
];
function getColor(p) {
const v = Math.random();
return '#' + (p[0] + ((p[1] * v) << 16 | (p[2] * v) << 8 | (p[3] * v))).toString(16);
}
function f(level, left, width, type, title, inln, c1, int) {
levels[level].push({left: left, width: width, color: getColor(palette[type]), title: title,
details: (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
});
}
function samples(n) {
return n === 1 ? '1 sample' : n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',') + ' samples';
}
function pct(a, b) {
return a >= b ? '100' : (100 * a / b).toFixed(2);
}
function findFrame(frames, x) {
let left = 0;
let right = frames.length - 1;
while (left <= right) {
const mid = (left + right) >>> 1;
const f = frames[mid];
if (f.left > x) {
right = mid - 1;
} else if (f.left + f.width <= x) {
left = mid + 1;
} else {
return f;
}
}
if (frames[left] && (frames[left].left - x) * px < 0.5) return frames[left];
if (frames[right] && (x - (frames[right].left + frames[right].width)) * px < 0.5) return frames[right];
return null;
}
function search(r) {
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
return;
}
pattern = r ? RegExp(r) : undefined;
const matched = render(root, rootLevel);
document.getElementById('matchval').textContent = pct(matched, root.width) + '%';
document.getElementById('match').style.display = r ? 'inherit' : 'none';
}
function render(newRoot, newLevel) {
if (root) {
c.fillStyle = '#ffffff';
c.fillRect(0, 0, canvasWidth, canvasHeight);
}
root = newRoot || levels[0][0];
rootLevel = newLevel || 0;
px = canvasWidth / root.width;
const x0 = root.left;
const x1 = x0 + root.width;
const marked = [];
function mark(f) {
return marked[f.left] >= f.width || (marked[f.left] = f.width);
}
function totalMarked() {
let total = 0;
let left = 0;
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
if (+x >= left) {
total += marked[x];
left = +x + marked[x];
}
});
return total;
}
function drawFrame(f, y, alpha) {
if (f.left < x1 && f.left + f.width > x0) {
c.fillStyle = pattern && f.title.match(pattern) && mark(f) ? '#ee00ee' : f.color;
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
if (f.width * px >= 21) {
const chars = Math.floor(f.width * px / 7);
const title = f.title.length <= chars ? f.title : f.title.substring(0, chars - 2) + '..';
c.fillStyle = '#000000';
c.fillText(title, Math.max(f.left - x0, 0) * px + 3, y + 12, f.width * px - 6);
}
if (alpha) {
c.fillStyle = 'rgba(255, 255, 255, 0.5)';
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
}
}
}
for (let h = 0; h < levels.length; h++) {
const y = reverse ? h * 16 : canvasHeight - (h + 1) * 16;
const frames = levels[h];
for (let i = 0; i < frames.length; i++) {
drawFrame(frames[i], y, h < rootLevel);
}
}
return totalMarked();
}
canvas.onmousemove = function() {
const h = Math.floor((reverse ? event.offsetY : (canvasHeight - event.offsetY)) / 16);
if (h >= 0 && h < levels.length) {
const f = findFrame(levels[h], event.offsetX / px + root.left);
if (f) {
if (f != root) getSelection().removeAllRanges();
hl.style.left = (Math.max(f.left - root.left, 0) * px + canvas.offsetLeft) + 'px';
hl.style.width = (Math.min(f.width, root.width) * px) + 'px';
hl.style.top = ((reverse ? h * 16 : canvasHeight - (h + 1) * 16) + canvas.offsetTop) + 'px';
hl.firstChild.textContent = f.title;
hl.style.display = 'block';
canvas.title = f.title + '\n(' + samples(f.width) + f.details + ', ' + pct(f.width, levels[0][0].width) + '%)';
canvas.style.cursor = 'pointer';
canvas.onclick = function() {
if (f != root) {
render(f, h);
canvas.onmousemove();
}
};
status.textContent = 'Function: ' + canvas.title;
return;
}
}
canvas.onmouseout();
}
canvas.onmouseout = function() {
hl.style.display = 'none';
status.textContent = '\xa0';
canvas.title = '';
canvas.style.cursor = '';
canvas.onclick = '';
}
canvas.ondblclick = function() {
getSelection().selectAllChildren(hl);
}
document.getElementById('reverse').onclick = function() {
reverse = !reverse;
render();
}
document.getElementById('search').onclick = function() {
search(true);
}
document.getElementById('reset').onclick = function() {
search(false);
}
window.onkeydown = function() {
if (event.ctrlKey && event.keyCode === 70) {
event.preventDefault();
search(true);
} else if (event.keyCode === 27) {
search(false);
}
}
f(0,0,7957,3,'all')
f(1,0,7954,1,'java/lang/Thread.run')
f(2,0,7954,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,0,7954,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,0,1131,1,'java/util/concurrent/FutureTask.run')
f(5,0,1131,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,0,1131,1,'java/util/concurrent/FutureTask.run')
f(7,0,1131,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,0,1131,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,0,1131,1,'java/lang/reflect/Method.invoke')
f(10,0,1131,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,0,1131,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,0,1131,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,0,1131,1,'kyo/bench/jmh_generated/PingPongBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,0,1131,1,'kyo/bench/jmh_generated/PingPongBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,0,1131,1,'kyo/bench/Bench.forkKyo')
f(16,0,73,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,0,73,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,0,73,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,0,73,2,'kyo.bench.Bench$$Lambda$37+0x0000000800c82620')
f(16,73,101,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(17,73,101,2,'kyo.bench.Bench$$anon$1')
f(16,174,731,1,'kyo/bench/Bench.runLoop$2')
f(17,174,463,1,'kyo/bench/Bench$$anon$1.apply')
f(18,174,195,1,'kyo/bench/Bench.kyo$bench$Bench$$_$_$transformLoop$1')
f(19,174,195,1,'kyo/bench/Bench$$Lambda$39.0x0000000800c89220.apply')
f(20,174,195,1,'kyo/bench/Bench.$anonfun$2')
f(21,174,195,1,'kyo/concurrent/fibers$Fiber.block')
f(22,174,195,2,'kyo.concurrent.fibers$Fiber$$anon$10')
f(18,369,268,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(19,369,268,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(20,369,268,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c86000.apply')
f(21,369,268,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(22,369,202,2,'kyo.concurrent.scheduler.IOTask')
f(22,571,66,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(23,571,66,1,'kyo/concurrent/scheduler/Scheduler$.submit')
f(24,571,66,1,'kyo/concurrent/scheduler/Worker.enqueue')
f(25,571,66,1,'kyo/concurrent/scheduler/Queue.offer')
f(26,571,66,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(27,571,66,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(28,571,66,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(29,571,66,2,'kyo.concurrent.scheduler.Queue$$Lambda$54+0x0000000800d4a680')
f(17,637,268,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,637,268,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,637,268,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,637,268,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,637,268,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,637,268,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,637,268,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
f(16,905,226,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(17,905,225,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(18,905,225,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(19,905,225,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(20,905,225,2,'kyo.concurrent.fibers$Fibers$$Lambda$38+0x0000000800c86000')
f(17,1130,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(18,1130,1,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(4,1131,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$49.0x0000000800d243d0.run')
f(5,1131,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$1')
f(6,1131,11,1,'kyo/concurrent/scheduler/Coordinator$.update')
f(7,1131,11,1,'java/util/concurrent/ThreadPoolExecutor.execute')
f(8,1131,11,1,'java/util/concurrent/SynchronousQueue.offer')
f(9,1131,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.transfer')
f(10,1131,11,1,'java/util/concurrent/SynchronousQueue$TransferStack.snode')
f(11,1131,11,2,'java.util.concurrent.SynchronousQueue$TransferStack$SNode')
f(4,1142,11,1,'kyo/concurrent/scheduler/Coordinator$$$Lambda$50.0x0000000800d245f8.run')
f(5,1142,11,1,'kyo/concurrent/scheduler/Coordinator$.$init$$$anonfun$2')
f(6,1142,11,1,'kyo/concurrent/scheduler/Scheduler$.cycle')
f(7,1142,11,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(8,1142,11,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(9,1142,11,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(10,1142,11,2,'kyo.concurrent.scheduler.Scheduler$$$Lambda$84+0x0000000800d5d310')
f(4,1153,6801,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d21b20.run')
f(5,1153,6801,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,1153,6801,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,1153,6323,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,1153,6323,1,'kyo/concurrent/scheduler/IOTask.eval')
f(9,1153,17,1,'kyo/bench/PingPongBench$$anon$10.apply')
f(10,1153,14,1,'kyo/bench/PingPongBench$$anon$8.apply')
f(11,1153,14,1,'kyo/concurrent/channels$Channels$$anon$21.apply')
f(12,1153,14,1,'kyo/concurrent/channels$Channels$.kyo$concurrent$channels$Channels$$$_$transformLoop$11')
f(13,1153,14,1,'kyo/concurrent/channels$Channels$$$Lambda$64.0x0000000800d51640.apply')
f(14,1153,14,1,'kyo/concurrent/channels$Channels$.$anonfun$9')
f(15,1153,14,1,'kyo/concurrent/channels$Channels$$anon$14.<init>')
f(16,1153,3,2,'org.jctools.queues.MpmcUnboundedXaddArrayQueue')
f(16,1156,11,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(17,1156,11,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.<init>')
f(18,1156,11,1,'org/jctools/queues/MpUnboundedXaddArrayQueue.<init>')
f(19,1156,6,2,'org.jctools.queues.SpscArrayQueue')
f(19,1162,4,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(20,1162,4,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.newChunk')
f(21,1162,2,2,'org.jctools.queues.MpmcUnboundedXaddChunk')
f(21,1164,2,1,'org/jctools/queues/MpmcUnboundedXaddChunk.<init>')
f(22,1164,2,1,'org/jctools/util/UnsafeLongArrayAccess.allocateLongArray')
f(23,1164,2,2,'long[]')
f(19,1166,1,1,'org/jctools/queues/SpscArrayQueue.<init>')
f(20,1166,1,1,'org/jctools/queues/SpscArrayQueueL3Pad.<init>')
f(21,1166,1,1,'org/jctools/queues/SpscArrayQueueConsumerIndexField.<init>')
f(22,1166,1,1,'org/jctools/queues/SpscArrayQueueL2Pad.<init>')
f(23,1166,1,1,'org/jctools/queues/SpscArrayQueueProducerIndexFields.<init>')
f(24,1166,1,1,'org/jctools/queues/SpscArrayQueueL1Pad.<init>')
f(25,1166,1,1,'org/jctools/queues/SpscArrayQueueColdField.<init>')
f(26,1166,1,1,'org/jctools/queues/ConcurrentCircularArrayQueue.<init>')
f(27,1166,1,1,'org/jctools/util/UnsafeRefArrayAccess.allocateRefArray')
f(28,1166,1,2,'java.lang.Object[]')
f(10,1167,3,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$9')
f(11,1167,3,1,'kyo/bench/PingPongBench$$Lambda$66.0x0000000800d521e0.apply')
f(12,1167,3,1,'kyo/bench/PingPongBench.$anonfun$13')
f(13,1167,2,1,'kyo/bench/PingPongBench.repeat$2')
f(14,1167,2,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d59000.linkToTargetMethod')
f(15,1167,2,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d58800.newInvokeSpecial')
f(16,1167,2,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(17,1167,2,2,'kyo.bench.PingPongBench$$Lambda$71+0x0000000800d558b8')
f(13,1169,1,1,'kyo/concurrent/fibers$Fibers.fork')
f(14,1169,1,1,'kyo/concurrent/fibers$Fibers.forkFiber')
f(15,1169,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(16,1169,1,2,'kyo.concurrent.fibers$Fibers$$anon$33')
f(9,1170,3,1,'kyo/bench/PingPongBench$$anon$13.apply')
f(10,1170,2,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$12')
f(11,1170,2,1,'kyo/bench/PingPongBench$$Lambda$58.0x0000000800d4e278.apply')
f(12,1170,2,1,'kyo/bench/PingPongBench.$anonfun$18')
f(13,1170,2,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$11')
f(14,1170,2,2,'kyo.bench.PingPongBench$$anon$12')
f(10,1172,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,1172,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,1172,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c86000.apply')
f(13,1172,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,1172,1,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(9,1173,634,1,'kyo/bench/PingPongBench$$anon$6.apply')
f(10,1173,245,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$5')
f(11,1173,245,2,'kyo.bench.PingPongBench$$anon$6')
f(10,1418,389,1,'kyo/concurrent/channels$Channels$Blocking$$anon$2.apply')
f(11,1418,254,1,'kyo/concurrent/channels$$anon$16.apply')
f(12,1418,254,1,'kyo/concurrent/channels$$anon$16.apply')
f(13,1418,254,1,'kyo/concurrent/fibers$Fibers.unsafePromise')
f(14,1418,125,2,'kyo.concurrent.fibers$Fiber$Promise')
f(14,1543,129,2,'kyo.concurrent.scheduler.IOPromise')
f(11,1672,135,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2')
f(12,1672,135,1,'kyo/concurrent/channels$Channels$Blocking$$Lambda$73.0x0000000800d56050.apply')
f(13,1672,135,1,'kyo/concurrent/channels$Channels$Blocking.$anonfun$2')
f(14,1672,135,1,'kyo/concurrent/fibers$Fiber.join')
f(15,1672,135,1,'kyo/concurrent/fibers$Fibers.get')
f(16,1672,135,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(17,1672,135,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(9,1807,1016,1,'kyo/bench/PingPongBench$$anon$7.apply')
f(10,1807,611,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$_$transformLoop$6')
f(11,1807,611,1,'kyo/bench/PingPongBench$$Lambda$68.0x0000000800d54e58.apply')
f(12,1807,611,1,'kyo/bench/PingPongBench.$anonfun$7')
f(13,1807,160,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(14,1807,160,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(15,1807,160,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(16,1807,160,2,'kyo.bench.PingPongBench$$Lambda$74+0x0000000800d56420')
f(13,1967,167,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$5')
f(14,1967,167,2,'kyo.bench.PingPongBench$$anon$6')
f(13,2134,284,1,'kyo/concurrent/channels$Channels$$anon$14.take')
f(14,2134,284,1,'kyo/concurrent/channels$Channels$Blocking.take$')
f(15,2134,284,1,'kyo/concurrent/channels$Channels$Blocking.take')
f(16,2134,120,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(17,2134,120,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(18,2134,120,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(19,2134,120,2,'kyo.concurrent.channels$Channels$Blocking$$Lambda$73+0x0000000800d56050')
f(16,2254,164,1,'kyo/concurrent/channels$Channels$Blocking.kyo$concurrent$channels$Channels$Blocking$$_$transformLoop$2')
f(17,2254,164,2,'kyo.concurrent.channels$Channels$Blocking$$anon$2')
f(10,2418,405,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(11,2418,405,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(12,2418,405,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c86000.apply')
f(13,2418,405,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(14,2418,104,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(14,2522,227,2,'kyo.concurrent.scheduler.IOTask')
f(14,2749,74,1,'kyo/concurrent/fibers$Fiber$.promise')
f(15,2749,74,2,'kyo.concurrent.fibers$Fiber')
f(9,2823,1083,1,'kyo/bench/PingPongBench$$anon$9.apply')
f(10,2823,942,1,'kyo/bench/PingPongBench$$anon$1.apply')
f(11,2823,202,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$1')
f(12,2823,202,2,'kyo.bench.PingPongBench$$anon$1')
f(11,3025,740,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(12,3025,610,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(13,3025,610,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(14,3025,610,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c86000.apply')
f(15,3025,610,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(16,3025,66,2,'kyo.concurrent.fibers$Fibers$$anon$32')
f(16,3091,328,2,'kyo.concurrent.scheduler.IOTask')
f(16,3419,108,1,'kyo/concurrent/fibers$Fiber$.promise')
f(17,3419,108,2,'kyo.concurrent.fibers$Fiber')
f(16,3527,108,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(17,3527,108,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(18,3527,108,1,'kyo/concurrent/scheduler/Queue.offer')
f(19,3527,108,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,3527,108,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,3527,108,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,3527,108,2,'kyo.concurrent.scheduler.Queue$$Lambda$54+0x0000000800d4a680')
f(12,3635,130,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3')
f(13,3635,130,1,'kyo/concurrent/fibers$Fibers$$Lambda$70.0x0000000800d554e8.apply')
f(14,3635,130,1,'kyo/concurrent/fibers$Fibers.$anonfun$5')
f(15,3635,130,1,'kyo/concurrent/fibers$Fiber.join')
f(16,3635,130,1,'kyo/concurrent/fibers$Fibers.get')
f(17,3635,130,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$suspendLoop$1')
f(18,3635,130,2,'kyo.concurrent.fibers$Fibers$$anon$30')
f(10,3765,140,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$8')
f(11,3765,140,2,'kyo.bench.PingPongBench$$anon$9')
f(10,3905,1,1,'kyo/concurrent/fibers$Fibers$$anon$34.apply')
f(11,3905,1,1,'kyo/concurrent/fibers$Fibers$$anon$33.apply')
f(12,3905,1,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2')
f(13,3905,1,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c86000.apply')
f(14,3905,1,1,'kyo/concurrent/fibers$Fibers.$anonfun$4')
f(15,3905,1,1,'kyo/concurrent/fibers$Fiber$.promise')
f(16,3905,1,2,'kyo.concurrent.fibers$Fiber')
f(9,3906,1241,1,'kyo/concurrent/channels$$anon$17.apply')
f(10,3906,1241,1,'kyo/concurrent/channels$$anon$17.apply')
f(11,3906,1241,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(12,3906,1174,1,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete')
f(13,3906,1174,1,'kyo/concurrent/fibers$Fiber$Promise.loop$23')
f(14,3906,1174,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(15,3906,1174,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(16,3906,1174,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(17,3906,1174,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(18,3906,1174,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(19,3906,1174,1,'scala/runtime/function/JProcedure1.apply')
f(20,3906,1174,1,'scala/runtime/function/JProcedure1.apply')
f(21,3906,1174,1,'kyo/concurrent/scheduler/IOTask$$Lambda$63.0x0000000800d45408.applyVoid')
f(22,3906,1174,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(23,3906,144,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(24,3906,144,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(25,3906,144,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(26,3906,144,2,'kyo.concurrent.scheduler.IOTask$$Lambda$79+0x0000000800d5c3c8')
f(23,4050,258,2,'kyo.concurrent.scheduler.IOTask')
f(23,4308,216,1,'kyo/concurrent/scheduler/IOPromise.become')
f(24,4308,216,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(25,4308,88,1,'kyo/concurrent/scheduler/IOPromise$Linked$.apply')
f(26,4308,88,2,'kyo.concurrent.scheduler.IOPromise$Linked')
f(25,4396,128,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(26,4396,128,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(27,4396,128,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(28,4396,128,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(23,4524,414,1,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1')
f(24,4524,414,1,'kyo/concurrent/scheduler/IOTask$$Lambda$79.0x0000000800d5c3c8.apply')
f(25,4524,414,1,'kyo/concurrent/scheduler/IOTask.$anonfun$1')
f(26,4524,414,1,'kyo/bench/PingPongBench$$anon$6.apply')
f(27,4524,414,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$5')
f(28,4524,414,1,'kyo/bench/PingPongBench$$Lambda$74.0x0000000800d56420.apply')
f(29,4524,414,1,'kyo/bench/PingPongBench.$anonfun$8')
f(30,4524,131,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(31,4524,131,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(32,4524,131,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(33,4524,131,2,'kyo.bench.PingPongBench$$Lambda$77+0x0000000800d57468')
f(30,4655,95,2,'kyo.bench.PingPongBench$$anon$2')
f(30,4750,188,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$4')
f(31,4750,188,2,'kyo.bench.PingPongBench$$anon$5')
f(23,4938,142,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(24,4938,142,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(25,4938,142,1,'kyo/concurrent/scheduler/Queue.offer')
f(26,4938,142,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(27,4938,142,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(28,4938,142,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(29,4938,142,2,'kyo.concurrent.scheduler.Queue$$Lambda$54+0x0000000800d4a680')
f(12,5080,67,1,'kyo/concurrent/queues$$anon$12.poll')
f(13,5080,67,1,'scala/Option$.apply')
f(14,5080,67,2,'scala.Some')
f(9,5147,132,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,5147,132,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(11,5147,1,1,'kyo/bench/PingPongBench$$Lambda$57.0x0000000800d4dfb8.apply')
f(12,5147,1,1,'kyo/bench/PingPongBench.$anonfun$17')
f(13,5147,1,1,'kyo/bench/PingPongBench.iterate$2')
f(14,5147,1,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$10')
f(15,5147,1,2,'kyo.bench.PingPongBench$$anon$11')
f(11,5148,131,1,'kyo/bench/PingPongBench$$Lambda$67.0x0000000800d54b98.apply')
f(12,5148,131,1,'kyo/bench/PingPongBench.$anonfun$6')
f(13,5148,131,1,'kyo/concurrent/channels$Channels$$anon$14.offer')
f(14,5148,131,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$_$transformLoop$9')
f(15,5148,131,1,'kyo/concurrent/channels$Channels$$anon$14$$Lambda$75.0x0000000800d567f0.apply')
f(16,5148,131,1,'kyo/concurrent/channels$Channels$$anon$14.$anonfun$10')
f(17,5148,131,2,'kyo.concurrent.channels$$anon$17')
f(9,5279,411,1,'kyo/concurrent/scheduler/IOTask.loop$2')
f(10,5279,164,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,5279,164,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,5279,164,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,5279,164,2,'kyo.concurrent.scheduler.IOTask$$Lambda$62+0x0000000800d45000')
f(10,5443,247,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,5443,247,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(9,5690,552,1,'kyo/concurrent/scheduler/IOTask.loop$5')
f(10,5690,282,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(11,5690,282,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(12,5690,282,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(13,5690,282,2,'kyo.concurrent.scheduler.IOTask$$Lambda$63+0x0000000800d45408')
f(10,5972,270,1,'kyo/concurrent/scheduler/IOPromise$Pending.add')
f(11,5972,270,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$3')
f(9,6242,1234,1,'kyo/concurrent/scheduler/IOTask.loop$8')
f(10,6242,1234,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete')
f(11,6242,1234,1,'kyo/concurrent/scheduler/IOPromise.complete')
f(12,6242,1234,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(13,6242,1234,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(14,6242,1234,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(15,6242,1234,1,'scala/runtime/function/JProcedure1.apply')
f(16,6242,1234,1,'scala/runtime/function/JProcedure1.apply')
f(17,6242,1234,1,'kyo/concurrent/scheduler/IOTask$$Lambda$63.0x0000000800d45408.applyVoid')
f(18,6242,1234,1,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1')
f(19,6242,139,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(20,6242,139,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(21,6242,139,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(22,6242,139,2,'kyo.concurrent.scheduler.IOTask$$Lambda$79+0x0000000800d5c3c8')
f(19,6381,334,2,'kyo.concurrent.scheduler.IOTask')
f(19,6715,193,1,'kyo/concurrent/scheduler/IOPromise.become')
f(20,6715,193,1,'kyo/concurrent/scheduler/IOPromise.loop$3')
f(21,6715,70,1,'kyo/concurrent/scheduler/IOPromise$Linked$.apply')
f(22,6715,70,2,'kyo.concurrent.scheduler.IOPromise$Linked')
f(21,6785,123,1,'kyo/concurrent/scheduler/IOPromise.merge')
f(22,6785,123,1,'kyo/concurrent/scheduler/IOPromise.loop$2')
f(23,6785,123,1,'kyo/concurrent/scheduler/IOPromise$Pending.merge')
f(24,6785,123,2,'kyo.concurrent.scheduler.IOPromise$Pending$$anon$5')
f(19,6908,482,1,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1')
f(20,6908,482,1,'kyo/concurrent/scheduler/IOTask$$Lambda$79.0x0000000800d5c3c8.apply')
f(21,6908,482,1,'kyo/concurrent/scheduler/IOTask.$anonfun$1')
f(22,6908,482,1,'kyo/bench/PingPongBench$$anon$9.apply')
f(23,6908,284,1,'kyo/bench/PingPongBench$$anon$1.apply')
f(24,6908,284,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$1')
f(25,6908,284,1,'kyo/bench/PingPongBench$$Lambda$71.0x0000000800d558b8.apply')
f(26,6908,284,1,'kyo/bench/PingPongBench.$anonfun$3')
f(27,6908,284,1,'kyo/bench/PingPongBench.repeat$2')
f(28,6908,111,1,'java/lang/invoke/LambdaForm$MH.0x0000000800d59000.linkToTargetMethod')
f(29,6908,111,1,'java/lang/invoke/LambdaForm$DMH.0x0000000800d58800.newInvokeSpecial')
f(30,6908,111,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(31,6908,111,2,'kyo.bench.PingPongBench$$Lambda$71+0x0000000800d558b8')
f(28,7019,173,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$1')
f(29,7019,173,2,'kyo.bench.PingPongBench$$anon$1')
f(23,7192,198,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$8')
f(24,7192,198,2,'kyo.bench.PingPongBench$$anon$9')
f(19,7390,86,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(20,7390,86,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(21,7390,86,1,'kyo/concurrent/scheduler/Queue.offer')
f(22,7390,86,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(23,7390,86,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(24,7390,86,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(25,7390,86,2,'kyo.concurrent.scheduler.Queue$$Lambda$54+0x0000000800d4a680')
f(7,7476,478,1,'kyo/concurrent/scheduler/Queue.poll')
f(8,7476,478,1,'java/lang/invoke/Invokers$Holder.linkToTargetMethod')
f(9,7476,478,1,'java/lang/invoke/DirectMethodHandle$Holder.newInvokeSpecial')
f(10,7476,478,1,'java/lang/invoke/DirectMethodHandle.allocateInstance')
f(11,7476,478,2,'kyo.concurrent.scheduler.Queue$$Lambda$55+0x0000000800d4ae98')
f(1,7954,3,1,'org/openjdk/jmh/runner/ForkedMain.main')
f(2,7954,3,1,'org/openjdk/jmh/runner/ForkedRunner.run')
f(3,7954,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmarksForked')
f(4,7954,3,1,'org/openjdk/jmh/runner/BaseRunner.doSingle')
f(5,7954,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(6,7954,3,1,'org/openjdk/jmh/runner/BaseRunner.runBenchmark')
f(7,7954,3,1,'org/openjdk/jmh/runner/BenchmarkHandler.runIteration')
f(8,7954,3,1,'org/openjdk/jmh/runner/InfraControl.awaitWarmdownReady')
f(9,7954,3,1,'org/openjdk/jmh/runner/InfraControlL2.awaitWarmdownReady')
f(10,7954,3,1,'java/util/concurrent/CountDownLatch.await')
f(11,7954,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(12,7954,3,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(13,7954,3,2,'java.util.concurrent.locks.AbstractQueuedSynchronizer$SharedNode')
search();
</script></body></html>
View raw

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

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: 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,290,3,'all')
f(1,0,4,3,'[unknown_Java]')
f(2,0,1,4,'OptoRuntime::new_instance_C(Klass*, JavaThread*)')
f(2,1,2,1,'kyo/bench/PingPongBench$$anon$9.apply')
f(2,3,1,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(1,4,286,1,'java/lang/Thread.run')
f(2,4,286,1,'java/util/concurrent/ThreadPoolExecutor$Worker.run')
f(3,4,286,1,'java/util/concurrent/ThreadPoolExecutor.runWorker')
f(4,4,3,1,'java/util/concurrent/FutureTask.run')
f(5,4,3,1,'java/util/concurrent/Executors$RunnableAdapter.call')
f(6,4,3,1,'java/util/concurrent/FutureTask.run')
f(7,4,3,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(8,4,3,1,'org/openjdk/jmh/runner/BenchmarkHandler$BenchmarkTask.call')
f(9,4,3,1,'java/lang/reflect/Method.invoke')
f(10,4,3,1,'jdk/internal/reflect/DelegatingMethodAccessorImpl.invoke')
f(11,4,3,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke')
f(12,4,3,1,'jdk/internal/reflect/NativeMethodAccessorImpl.invoke0')
f(13,4,3,1,'kyo/bench/jmh_generated/PingPongBench_forkKyo_jmhTest.forkKyo_Throughput')
f(14,4,3,1,'kyo/bench/jmh_generated/PingPongBench_forkKyo_jmhTest.forkKyo_thrpt_jmhStub')
f(15,4,3,1,'kyo/bench/Bench.forkKyo')
f(16,4,3,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.0x0000000800c86000.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,2,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(18,5,2,1,'kyo/concurrent/fibers$Fiber$$anon$10.apply')
f(19,5,2,1,'kyo/concurrent/scheduler/IOPromise.block')
f(20,5,2,1,'kyo/concurrent/scheduler/IOPromise.loop$4')
f(21,5,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquireSharedInterruptibly')
f(22,5,2,1,'java/util/concurrent/locks/AbstractQueuedSynchronizer.acquire')
f(23,5,2,1,'java/util/concurrent/locks/LockSupport.park')
f(24,5,2,1,'jdk/internal/misc/Unsafe.park')
f(25,5,1,3,'Unsafe_Park')
f(26,5,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,5,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,5,1,5,'do_syscall_64')
f(29,5,1,5,'__x64_sys_futex')
f(30,5,1,5,'do_futex')
f(31,5,1,5,'futex_wake')
f(25,6,1,3,'[unknown]')
f(26,6,1,3,'/usr/lib/x86_64-linux-gnu/libc.so.6')
f(27,6,1,5,'entry_SYSCALL_64_after_hwframe')
f(28,6,1,5,'do_syscall_64')
f(29,6,1,5,'__x64_sys_futex')
f(30,6,1,5,'do_futex')
f(31,6,1,5,'futex_wait')
f(32,6,1,5,'futex_wait_queue_me')
f(4,7,283,1,'kyo/concurrent/scheduler/Scheduler$$$Lambda$52.0x0000000800d21b20.run')
f(5,7,283,1,'kyo/concurrent/scheduler/Scheduler$.startWorkers$$anonfun$1')
f(6,7,283,1,'kyo/concurrent/scheduler/Worker.runWorker')
f(7,21,7,2,'kyo/concurrent/scheduler/IOTask.reenqueue',7,0,0)
f(8,21,7,2,'kyo/concurrent/scheduler/IOTask.curr',7,0,0)
f(7,28,221,1,'kyo/concurrent/scheduler/IOTask.run')
f(8,33,216,1,'kyo/concurrent/scheduler/IOTask.eval',67,0,0)
f(9,49,22,1,'kyo/bench/PingPongBench$$anon$6.apply')
f(10,49,2,2,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$5',1,0,0)
f(11,49,2,2,'kyo/bench/PingPongBench$$anon$6.<init>',1,0,0)
f(12,49,2,2,'kyo/core$internal$KyoCont.<init>',1,0,0)
f(13,50,1,6,'kyo/core$internal$KyoRoot.value',0,1,0)
f(10,51,20,2,'kyo/concurrent/channels$Channels$Blocking$$anon$2.apply',20,0,0)
f(11,51,20,2,'kyo/concurrent/channels$$anon$16.apply',20,0,0)
f(12,51,20,2,'kyo/concurrent/channels$$anon$16.apply',20,0,0)
f(13,57,7,2,'java/util/AbstractQueue.add',7,0,0)
f(14,57,7,2,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.offer',7,0,0)
f(15,57,5,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.producerChunkForIndex',5,0,0)
f(16,57,5,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.appendNextChunks',5,0,0)
f(17,57,1,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.newOrPooledChunk',1,0,0)
f(18,57,1,2,'org/jctools/queues/MpUnboundedXaddChunk.soPrev',1,0,0)
f(19,57,1,2,'sun/misc/Unsafe.putObject',1,0,0)
f(17,58,1,2,'org/jctools/queues/MpUnboundedXaddArrayQueueProducerChunk.soProducerChunkIndex',1,0,0)
f(17,59,3,2,'org/jctools/queues/MpUnboundedXaddChunk.soNext',3,0,0)
f(18,59,3,2,'sun/misc/Unsafe.putOrderedObject',3,0,0)
f(15,62,1,2,'org/jctools/queues/MpUnboundedXaddChunk.lvIndex',1,0,0)
f(15,63,1,2,'org/jctools/queues/MpUnboundedXaddChunk.spinForElement',1,0,0)
f(16,63,1,2,'org/jctools/util/UnsafeRefArrayAccess.calcRefElementOffset',1,0,0)
f(13,64,4,2,'kyo/concurrent/fibers$Fibers.unsafePromise',4,0,0)
f(14,64,2,2,'kyo/concurrent/fibers$Fiber$Promise.<init>',2,0,0)
f(14,66,2,2,'kyo/concurrent/scheduler/IOPromise.<init>',2,0,0)
f(15,66,2,2,'kyo/concurrent/scheduler/IOPromise.<init>',2,0,0)
f(16,66,2,2,'java/util/concurrent/atomic/AtomicReference.<init>',2,0,0)
f(13,68,3,2,'kyo/concurrent/queues$$anon$12.poll',3,0,0)
f(14,68,2,2,'java/util/concurrent/atomic/AtomicReference.getAndSet',2,0,0)
f(15,68,2,2,'java/lang/invoke/VarHandleGuards.guard_LL_L',2,0,0)
f(16,68,2,2,'java/lang/invoke/VarForm.getMemberName',2,0,0)
f(14,70,1,2,'scala/Option$.apply',1,0,0)
f(9,71,21,1,'kyo/bench/PingPongBench$$anon$7.apply')
f(10,71,1,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$_$transformLoop$6')
f(11,71,1,1,'kyo/bench/PingPongBench$$Lambda$68.0x0000000800d54e58.apply')
f(12,71,1,1,'kyo/bench/PingPongBench.$anonfun$7')
f(13,71,1,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$5')
f(14,71,1,1,'kyo/bench/PingPongBench$$anon$6.<init>')
f(15,71,1,1,'kyo/core$internal$KyoCont.<init>')
f(16,71,1,6,'kyo/core$internal$KyoCont.effect',0,1,0)
f(10,72,20,2,'kyo/concurrent/fibers$Fibers$$anon$33.apply',11,0,0)
f(11,75,17,2,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',8,0,0)
f(12,76,16,2,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c86000.apply',7,0,0)
f(13,76,16,2,'kyo/concurrent/fibers$Fibers.$anonfun$4',7,0,0)
f(14,76,2,2,'kyo/concurrent/fibers$Fiber$.promise',2,0,0)
f(15,77,1,2,'kyo/concurrent/fibers$Fiber.<init>',1,0,0)
f(16,77,1,2,'java/lang/Object.<init>',1,0,0)
f(14,78,1,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',1,0,0)
f(14,79,2,2,'kyo/concurrent/scheduler/IOTask.<init>',2,0,0)
f(15,80,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(16,80,1,2,'kyo/concurrent/scheduler/IOPromise.<init>',1,0,0)
f(14,81,11,1,'kyo/concurrent/scheduler/Scheduler$.schedule',2,0,0)
f(15,81,2,2,'kyo/concurrent/scheduler/Worker$.apply',2,0,0)
f(15,83,9,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(16,83,9,1,'kyo/concurrent/scheduler/Queue.offer')
f(17,83,9,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(18,86,1,2,'java/util/concurrent/atomic/AtomicBoolean.set',1,0,0)
f(18,87,5,2,'scala/Function0.apply$mcZ$sp',5,0,0)
f(19,87,5,2,'kyo/concurrent/scheduler/Queue$$Lambda$54.0x0000000800d4a680.apply',5,0,0)
f(20,87,5,2,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1',5,0,0)
f(21,87,1,2,'kyo/concurrent/scheduler/Queue.queue',1,0,0)
f(21,88,4,2,'scala/collection/mutable/PriorityQueue.addOne',4,0,0)
f(22,90,2,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize',2,0,0)
f(23,90,2,2,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize',2,0,0)
f(24,91,1,2,'scala/collection/mutable/ArrayBuffer.array_$eq',1,0,0)
f(9,92,20,1,'kyo/bench/PingPongBench$$anon$9.apply')
f(10,92,20,2,'kyo/bench/PingPongBench$$anon$1.apply',9,0,0)
f(11,92,1,1,'kyo/bench/PingPongBench.kyo$bench$PingPongBench$$_$transformLoop$1')
f(12,92,1,1,'kyo/bench/PingPongBench$$anon$1.<init>')
f(13,92,1,1,'kyo/core$internal$KyoCont.<init>')
f(14,92,1,6,'kyo/core$internal$KyoRoot.effect',0,1,0)
f(11,93,19,2,'kyo/concurrent/fibers$Fibers$$anon$34.apply',9,0,0)
f(12,94,17,2,'kyo/concurrent/fibers$Fibers$$anon$33.apply',7,0,0)
f(13,95,14,1,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$2',4,0,0)
f(14,98,11,1,'kyo/concurrent/fibers$Fibers$$Lambda$38.0x0000000800c86000.apply',1,0,0)
f(15,98,11,1,'kyo/concurrent/fibers$Fibers.$anonfun$4',1,0,0)
f(16,98,1,2,'kyo/concurrent/fibers$Fibers$$anon$32.<init>',1,0,0)
f(17,98,1,2,'kyo/ios$KyoIO.<init>',1,0,0)
f(16,99,10,1,'kyo/concurrent/scheduler/Scheduler$.schedule')
f(17,99,10,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(18,99,10,1,'kyo/concurrent/scheduler/Queue.offer')
f(19,99,10,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(20,101,8,2,'scala/Function0.apply$mcZ$sp',8,0,0)
f(21,101,8,2,'kyo/concurrent/scheduler/Queue$$Lambda$54.0x0000000800d4a680.apply',8,0,0)
f(22,101,8,2,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1',8,0,0)
f(23,101,1,2,'kyo/concurrent/scheduler/Queue.queue',1,0,0)
f(23,102,7,2,'scala/collection/mutable/PriorityQueue.addOne',7,0,0)
f(24,106,3,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize',3,0,0)
f(25,106,3,2,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize',3,0,0)
f(26,106,3,2,'scala/collection/mutable/ArrayBuffer.size0',3,0,0)
f(13,109,2,2,'kyo/locals$Locals$$anon$3.apply',2,0,0)
f(12,111,1,2,'kyo/concurrent/fibers$Fibers.kyo$concurrent$fibers$Fibers$$_$transformLoop$3',1,0,0)
f(9,112,45,1,'kyo/concurrent/channels$$anon$17.apply')
f(10,112,45,1,'kyo/concurrent/channels$$anon$17.apply',1,0,0)
f(11,112,44,1,'kyo/concurrent/channels$Channels$$anon$14.kyo$concurrent$channels$Channels$$anon$14$$flush')
f(12,112,1,2,'kyo/concurrent/channels$Channels$$anon$14.q',1,0,0)
f(12,113,36,1,'kyo/concurrent/fibers$Fiber$Promise.unsafeComplete',3,0,0)
f(13,113,36,1,'kyo/concurrent/fibers$Fiber$Promise.loop$23',3,0,0)
f(14,113,36,1,'kyo/concurrent/scheduler/IOPromise.kyo$concurrent$scheduler$IOPromise$$inline$complete',3,0,0)
f(15,113,36,1,'kyo/concurrent/scheduler/IOPromise.complete',3,0,0)
f(16,113,3,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',3,0,0)
f(17,113,3,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',3,0,0)
f(18,113,3,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',3,0,0)
f(16,116,33,1,'kyo/concurrent/scheduler/IOPromise$Pending.flush')
f(17,116,33,1,'kyo/concurrent/scheduler/IOPromise$Pending.loop$7')
f(18,116,33,1,'kyo/concurrent/scheduler/IOPromise$Pending$$anon$3.run')
f(19,116,33,1,'scala/runtime/function/JProcedure1.apply')
f(20,116,33,1,'scala/runtime/function/JProcedure1.apply')
f(21,117,1,2,'kyo/concurrent/scheduler/IOTask$$Lambda$62.0x0000000800d45000.applyVoid',1,0,0)
f(22,117,1,2,'kyo/concurrent/scheduler/IOTask.loop$2$$anonfun$1',1,0,0)
f(23,117,1,2,'kyo/concurrent/scheduler/IOTask.loop$3',1,0,0)
f(21,118,31,2,'kyo/concurrent/scheduler/IOTask$$Lambda$63.0x0000000800d45408.applyVoid',12,0,0)
f(22,118,31,2,'kyo/concurrent/scheduler/IOTask.loop$5$$anonfun$1',12,0,0)
f(23,120,5,2,'kyo/concurrent/scheduler/IOTask.<init>',5,0,0)
f(24,120,5,2,'kyo/concurrent/scheduler/IOPromise.<init>',5,0,0)
f(25,122,3,2,'kyo/concurrent/scheduler/IOPromise.<init>',3,0,0)
f(26,122,3,2,'java/util/concurrent/atomic/AtomicReference.<init>',3,0,0)
f(23,125,13,1,'kyo/concurrent/scheduler/IOTask.kyo$concurrent$scheduler$IOTask$$_$_$transformLoop$1',4,0,0)
f(24,125,10,1,'kyo/concurrent/scheduler/IOTask$$Lambda$79.0x0000000800d5c3c8.apply',1,0,0)
f(25,125,10,1,'kyo/concurrent/scheduler/IOTask.$anonfun$1',1,0,0)
f(26,126,9,1,'kyo/bench/PingPongBench$$anon$6.apply')
f(27,127,8,2,'kyo/concurrent/channels$Channels$Blocking$$anon$2.apply',8,0,0)
f(28,127,8,2,'kyo/concurrent/channels$$anon$16.apply',8,0,0)
f(29,128,7,2,'kyo/concurrent/channels$$anon$16.apply',7,0,0)
f(30,128,1,2,'java/util/AbstractQueue.add',1,0,0)
f(31,128,1,2,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.offer',1,0,0)
f(32,128,1,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.producerChunkForIndex',1,0,0)
f(33,128,1,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.appendNextChunks',1,0,0)
f(34,128,1,2,'org/jctools/queues/MpUnboundedXaddChunk.soNext',1,0,0)
f(35,128,1,2,'sun/misc/Unsafe.putOrderedObject',1,0,0)
f(30,129,4,2,'kyo/concurrent/fibers$Fibers.unsafePromise',4,0,0)
f(31,129,4,2,'kyo/concurrent/fibers$Fiber$Promise.<init>',4,0,0)
f(30,133,2,2,'kyo/concurrent/queues$$anon$12.poll',2,0,0)
f(31,133,2,2,'scala/Option$.apply',2,0,0)
f(24,135,3,2,'kyo/concurrent/scheduler/IOTask$$anon$4.<init>',3,0,0)
f(25,135,3,2,'kyo/core$internal$KyoCont.<init>',3,0,0)
f(23,138,11,1,'kyo/concurrent/scheduler/Scheduler$.schedule',1,0,0)
f(24,139,10,1,'kyo/concurrent/scheduler/Worker.enqueueLocal')
f(25,139,10,1,'kyo/concurrent/scheduler/Queue.offer')
f(26,139,10,1,'kyo/concurrent/scheduler/Queue.tryModify')
f(27,140,9,2,'scala/Function0.apply$mcZ$sp',9,0,0)
f(28,140,9,2,'kyo/concurrent/scheduler/Queue$$Lambda$54.0x0000000800d4a680.apply',9,0,0)
f(29,140,9,2,'kyo/concurrent/scheduler/Queue.offer$$anonfun$1',9,0,0)
f(30,140,9,2,'scala/collection/mutable/PriorityQueue.addOne',9,0,0)
f(31,146,3,2,'scala/collection/mutable/PriorityQueue$ResizableArrayAccess.p_ensureAdditionalSize',3,0,0)
f(32,146,3,2,'scala/collection/mutable/ArrayBuffer.ensureAdditionalSize',3,0,0)
f(33,148,1,2,'scala/collection/mutable/ArrayBuffer.size0',1,0,0)
f(12,149,2,2,'kyo/concurrent/queues$$anon$12.poll',2,0,0)
f(13,149,2,2,'java/util/concurrent/atomic/AtomicReference.getAndSet',2,0,0)
f(14,149,2,2,'java/lang/invoke/VarHandleGuards.guard_LL_L',2,0,0)
f(15,149,2,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.getAndSet',2,0,0)
f(12,151,2,2,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.isEmpty',2,0,0)
f(13,151,2,2,'org/jctools/queues/MpUnboundedXaddArrayQueue.isEmpty',2,0,0)
f(14,151,2,2,'org/jctools/queues/IndexedQueueSizeUtil.isEmpty',2,0,0)
f(15,152,1,2,'org/jctools/queues/MpUnboundedXaddArrayQueueProducerFields.lvProducerIndex',1,0,0)
f(12,153,3,1,'org/jctools/queues/MpmcUnboundedXaddArrayQueue.poll')
f(13,153,2,2,'org/jctools/queues/MpUnboundedXaddArrayQueueConsumerFields.casConsumerIndex',2,0,0)
f(14,153,2,2,'sun/misc/Unsafe.compareAndSwapLong',2,0,0)
f(13,155,1,2,'org/jctools/queues/MpmcUnboundedXaddChunk.lvSequence',1,0,0)
f(14,155,1,2,'org/jctools/util/UnsafeLongArrayAccess.lvLongElement',1,0,0)
f(15,155,1,2,'sun/misc/Unsafe.getLongVolatile',1,0,0)
f(11,156,1,2,'kyo/concurrent/queues$$anon$12.offer',1,0,0)
f(12,156,1,2,'java/util/concurrent/atomic/AtomicReference.compareAndSet',1,0,0)
f(13,156,1,2,'java/lang/invoke/VarHandleGuards.guard_LLL_Z',1,0,0)
f(14,156,1,2,'java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite.compareAndSet',1,0,0)
f(9,157,5,1,'kyo/concurrent/fibers$Fibers$$anon$32.apply')
f(10,158,4,2,'kyo/concurrent/fibers$Fibers$$anon$32.apply',2,0,0)
f(11,158,2,3,'itable stub')
f(11,160,1,1,'kyo/bench/PingPongBench$$Lambda$67.0x0000000800d54b98.apply')
f(12,160,1,2,'kyo/bench/PingPongBench.$anonfun$6',1,0,0)
f(13,160,1,2,'kyo/concurrent/channel
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