mirror of
https://github.com/async-profiler/async-profiler.git
synced 2026-04-28 10:53:49 +00:00
856 lines
21 KiB
HTML
856 lines
21 KiB
HTML
<!DOCTYPE html>
|
|
<html lang='en'>
|
|
<head>
|
|
<meta charset='utf-8'>
|
|
<style>
|
|
:root {--bg: #ffffff; --fg: #000000; --hl-bg: #ffffe0; --hl-border: #ffc000; --link: #0366d6; --legend-bg: #ffffe0; --legend-border: #666666}
|
|
:root.dark {--bg: #1e1e1e; --fg: #cccccc; --hl-bg: #3a3a00; --hl-border: #8a7000; --link: #58a6ff; --legend-bg: #333333; --legend-border: #888888}
|
|
body {margin: 0; padding: 10px 10px 22px 10px; background-color: var(--bg); color: var(--fg)}
|
|
h1 {margin: 5px 0 0 0; font-size: 18px; font-weight: normal; text-align: center}
|
|
header {margin: -22px 0 6px 0}
|
|
button {border: none; background: none; width: 24px; height: 24px; cursor: pointer; margin: 0; padding: 2px 0 0 0; text-align: center}
|
|
button:hover {background-color: var(--hl-bg); outline: 1px solid var(--hl-border); border-radius: 4px}
|
|
dl {margin: 0 4px 8px 4px}
|
|
dt {margin: 1px; padding: 2px 0; font-weight: bold}
|
|
dd {margin: 1px; padding: 2px 4px}
|
|
dl.frames {float: left; width: 160px}
|
|
dl.frames > dd {color: #000000}
|
|
dl.hotkeys {clear: left; border-top: 1px solid var(--legend-border)}
|
|
dl.hotkeys > dt {float: left; clear: left; width: 158px; margin-right: 4px; text-align: right}
|
|
dl.hotkeys > dd {float: left}
|
|
p {position: fixed; bottom: 0; margin: 0; padding: 2px 3px 2px 3px; outline: 1px solid var(--hl-border); display: none; overflow: hidden; white-space: nowrap; background-color: var(--hl-bg); color: var(--fg)}
|
|
a {color: var(--link)}
|
|
#legend {padding: 4px; border-radius: 4px; background: var(--legend-bg); border: 1px solid var(--legend-border); display: none}
|
|
#hl {position: absolute; display: none; overflow: hidden; white-space: nowrap; pointer-events: none; background-color: var(--hl-bg); outline: 1px solid var(--hl-border); height: 15px}
|
|
#hl span {padding: 0 3px 0 3px}
|
|
#status {left: 0}
|
|
#match {right: 0}
|
|
#reset {cursor: pointer}
|
|
#canvas {width: 100%; height: 576px}
|
|
</style>
|
|
<script>
|
|
{
|
|
let theme;
|
|
try { theme = localStorage.getItem('flame-theme'); } catch (ignored) {}
|
|
if (theme ? theme === 'dark' : matchMedia('(prefers-color-scheme: dark)').matches) {
|
|
document.documentElement.classList.add('dark');
|
|
}
|
|
}
|
|
</script>
|
|
</head>
|
|
<body style='font: 12px Verdana, sans-serif'>
|
|
<h1>CPU profile</h1>
|
|
<header style='float: left'>
|
|
<button id='inverted' title='Invert (I)'><svg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 392 392'><path d='M196,36 L316,156 L76,156 Z' fill='#004d80'/><path d='M196,356 L76,236 L316,236 Z' fill='#004d80'/><path d='M196,54 L298,156 L94,156 Z' fill='#ff8d40'/><path d='M196,338 L94,236 L298,236 Z' fill='#40b2ff'/><rect x='94' y='188' width='204' height='16' fill='#004d80'/></svg></button>
|
|
<button id='search' title='Search (Ctrl+F)'><svg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='-39.3 -39.3 471.1 471.1'><circle cx='147.7' cy='147.8' r='125.9' fill='#fff'/><path fill='#40b2ff' d='M370.7 348.7c0 1.4-1.6 6.3-7.2 12.3-6.2 6.7-12.5 9.8-14.7 9.8h-.1c-19.5-1.6-62-43.2-109.6-106.8 9.2-7.2 17.5-15.5 24.6-24.6 63.6 47.6 105.2 90.2 106.8 109.6z'/><path fill='#ff8d40' d='M208.7 86.9l-14.5 14.5c-17.1 17.1-46.5 5-46.5-19.3V61.6c-49 0-88.4 40.8-86.1 90.2 2 43.9 38.1 80 82 82 49.5 2.3 90.2-37.2 90.2-86.1 0-23.7-9.6-45.2-25.1-60.8z'/><path fill='#004d80' d='M276.1 221c12.3-21.5 19.5-46.5 19.5-73.2C295.6 66.3 229.2.1 147.7.1S0 66.3 0 147.9s66.3 147.7 147.7 147.7c26.6 0 51.5-7.1 73.2-19.5 39.8 53.3 91.9 113.5 126.1 116.4 12.3.5 22.9-6.7 32.8-16.7 5.2-5.6 13.8-16.9 12.8-28.8-2.9-34.1-63.1-86.2-116.4-126.1zM147.7 273.8c-69.5 0-125.9-56.5-125.9-125.9S78.3 21.9 147.7 21.9 273.6 78.4 273.6 147.8s-56.4 126-125.9 126zm215.9 87.2c-6.2 6.7-12.4 9.8-14.7 9.8h-.1c-19.5-1.6-62-43.2-109.6-106.8 9.2-7.2 17.5-15.5 24.6-24.6 63.6 47.6 105.2 90.2 106.8 109.6 0 1.4-1.6 6.3-7.2 12.4z'/></svg></button>
|
|
<button id='darkmode' title='Toggle dark mode (D)'><svg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 20 20'><path d='M10 4a6 6 0 0 1 0 12z' fill='#ff8d40'/><path d='M10 4a6 6 0 0 0 0 12z' fill='#ffffff'/><circle cx='10' cy='10' r='8' fill='none' stroke='#004d80'/></svg></button>
|
|
<button id='info'><svg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 20 20'><circle cx='10' cy='10' r='8' stroke='#004d80' fill='none'/><path d='M10 5.5c-1.25 0-2.25 1-2.25 2.25H9a1.25 1.25 0 0 1 2.5 0c0 .65-.55 1-1 1.2-.7.35-1.25.85-1.25 1.8V11h1.5v-.25c0-.37.29-.65.68-.83.73-.34 1.32-.87 1.32-2.17 0-1.25-1.5-2.25-2.75-2.25' fill='#ff8d40' stroke='#ff8d40' stroke-width='.6' stroke-linecap='round' stroke-linejoin='round'/><circle cx='10' cy='13.5' r='1.2' fill='#ff8d40'/></svg></button>
|
|
</header>
|
|
<header style='float: right'>Produced by <a href='https://github.com/async-profiler/async-profiler'>async-profiler</a></header>
|
|
<div id='legend' style='position: absolute'>
|
|
<dl class='frames'>
|
|
<dt>Frame types</dt>
|
|
<dd style='background-color: #e17d00'>Kernel</dd>
|
|
<dd style='background-color: #e15a5a'>Native</dd>
|
|
<dd style='background-color: #c8c83c'>C++ (VM)</dd>
|
|
<dd style='background-color: #50e150'>Java compiled</dd>
|
|
<dd style='background-color: #cce880'>Java compiled by C1</dd>
|
|
<dd style='background-color: #50cccc'>Inlined</dd>
|
|
<dd style='background-color: #b2e1b2'>Interpreted</dd>
|
|
</dl>
|
|
<dl class='frames'>
|
|
<dt>Allocation profile</dt>
|
|
<dd style='background-color: #50cccc'>Allocated class</dd>
|
|
<dd style='background-color: #e17d00'>Allocation outside TLAB</dd>
|
|
<dt>Lock profile</dt>
|
|
<dd style='background-color: #50cccc'>Lock class</dd>
|
|
<dt> </dt>
|
|
<dt>Search</dt>
|
|
<dd style='background-color: #ee00ee'>Matches regexp</dd>
|
|
</dl>
|
|
<dl class='hotkeys'>
|
|
<dt>Click frame</dt><dd>Zoom into frame</dd>
|
|
<dt>Ctrl/Alt+Click</dt><dd>Remove stack</dd>
|
|
<dt>0</dt><dd>Reset zoom</dd>
|
|
<dt>I</dt><dd>Invert graph</dd>
|
|
<dt>Ctrl+F</dt><dd>Search</dd>
|
|
<dt>N</dt><dd>Next match</dd>
|
|
<dt>Shift+N</dt><dd>Previous match</dd>
|
|
<dt>Esc</dt><dd>Cancel search</dd>
|
|
</dl>
|
|
</div>
|
|
<canvas id='canvas'></canvas>
|
|
<div id='hl'><span></span></div>
|
|
<p id='status'></p>
|
|
<p id='match'>Matched: <span id='matchval'></span> <span id='reset' title='Clear'>❌</span></p>
|
|
<script>
|
|
// Copyright The async-profiler authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
'use strict';
|
|
let root, px, pattern;
|
|
let level0 = 0, left0 = 0, width0 = 0, d = 0;
|
|
let nav = [], navIndex, matchval;
|
|
let inverted = false;
|
|
const U = undefined;
|
|
const maxdiff = -1;
|
|
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 getDiffColor(diff) {
|
|
if (diff === U) return '#ffdd33';
|
|
if (diff === 0) return '#e0e0e0';
|
|
const v = Math.round(128 * (maxdiff - Math.abs(diff)) / maxdiff) + 96;
|
|
return diff > 0 ? 'rgb(255,' + v + ',' + v + ')' : 'rgb(' + v + ',' + v + ',255)';
|
|
}
|
|
|
|
function f(key, level, left, width, inln, c1, int) {
|
|
levels[level0 = level].push({level, left: left0 += left, width: width0 = width || width0,
|
|
color: maxdiff >= 0 ? getDiffColor(d) : getColor(palette[key & 7]),
|
|
title: cpool[key >>> 3],
|
|
details: (d ? (d > 0 ? ', +' : ', ') + d : '') + (int ? ', int=' + int : '') + (c1 ? ', c1=' + c1 : '') + (inln ? ', inln=' + inln : '')
|
|
});
|
|
}
|
|
|
|
function u(key, width, inln, c1, int) {
|
|
f(key, level0 + 1, 0, width, inln, c1, int)
|
|
}
|
|
|
|
function n(key, width, inln, c1, int) {
|
|
f(key, level0, width0, width, inln, c1, int)
|
|
}
|
|
|
|
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 removeStack(left, width) {
|
|
for (let h = 0; h < levels.length; h++) {
|
|
const frames = levels[h], newFrames = [];
|
|
for (let i = 0; i < frames.length; i++) {
|
|
const f = frames[i];
|
|
if (f.left >= left + width) {
|
|
f.left -= width;
|
|
} else if (f.left + f.width > left) {
|
|
if ((f.width -= width) <= 0 && h) continue;
|
|
}
|
|
newFrames.push(f);
|
|
}
|
|
levels[h] = newFrames;
|
|
}
|
|
}
|
|
|
|
function search(r) {
|
|
if (r === true && (r = prompt('Enter regexp to search:', '')) === null) {
|
|
return;
|
|
}
|
|
|
|
pattern = r ? RegExp(r) : undefined;
|
|
const matched = render(root, nav = []);
|
|
navIndex = -1;
|
|
document.getElementById('matchval').textContent = matchval = pct(matched, root.width) + '%';
|
|
document.getElementById('match').style.display = r ? 'inline-block' : 'none';
|
|
}
|
|
|
|
function render(newRoot, nav) {
|
|
const bg = getComputedStyle(document.documentElement).getPropertyValue('--bg');
|
|
|
|
if (root) {
|
|
c.fillStyle = bg;
|
|
c.fillRect(0, 0, canvasWidth, canvasHeight);
|
|
}
|
|
|
|
root = newRoot || levels[0][0];
|
|
px = canvasWidth / root.width;
|
|
|
|
const x0 = root.left;
|
|
const x1 = x0 + root.width;
|
|
const marked = [];
|
|
|
|
function mark(f) {
|
|
return marked[f.left] || (marked[f.left] = f);
|
|
}
|
|
|
|
function totalMarked() {
|
|
let total = 0;
|
|
let left = 0;
|
|
Object.keys(marked).sort(function(a, b) { return a - b; }).forEach(function(x) {
|
|
if (+x >= left) {
|
|
const m = marked[x];
|
|
if (nav) nav.push(m);
|
|
total += m.width;
|
|
left = +x + m.width;
|
|
}
|
|
});
|
|
return total;
|
|
}
|
|
|
|
function drawFrame(f, y) {
|
|
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 (f.level < root.level) {
|
|
c.fillStyle = bg + '80';
|
|
c.fillRect((f.left - x0) * px, y, f.width * px, 15);
|
|
}
|
|
}
|
|
}
|
|
|
|
for (let h = 0; h < levels.length; h++) {
|
|
const y = inverted ? h * 16 : canvasHeight - (h + 1) * 16;
|
|
const frames = levels[h];
|
|
for (let i = 0; i < frames.length; i++) {
|
|
drawFrame(frames[i], y);
|
|
}
|
|
}
|
|
|
|
return totalMarked();
|
|
}
|
|
|
|
function unpack(cpool) {
|
|
for (let i = 1; i < cpool.length; i++) {
|
|
cpool[i] = cpool[i - 1].substring(0, cpool[i].charCodeAt(0) - 32) + cpool[i].substring(1);
|
|
}
|
|
}
|
|
|
|
canvas.onmousemove = function() {
|
|
const h = Math.floor((inverted ? 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 = ((inverted ? 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 ((event.altKey || event.ctrlKey) && h >= root.level && h > 0) {
|
|
removeStack(f.left, f.width);
|
|
root.width > f.width ? render(root) : render();
|
|
} else if (f !== root) {
|
|
render(f);
|
|
}
|
|
canvas.onmousemove();
|
|
};
|
|
status.textContent = 'Function: ' + canvas.title;
|
|
status.style.display = 'inline-block';
|
|
return;
|
|
}
|
|
}
|
|
canvas.onmouseout();
|
|
}
|
|
|
|
canvas.onmouseout = function() {
|
|
hl.style.display = 'none';
|
|
status.style.display = 'none';
|
|
canvas.title = '';
|
|
canvas.style.cursor = '';
|
|
canvas.onclick = null;
|
|
}
|
|
|
|
canvas.ondblclick = function() {
|
|
getSelection().selectAllChildren(hl);
|
|
}
|
|
|
|
document.getElementById('inverted').onclick = function() {
|
|
inverted = !inverted;
|
|
render();
|
|
}
|
|
|
|
document.getElementById('search').onclick = function() {
|
|
search(true);
|
|
}
|
|
|
|
document.getElementById('reset').onclick = function() {
|
|
search(false);
|
|
}
|
|
|
|
document.getElementById('darkmode').onclick = function() {
|
|
const theme = document.documentElement.classList.toggle('dark') ? 'dark' : 'light';
|
|
try { localStorage.setItem('flame-theme', theme); } catch (ignored) {}
|
|
render(root);
|
|
}
|
|
|
|
const btnInfo = document.getElementById('info');
|
|
const legend = document.getElementById('legend');
|
|
|
|
btnInfo.onmouseover = function() {
|
|
legend.style.left = (btnInfo.offsetLeft + 24) + 'px';
|
|
legend.style.top = (btnInfo.offsetTop + 24) + 'px';
|
|
legend.style.display = 'block';
|
|
}
|
|
|
|
btnInfo.onmouseout = function() {
|
|
legend.style.display = 'none';
|
|
}
|
|
|
|
window.onkeydown = function(event) {
|
|
if ((event.ctrlKey || event.metaKey) && event.key === 'f') {
|
|
event.preventDefault();
|
|
search(true);
|
|
return false;
|
|
} else if (event.key === 'Escape') {
|
|
search(false);
|
|
} else if ((event.key === 'n' || event.key === 'N') && nav.length > 0) {
|
|
navIndex = (navIndex + (event.shiftKey ? nav.length - 1 : 1)) % nav.length;
|
|
render(nav[navIndex]);
|
|
document.getElementById('matchval').textContent = matchval + ' (' + (navIndex + 1) + ' of ' + nav.length + ')';
|
|
window.scroll(0, inverted ? root.level * 16 : canvasHeight - (root.level + 1) * 16);
|
|
canvas.onmousemove();
|
|
return false;
|
|
} else if (event.key === 'i') {
|
|
canvas.onmouseout();
|
|
document.getElementById('inverted').onclick();
|
|
return false;
|
|
} else if (event.key === 'd') {
|
|
document.getElementById('darkmode').onclick();
|
|
return false;
|
|
} else if (event.key === '0') {
|
|
canvas.onmouseout();
|
|
root = levels[0][0];
|
|
search(false);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
const cpool = [
|
|
'all',
|
|
' C2Compiler::compile_method',
|
|
'!ompilation::Compilation',
|
|
'-compile_java_method',
|
|
'5method',
|
|
'-emit_code_body',
|
|
'&e::Code_Gen',
|
|
'+mpile',
|
|
')Optimize',
|
|
'\'Broker::compiler_thread_loop',
|
|
'/invoke_compiler_on_method',
|
|
'\'r::compile_method',
|
|
'"ntiguousSpace::allocate',
|
|
' DefNewGeneration::FastEvacuateFollowersClosure::do_void',
|
|
'2collect',
|
|
'4py_to_survivor_space',
|
|
' GenCollectedHeap::collect_generation',
|
|
'2do_collection',
|
|
'2satisfy_failed_allocation',
|
|
'#eration::promote',
|
|
' InstanceKlass::allocate_objArray',
|
|
'"terpreterRuntime::anewarray',
|
|
' JVM_ArrayCopy',
|
|
'!avaThread::run',
|
|
'$_sun_nio_ch_FileDispatcherImpl_read0',
|
|
' Matcher::match',
|
|
'!emAllocator::allocate',
|
|
' ObjArrayAllocator::initialize',
|
|
'!ffsetTableContigSpace::allocate',
|
|
' Parse::Parse',
|
|
'\'do_all_blocks',
|
|
'*call',
|
|
'*one_block',
|
|
'/ytecode',
|
|
'%Generator::generate',
|
|
'!haseCFG::do_global_code_motion',
|
|
'*global_code_motion',
|
|
'*schedule_late',
|
|
'4ocal',
|
|
'&haitin::Register_Allocate',
|
|
'.Split',
|
|
'.build_ifg_physical',
|
|
'.elide_copy',
|
|
'.interfere_with_live',
|
|
'.merge_multidefs',
|
|
'.post_allocate_copy_removal',
|
|
'%IdealLoop::Dominators',
|
|
'0build_and_optimize',
|
|
'6loop_early',
|
|
';late',
|
|
';tree',
|
|
'0optimize',
|
|
'0remix_address_expressions',
|
|
'0split_if_with_blocks',
|
|
'D_post',
|
|
'Fre',
|
|
'&terGVN::optimize',
|
|
'.subsume_node',
|
|
'.transform_old',
|
|
'%Live::add_liveout',
|
|
'+compute',
|
|
'%MacroExpand::expand_macro_nodes',
|
|
'!redictedCallGenerator::generate',
|
|
' TenuredGeneration::allocate',
|
|
'!hread::call_run',
|
|
' VMThread::evaluate_operation',
|
|
'*inner_execute',
|
|
'*run',
|
|
'"_GenCollectForAllocation::doit',
|
|
'#Operation::evaluate',
|
|
' __GI_read',
|
|
'"handle_mm_fault',
|
|
'"memcpy_sse2_unaligned_erms',
|
|
'%set_avx2_unaligned_erms',
|
|
' aci_CopyRight',
|
|
'!sm_exc_page_fault',
|
|
' clear_huge_page',
|
|
'&page_erms',
|
|
'&subpage',
|
|
'"one3',
|
|
'!opy_page_to_iter',
|
|
'%user_enhanced_fast_string',
|
|
' demo8/FileConverter$$Lambda$3.0x00007ffab9001000.apply',
|
|
'<4.0x00007ffab9001240.applyAsInt',
|
|
'4Entry.<init>',
|
|
':equals',
|
|
':hashCode',
|
|
'3.convertFile',
|
|
';List',
|
|
'4main',
|
|
'4readInput',
|
|
'4saveResult',
|
|
'!o_huge_pmd_anonymous_page',
|
|
'#syscall_64',
|
|
'#user_addr_fault',
|
|
' entry_SYSCALL_64_after_hwframe',
|
|
'!xc_page_fault',
|
|
' filemap_read',
|
|
' handle_mm_fault',
|
|
' java/io/BufferedReader.fill',
|
|
'7readLine',
|
|
')yteArrayOutputStream.ensureCapacity',
|
|
'>toByteArray',
|
|
'>write',
|
|
'(DataOutputStream.write',
|
|
'>Int',
|
|
'>UTF',
|
|
'(InputStreamReader.read',
|
|
'%lang/Integer.parseInt',
|
|
'*String.<init>',
|
|
'1decodeASCII',
|
|
'1hashCode',
|
|
'1length',
|
|
'1substring',
|
|
'0Latin1.hashCode',
|
|
'7newString',
|
|
'0UTF16.compress',
|
|
'+ystem$2.decodeASCII',
|
|
'0.arraycopy',
|
|
'*ThreadLocal.get',
|
|
'%nio/charset/CharsetDecoder.decode',
|
|
')file/Files.readAllLines',
|
|
'%util/ArrayList$ArrayListSpliterator.tryAdvance',
|
|
'3.add',
|
|
'4grow',
|
|
'4sort',
|
|
'/s.copyOf',
|
|
'7Range',
|
|
'1sort',
|
|
'*Comparator$$Lambda$5.0x00007ffab90494b0.compare',
|
|
'4.lambda$comparingInt$7b0bb60$1',
|
|
'*HashMap$Node.<init>',
|
|
'1.hash',
|
|
'2newNode',
|
|
'2put',
|
|
'5Val',
|
|
'2resize',
|
|
'.Set.add',
|
|
'*TimSort.binarySort',
|
|
'2mergeAt',
|
|
'7Collapse',
|
|
'7ForceCollapse',
|
|
'7Hi',
|
|
'7Lo',
|
|
'2sort',
|
|
'*stream/AbstractPipeline.copyInto',
|
|
'JWithCancel',
|
|
'Bevaluate',
|
|
'BwrapAndCopyInto',
|
|
'1Collectors$$Lambda$7.0x00007ffab904a268.accept',
|
|
'1DistinctOps$1$2.accept',
|
|
'Aend',
|
|
'1ReduceOps$3ReducingSink.accept',
|
|
';ReduceOp.evaluateSequential',
|
|
'3ferencePipeline$3$1.accept',
|
|
'B.collect',
|
|
'CforEachWithCancel',
|
|
'1Sink$ChainedReference.end',
|
|
'2liceOps$1$1.accept',
|
|
'2ortedOps$RefSortingSink.accept',
|
|
'Jend',
|
|
'!long_disjoint_arraycopy',
|
|
' ksys_read',
|
|
' new_sync_read',
|
|
' oop_arraycopy',
|
|
' start_thread',
|
|
'!un/nio/ch/ChannelInputStream.read',
|
|
'+FileChannelImpl.read',
|
|
'/DispatcherImpl.read',
|
|
'B0',
|
|
'+IOUtil.read',
|
|
'6IntoNativeBuffer',
|
|
'+Util.getTemporaryDirectBuffer',
|
|
')s/StreamDecoder.implRead',
|
|
'9read',
|
|
'=Bytes',
|
|
'+UTF_8$Decoder.decodeArrayLoop',
|
|
'?Loop',
|
|
' thread_native_entry',
|
|
' vfs_read',
|
|
'!oid ContiguousSpace::oop_since_save_marks_iterate<DefNewScanClosure>',
|
|
'%OopOopIterateDispatch<DefNewScanClosure>::Table::oop_oop_iterate<InstanceKlass, narrowOop>',
|
|
'fObjArrayKlass, narrowOop>',
|
|
'AYoungerGenClosure>::Table::oop_oop_iterate<InstanceKlass, narrowOop>'
|
|
];
|
|
unpack(cpool);
|
|
|
|
n(3,584)
|
|
f(635,1,1,178)
|
|
u(1323)
|
|
u(1428)
|
|
u(516)
|
|
u(188,70)
|
|
u(76)
|
|
f(84,7,2,68)
|
|
f(12,8,2,63)
|
|
u(60)
|
|
u(52,36)
|
|
f(204,11,3,2)
|
|
n(284,7)
|
|
u(292)
|
|
f(300,13,1,2)
|
|
n(308,4)
|
|
f(316,11,4,24)
|
|
f(324,12,6,2)
|
|
n(332,9)
|
|
f(348,13,5,4)
|
|
f(356,12,4,2)
|
|
n(364)
|
|
u(340)
|
|
f(484,12,2,3)
|
|
u(476)
|
|
f(68,10,3,23)
|
|
f(412,11,2,16)
|
|
f(380,12,1,15)
|
|
f(372,13,1,3)
|
|
n(388,2)
|
|
n(396)
|
|
n(404)
|
|
n(428,5)
|
|
f(436,14,1,2)
|
|
n(444)
|
|
u(420)
|
|
f(452,11,2,3)
|
|
u(468)
|
|
f(460,13,1,2)
|
|
f(492,11,2)
|
|
u(452)
|
|
u(468)
|
|
f(276,10,2,4)
|
|
u(236)
|
|
u(244)
|
|
u(260)
|
|
u(268)
|
|
u(252)
|
|
f(500,16,1,3)
|
|
f(500,17,1,2)
|
|
u(276)
|
|
u(236)
|
|
u(244)
|
|
u(260)
|
|
u(268)
|
|
u(252)
|
|
f(92,8,2,3)
|
|
u(20)
|
|
u(36)
|
|
u(28)
|
|
f(44,12,1,2)
|
|
f(540,5,2,108)
|
|
u(532)
|
|
u(524)
|
|
u(556)
|
|
u(548)
|
|
u(148)
|
|
u(140)
|
|
u(132)
|
|
u(116)
|
|
u(108)
|
|
f(1444,15,12,50)
|
|
f(1452,16,1,22)
|
|
f(124,17,2,20)
|
|
f(156,18,10,8)
|
|
f(228,19,2,2)
|
|
n(508)
|
|
n(605)
|
|
u(773)
|
|
u(757)
|
|
u(789)
|
|
u(573)
|
|
u(741)
|
|
u(613)
|
|
u(629)
|
|
u(621)
|
|
f(579,18,2)
|
|
f(1460,16,2,27)
|
|
f(124,17,11,16)
|
|
f(156,18,13,3)
|
|
u(605)
|
|
u(773)
|
|
u(757)
|
|
u(789)
|
|
u(573)
|
|
u(741)
|
|
u(613)
|
|
u(629)
|
|
u(621)
|
|
f(1468,15,3,46)
|
|
f(124,16,19,27)
|
|
f(100,17,10,4)
|
|
n(156,13)
|
|
f(228,18,1,2)
|
|
n(605,10)
|
|
u(773)
|
|
u(757)
|
|
u(789)
|
|
u(573)
|
|
u(741)
|
|
u(613)
|
|
u(629)
|
|
f(621,26,1,9)
|
|
f(713,1,9,405)
|
|
u(697)
|
|
u(705,229)
|
|
f(1241,4,1,228)
|
|
u(1177)
|
|
u(1225)
|
|
u(1185)
|
|
u(1161)
|
|
u(1169)
|
|
u(1249,107)
|
|
f(977,11,2,105)
|
|
f(1233,12,2,103,2,0,0)
|
|
u(657,13)
|
|
f(674,14,4,9,8,0,0)
|
|
f(866,15,1,3)
|
|
u(866)
|
|
f(906,15,3,5,4,0,0)
|
|
u(906,3,2,0,0)
|
|
u(922)
|
|
f(1018,18,1,2)
|
|
f(922,16,2)
|
|
f(1201,13,2,90,2,0,0)
|
|
u(1098,87,57,0,0)
|
|
u(1074,87,59,0,0)
|
|
u(1057,4)
|
|
u(689)
|
|
f(890,18,1,3)
|
|
f(914,19,1,2)
|
|
f(1082,16,2,83,59,1,0)
|
|
f(682,17,41,2)
|
|
n(1066,17)
|
|
u(1050)
|
|
f(1089,17,17,23,0,0,2)
|
|
f(1265,14,23,3)
|
|
u(1273)
|
|
u(985)
|
|
u(985)
|
|
u(993)
|
|
u(993)
|
|
u(1009)
|
|
u(1008)
|
|
u(172)
|
|
u(164)
|
|
u(212)
|
|
u(220)
|
|
u(587)
|
|
u(605)
|
|
u(773)
|
|
u(757)
|
|
u(789)
|
|
u(573)
|
|
u(741)
|
|
u(613)
|
|
u(629)
|
|
u(621)
|
|
f(1257,10,3,121)
|
|
u(1209)
|
|
u(1257)
|
|
u(1281)
|
|
f(1001,14,1,117)
|
|
u(1025)
|
|
u(1153)
|
|
u(1105,21,0,1,0)
|
|
f(1034,18,13,4)
|
|
u(1042)
|
|
f(666,20,1,3)
|
|
f(1315,18,3,4)
|
|
f(1121,17,4,73)
|
|
u(1113)
|
|
u(1137,16)
|
|
f(1034,20,14,2,1,0,0)
|
|
u(1042)
|
|
f(1145,19,2,57,0,2,1)
|
|
f(1033,20,54,3)
|
|
u(1042)
|
|
u(666)
|
|
f(1129,17,3,23)
|
|
u(1113)
|
|
u(1137)
|
|
f(1033,20,18,5,1,0,0)
|
|
u(1042)
|
|
u(666)
|
|
f(1218,14,5,3,1,0,0)
|
|
u(1194,3,1,0,0)
|
|
u(986,3,1,0,0)
|
|
f(985,17,1,2)
|
|
u(993)
|
|
u(993)
|
|
u(1009)
|
|
u(1008)
|
|
u(172)
|
|
u(164)
|
|
u(212)
|
|
u(220)
|
|
f(721,3,2,107)
|
|
u(969)
|
|
u(969)
|
|
f(801,6,4,97)
|
|
u(801,97,0,0,1)
|
|
f(793,8,77,14)
|
|
u(857,14,1,0,0)
|
|
u(1393,14,1,0,0)
|
|
f(1385,11,1,13)
|
|
u(961,3)
|
|
u(1417)
|
|
u(1409)
|
|
u(938)
|
|
u(882)
|
|
f(1401,12,3,10,2,0,0)
|
|
u(1329,10,3,0,0)
|
|
u(1329,10,3,0,0)
|
|
u(1329,10,3,0,0)
|
|
u(1337,10,3,1,0)
|
|
f(1361,17,2,8,2,0,0)
|
|
u(1361,8,2,0,0)
|
|
u(1369,6)
|
|
u(1345)
|
|
u(1353)
|
|
u(195)
|
|
u(563)
|
|
u(765)
|
|
u(749)
|
|
f(1301,26,1,5)
|
|
u(1437)
|
|
f(1309,28,1,4)
|
|
u(781)
|
|
f(645,30,1,3)
|
|
u(653)
|
|
f(1378,19,3,2)
|
|
u(954)
|
|
u(1291)
|
|
f(874,8,2,6,5,0,0)
|
|
u(874,6,5,0,0)
|
|
u(930,6,5,0,0)
|
|
f(985,6,6)
|
|
u(985)
|
|
u(993)
|
|
u(993)
|
|
u(1009)
|
|
u(1008,6,0,1,4)
|
|
f(172,12,2,4)
|
|
u(164)
|
|
u(212)
|
|
u(220)
|
|
u(587)
|
|
f(605,17,1,3)
|
|
u(773)
|
|
u(757)
|
|
u(789)
|
|
u(573)
|
|
u(741)
|
|
u(613)
|
|
u(629)
|
|
u(621)
|
|
f(729,3,3,69,0,2,1)
|
|
f(817,4,21,2)
|
|
u(1009)
|
|
u(945)
|
|
u(179)
|
|
u(595)
|
|
f(842,4,2,8,5,0,0)
|
|
f(826,5,1,7,5,0,0)
|
|
f(809,6,5,2)
|
|
u(1008,2,0,0,1)
|
|
f(849,4,2,38)
|
|
u(849,38,0,0,2)
|
|
f(834,6,12,23,21,0,0)
|
|
f(826,7,6,17,15,1,0)
|
|
f(898,6,17,3)
|
|
|
|
search();
|
|
</script></body></html>
|