mirror of
https://github.com/graalvm/setup-graalvm.git
synced 2025-02-23 20:42:25 +08:00
Extend build reports with new data.
Updated schema: f196ab0325/docs/reference-manual/native-image/assets/build-output-schema-v0.9.1.json
This commit is contained in:
parent
91fd4d0716
commit
4a5400ac9a
108
dist/cleanup/index.js
generated
vendored
108
dist/cleanup/index.js
generated
vendored
@ -70227,9 +70227,9 @@ function setUpNativeImageBuildReports(isGraalVMforJDK17OrLater, graalVMVersion)
|
|||||||
if (!isRequired) {
|
if (!isRequired) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const isSupported = graalVMVersion === c.VERSION_LATEST ||
|
const isSupported = isGraalVMforJDK17OrLater ||
|
||||||
|
graalVMVersion === c.VERSION_LATEST ||
|
||||||
graalVMVersion === c.VERSION_DEV ||
|
graalVMVersion === c.VERSION_DEV ||
|
||||||
isGraalVMforJDK17OrLater ||
|
|
||||||
(!graalVMVersion.startsWith(c.MANDREL_NAMESPACE) &&
|
(!graalVMVersion.startsWith(c.MANDREL_NAMESPACE) &&
|
||||||
(0, semver_1.gte)((0, utils_1.toSemVer)(graalVMVersion), '22.2.0'));
|
(0, semver_1.gte)((0, utils_1.toSemVer)(graalVMVersion), '22.2.0'));
|
||||||
if (!isSupported) {
|
if (!isSupported) {
|
||||||
@ -70287,7 +70287,12 @@ function createReport(data) {
|
|||||||
const context = github.context;
|
const context = github.context;
|
||||||
const info = data.general_info;
|
const info = data.general_info;
|
||||||
const analysis = data.analysis_results;
|
const analysis = data.analysis_results;
|
||||||
|
const analysisTypes = analysis.types ? analysis.types : analysis.classes;
|
||||||
const details = data.image_details;
|
const details = data.image_details;
|
||||||
|
let objectCount = '';
|
||||||
|
if (details.image_heap.objects) {
|
||||||
|
objectCount = `${details.image_heap.objects.count.toLocaleString()} objects, `;
|
||||||
|
}
|
||||||
const debugInfoBytes = details.debug_info ? details.debug_info.bytes : 0;
|
const debugInfoBytes = details.debug_info ? details.debug_info.bytes : 0;
|
||||||
const otherBytes = details.total_bytes -
|
const otherBytes = details.total_bytes -
|
||||||
details.code_area.bytes -
|
details.code_area.bytes -
|
||||||
@ -70303,25 +70308,64 @@ function createReport(data) {
|
|||||||
<td align="left"></td>
|
<td align="left"></td>
|
||||||
</tr>`;
|
</tr>`;
|
||||||
}
|
}
|
||||||
|
let versionLine;
|
||||||
|
if (info.vendor_version) {
|
||||||
|
versionLine = `
|
||||||
|
<tr>
|
||||||
|
<td><a href="${DOCS_BASE}#glossary-java-info" target="_blank">Java version</a></td>
|
||||||
|
<td>${info.java_version}</td>
|
||||||
|
<td><a href="${DOCS_BASE}#glossary-java-info" target="_blank">Vendor version</a></td>
|
||||||
|
<td>${info.vendor_version}</td>
|
||||||
|
</tr>`;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
versionLine = `
|
||||||
|
<tr>
|
||||||
|
<td><a href="${DOCS_BASE}#glossary-version-info" target="_blank">GraalVM version</a></td>
|
||||||
|
<td>${info.graalvm_version}</td>
|
||||||
|
<td><a href="${DOCS_BASE}#glossary-java-version-info" target="_blank">Java version</a></td>
|
||||||
|
<td>${info.java_version}</td>
|
||||||
|
</tr>`;
|
||||||
|
}
|
||||||
|
let graalLine;
|
||||||
|
if (info.graal_compiler) {
|
||||||
|
let pgoSuffix = '';
|
||||||
|
const isOracleGraalVM = info.vendor_version && info.vendor_version.includes('Oracle GraalVM');
|
||||||
|
if (isOracleGraalVM) {
|
||||||
|
const pgo = info.graal_compiler.pgo;
|
||||||
|
const pgoText = pgo ? pgo.join('+') : 'off';
|
||||||
|
pgoSuffix = `, <a href="${DOCS_BASE}#recommendation-pgo" target="_blank">PGO</a>: ${pgoText}`;
|
||||||
|
}
|
||||||
|
graalLine = `
|
||||||
|
<tr>
|
||||||
|
<td align="left"><a href="${DOCS_BASE}#glossary-graal-compiler" target="_blank">Graal compiler</a></td>
|
||||||
|
<td colspan="3">
|
||||||
|
optimization level: ${info.graal_compiler.optimization_level},
|
||||||
|
target machine: ${info.graal_compiler.march}${pgoSuffix}
|
||||||
|
</td>
|
||||||
|
</tr>`;
|
||||||
|
}
|
||||||
const resources = data.resource_usage;
|
const resources = data.resource_usage;
|
||||||
|
let totalTime = '';
|
||||||
|
let gcTotalTimeRatio = '';
|
||||||
|
if (resources.total_secs) {
|
||||||
|
totalTime = ` in ${secondsToHuman(resources.total_secs)}`;
|
||||||
|
gcTotalTimeRatio = ` (${toPercent(resources.garbage_collection.total_secs, resources.total_secs)} of total time)`;
|
||||||
|
}
|
||||||
return `## GraalVM Native Image Build Report
|
return `## GraalVM Native Image Build Report
|
||||||
|
|
||||||
\`${info.name}\` generated as part of the '${context.job}' job in run <a href="${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}" target="_blank">#${context.runNumber}</a>.
|
\`${info.name}\` generated${totalTime} as part of the '${context.job}' job in run <a href="${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}" target="_blank">#${context.runNumber}</a>.
|
||||||
|
|
||||||
#### Environment
|
#### Environment
|
||||||
|
|
||||||
<table>
|
<table>${versionLine}${graalLine}
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="${DOCS_BASE}#glossary-version-info" target="_blank">GraalVM version</a></td>
|
|
||||||
<td>${info.graalvm_version}</td>
|
|
||||||
<td><a href="${DOCS_BASE}#glossary-ccompiler" target="_blank">C compiler</a></td>
|
<td><a href="${DOCS_BASE}#glossary-ccompiler" target="_blank">C compiler</a></td>
|
||||||
<td>${info.c_compiler}</td>
|
<td colspan="3">${info.c_compiler}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="${DOCS_BASE}#glossary-java-version-info" target="_blank">Java version</a></td>
|
|
||||||
<td>${info.java_version}</td>
|
|
||||||
<td><a href="${DOCS_BASE}#glossary-gc" target="_blank">Garbage collector</a></td>
|
<td><a href="${DOCS_BASE}#glossary-gc" target="_blank">Garbage collector</a></td>
|
||||||
<td>${info.garbage_collector}</td>
|
<td colspan="3">${info.garbage_collector}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
@ -70342,38 +70386,38 @@ function createReport(data) {
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><a href="${DOCS_BASE}#glossary-reachability" target="_blank">Reachable</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-reachability" target="_blank">Reachable</a></td>
|
||||||
<td align="right">${analysis.classes.reachable}</td>
|
<td align="right">${analysisTypes.reachable.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(analysis.classes.reachable, analysis.classes.total)}</td>
|
<td align="right">${toPercent(analysisTypes.reachable, analysisTypes.total)}</td>
|
||||||
<td align="right">${analysis.fields.reachable}</td>
|
<td align="right">${analysis.fields.reachable.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(analysis.fields.reachable, analysis.fields.total)}</td>
|
<td align="right">${toPercent(analysis.fields.reachable, analysis.fields.total)}</td>
|
||||||
<td align="right">${analysis.methods.reachable}</td>
|
<td align="right">${analysis.methods.reachable.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(analysis.methods.reachable, analysis.methods.total)}</td>
|
<td align="right">${toPercent(analysis.methods.reachable, analysis.methods.total)}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><a href="${DOCS_BASE}#glossary-reflection-registrations" target="_blank">Reflection</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-reflection-registrations" target="_blank">Reflection</a></td>
|
||||||
<td align="right">${analysis.classes.reflection}</td>
|
<td align="right">${analysisTypes.reflection.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(analysis.classes.reflection, analysis.classes.total)}</td>
|
<td align="right">${toPercent(analysisTypes.reflection, analysisTypes.total)}</td>
|
||||||
<td align="right">${analysis.fields.reflection}</td>
|
<td align="right">${analysis.fields.reflection.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(analysis.fields.reflection, analysis.fields.total)}</td>
|
<td align="right">${toPercent(analysis.fields.reflection, analysis.fields.total)}</td>
|
||||||
<td align="right">${analysis.methods.reflection}</td>
|
<td align="right">${analysis.methods.reflection.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(analysis.methods.reflection, analysis.methods.total)}</td>
|
<td align="right">${toPercent(analysis.methods.reflection, analysis.methods.total)}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><a href="${DOCS_BASE}#glossary-jni-access-registrations" target="_blank">JNI</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-jni-access-registrations" target="_blank">JNI</a></td>
|
||||||
<td align="right">${analysis.classes.jni}</td>
|
<td align="right">${analysisTypes.jni.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(analysis.classes.jni, analysis.classes.total)}</td>
|
<td align="right">${toPercent(analysisTypes.jni, analysisTypes.total)}</td>
|
||||||
<td align="right">${analysis.fields.jni}</td>
|
<td align="right">${analysis.fields.jni.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(analysis.fields.jni, analysis.fields.total)}</td>
|
<td align="right">${toPercent(analysis.fields.jni, analysis.fields.total)}</td>
|
||||||
<td align="right">${analysis.methods.jni}</td>
|
<td align="right">${analysis.methods.jni.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(analysis.methods.jni, analysis.methods.total)}</td>
|
<td align="right">${toPercent(analysis.methods.jni, analysis.methods.total)}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><a href="${DOCS_BASE}#glossary-reachability" target="_blank">Loaded</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-reachability" target="_blank">Loaded</a></td>
|
||||||
<td align="right">${analysis.classes.total}</td>
|
<td align="right">${analysisTypes.total.toLocaleString()}</td>
|
||||||
<td align="right">100.000%</td>
|
<td align="right">100.000%</td>
|
||||||
<td align="right">${analysis.fields.total}</td>
|
<td align="right">${analysis.fields.total.toLocaleString()}</td>
|
||||||
<td align="right">100.000%</td>
|
<td align="right">100.000%</td>
|
||||||
<td align="right">${analysis.methods.total}</td>
|
<td align="right">${analysis.methods.total.toLocaleString()}</td>
|
||||||
<td align="right">100.000%</td>
|
<td align="right">100.000%</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@ -70395,13 +70439,13 @@ function createReport(data) {
|
|||||||
<td align="left"><a href="${DOCS_BASE}#glossary-code-area" target="_blank">Code area</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-code-area" target="_blank">Code area</a></td>
|
||||||
<td align="right">${bytesToHuman(details.code_area.bytes)}</td>
|
<td align="right">${bytesToHuman(details.code_area.bytes)}</td>
|
||||||
<td align="right">${toPercent(details.code_area.bytes, details.total_bytes)}</td>
|
<td align="right">${toPercent(details.code_area.bytes, details.total_bytes)}</td>
|
||||||
<td align="left">${details.code_area.compilation_units} compilation units</td>
|
<td align="left">${details.code_area.compilation_units.toLocaleString()} compilation units</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><a href="${DOCS_BASE}#glossary-image-heap" target="_blank">Image heap</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-image-heap" target="_blank">Image heap</a></td>
|
||||||
<td align="right">${bytesToHuman(details.image_heap.bytes)}</td>
|
<td align="right">${bytesToHuman(details.image_heap.bytes)}</td>
|
||||||
<td align="right">${toPercent(details.image_heap.bytes, details.total_bytes)}</td>
|
<td align="right">${toPercent(details.image_heap.bytes, details.total_bytes)}</td>
|
||||||
<td align="left">${bytesToHuman(details.image_heap.resources.bytes)} for ${details.image_heap.resources.count} resources</td>
|
<td align="left">${objectCount}${bytesToHuman(details.image_heap.resources.bytes)} for ${details.image_heap.resources.count.toLocaleString()} resources</td>
|
||||||
</tr>${debugInfoLine}
|
</tr>${debugInfoLine}
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><a href="${DOCS_BASE}#glossary-other-data" target="_blank">Other data</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-other-data" target="_blank">Other data</a></td>
|
||||||
@ -70424,7 +70468,7 @@ function createReport(data) {
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><a href="${DOCS_BASE}#glossary-garbage-collections" target="_blank">Garbage collection</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-garbage-collections" target="_blank">Garbage collection</a></td>
|
||||||
<td align="left">${resources.garbage_collection.total_secs.toFixed(2)}s in ${resources.garbage_collection.count} GCs</td>
|
<td align="left">${resources.garbage_collection.total_secs.toFixed(2)}s${gcTotalTimeRatio} in ${resources.garbage_collection.count} GCs</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><a href="${DOCS_BASE}#glossary-peak-rss" target="_blank">Peak RSS</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-peak-rss" target="_blank">Peak RSS</a></td>
|
||||||
@ -70456,6 +70500,14 @@ function bytesToHuman(bytes) {
|
|||||||
return `${(bytes / BYTES_TO_GiB).toFixed(2)}GB`;
|
return `${(bytes / BYTES_TO_GiB).toFixed(2)}GB`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
function secondsToHuman(seconds) {
|
||||||
|
if (seconds < 60) {
|
||||||
|
return `${seconds.toFixed(1)}s`;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return `${Math.trunc(seconds / 60)}m ${Math.trunc(seconds % 60)}s`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
108
dist/main/index.js
generated
vendored
108
dist/main/index.js
generated
vendored
@ -70345,9 +70345,9 @@ function setUpNativeImageBuildReports(isGraalVMforJDK17OrLater, graalVMVersion)
|
|||||||
if (!isRequired) {
|
if (!isRequired) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const isSupported = graalVMVersion === c.VERSION_LATEST ||
|
const isSupported = isGraalVMforJDK17OrLater ||
|
||||||
|
graalVMVersion === c.VERSION_LATEST ||
|
||||||
graalVMVersion === c.VERSION_DEV ||
|
graalVMVersion === c.VERSION_DEV ||
|
||||||
isGraalVMforJDK17OrLater ||
|
|
||||||
(!graalVMVersion.startsWith(c.MANDREL_NAMESPACE) &&
|
(!graalVMVersion.startsWith(c.MANDREL_NAMESPACE) &&
|
||||||
(0, semver_1.gte)((0, utils_1.toSemVer)(graalVMVersion), '22.2.0'));
|
(0, semver_1.gte)((0, utils_1.toSemVer)(graalVMVersion), '22.2.0'));
|
||||||
if (!isSupported) {
|
if (!isSupported) {
|
||||||
@ -70405,7 +70405,12 @@ function createReport(data) {
|
|||||||
const context = github.context;
|
const context = github.context;
|
||||||
const info = data.general_info;
|
const info = data.general_info;
|
||||||
const analysis = data.analysis_results;
|
const analysis = data.analysis_results;
|
||||||
|
const analysisTypes = analysis.types ? analysis.types : analysis.classes;
|
||||||
const details = data.image_details;
|
const details = data.image_details;
|
||||||
|
let objectCount = '';
|
||||||
|
if (details.image_heap.objects) {
|
||||||
|
objectCount = `${details.image_heap.objects.count.toLocaleString()} objects, `;
|
||||||
|
}
|
||||||
const debugInfoBytes = details.debug_info ? details.debug_info.bytes : 0;
|
const debugInfoBytes = details.debug_info ? details.debug_info.bytes : 0;
|
||||||
const otherBytes = details.total_bytes -
|
const otherBytes = details.total_bytes -
|
||||||
details.code_area.bytes -
|
details.code_area.bytes -
|
||||||
@ -70421,25 +70426,64 @@ function createReport(data) {
|
|||||||
<td align="left"></td>
|
<td align="left"></td>
|
||||||
</tr>`;
|
</tr>`;
|
||||||
}
|
}
|
||||||
|
let versionLine;
|
||||||
|
if (info.vendor_version) {
|
||||||
|
versionLine = `
|
||||||
|
<tr>
|
||||||
|
<td><a href="${DOCS_BASE}#glossary-java-info" target="_blank">Java version</a></td>
|
||||||
|
<td>${info.java_version}</td>
|
||||||
|
<td><a href="${DOCS_BASE}#glossary-java-info" target="_blank">Vendor version</a></td>
|
||||||
|
<td>${info.vendor_version}</td>
|
||||||
|
</tr>`;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
versionLine = `
|
||||||
|
<tr>
|
||||||
|
<td><a href="${DOCS_BASE}#glossary-version-info" target="_blank">GraalVM version</a></td>
|
||||||
|
<td>${info.graalvm_version}</td>
|
||||||
|
<td><a href="${DOCS_BASE}#glossary-java-version-info" target="_blank">Java version</a></td>
|
||||||
|
<td>${info.java_version}</td>
|
||||||
|
</tr>`;
|
||||||
|
}
|
||||||
|
let graalLine;
|
||||||
|
if (info.graal_compiler) {
|
||||||
|
let pgoSuffix = '';
|
||||||
|
const isOracleGraalVM = info.vendor_version && info.vendor_version.includes('Oracle GraalVM');
|
||||||
|
if (isOracleGraalVM) {
|
||||||
|
const pgo = info.graal_compiler.pgo;
|
||||||
|
const pgoText = pgo ? pgo.join('+') : 'off';
|
||||||
|
pgoSuffix = `, <a href="${DOCS_BASE}#recommendation-pgo" target="_blank">PGO</a>: ${pgoText}`;
|
||||||
|
}
|
||||||
|
graalLine = `
|
||||||
|
<tr>
|
||||||
|
<td align="left"><a href="${DOCS_BASE}#glossary-graal-compiler" target="_blank">Graal compiler</a></td>
|
||||||
|
<td colspan="3">
|
||||||
|
optimization level: ${info.graal_compiler.optimization_level},
|
||||||
|
target machine: ${info.graal_compiler.march}${pgoSuffix}
|
||||||
|
</td>
|
||||||
|
</tr>`;
|
||||||
|
}
|
||||||
const resources = data.resource_usage;
|
const resources = data.resource_usage;
|
||||||
|
let totalTime = '';
|
||||||
|
let gcTotalTimeRatio = '';
|
||||||
|
if (resources.total_secs) {
|
||||||
|
totalTime = ` in ${secondsToHuman(resources.total_secs)}`;
|
||||||
|
gcTotalTimeRatio = ` (${toPercent(resources.garbage_collection.total_secs, resources.total_secs)} of total time)`;
|
||||||
|
}
|
||||||
return `## GraalVM Native Image Build Report
|
return `## GraalVM Native Image Build Report
|
||||||
|
|
||||||
\`${info.name}\` generated as part of the '${context.job}' job in run <a href="${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}" target="_blank">#${context.runNumber}</a>.
|
\`${info.name}\` generated${totalTime} as part of the '${context.job}' job in run <a href="${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}" target="_blank">#${context.runNumber}</a>.
|
||||||
|
|
||||||
#### Environment
|
#### Environment
|
||||||
|
|
||||||
<table>
|
<table>${versionLine}${graalLine}
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="${DOCS_BASE}#glossary-version-info" target="_blank">GraalVM version</a></td>
|
|
||||||
<td>${info.graalvm_version}</td>
|
|
||||||
<td><a href="${DOCS_BASE}#glossary-ccompiler" target="_blank">C compiler</a></td>
|
<td><a href="${DOCS_BASE}#glossary-ccompiler" target="_blank">C compiler</a></td>
|
||||||
<td>${info.c_compiler}</td>
|
<td colspan="3">${info.c_compiler}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="${DOCS_BASE}#glossary-java-version-info" target="_blank">Java version</a></td>
|
|
||||||
<td>${info.java_version}</td>
|
|
||||||
<td><a href="${DOCS_BASE}#glossary-gc" target="_blank">Garbage collector</a></td>
|
<td><a href="${DOCS_BASE}#glossary-gc" target="_blank">Garbage collector</a></td>
|
||||||
<td>${info.garbage_collector}</td>
|
<td colspan="3">${info.garbage_collector}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
@ -70460,38 +70504,38 @@ function createReport(data) {
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><a href="${DOCS_BASE}#glossary-reachability" target="_blank">Reachable</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-reachability" target="_blank">Reachable</a></td>
|
||||||
<td align="right">${analysis.classes.reachable}</td>
|
<td align="right">${analysisTypes.reachable.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(analysis.classes.reachable, analysis.classes.total)}</td>
|
<td align="right">${toPercent(analysisTypes.reachable, analysisTypes.total)}</td>
|
||||||
<td align="right">${analysis.fields.reachable}</td>
|
<td align="right">${analysis.fields.reachable.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(analysis.fields.reachable, analysis.fields.total)}</td>
|
<td align="right">${toPercent(analysis.fields.reachable, analysis.fields.total)}</td>
|
||||||
<td align="right">${analysis.methods.reachable}</td>
|
<td align="right">${analysis.methods.reachable.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(analysis.methods.reachable, analysis.methods.total)}</td>
|
<td align="right">${toPercent(analysis.methods.reachable, analysis.methods.total)}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><a href="${DOCS_BASE}#glossary-reflection-registrations" target="_blank">Reflection</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-reflection-registrations" target="_blank">Reflection</a></td>
|
||||||
<td align="right">${analysis.classes.reflection}</td>
|
<td align="right">${analysisTypes.reflection.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(analysis.classes.reflection, analysis.classes.total)}</td>
|
<td align="right">${toPercent(analysisTypes.reflection, analysisTypes.total)}</td>
|
||||||
<td align="right">${analysis.fields.reflection}</td>
|
<td align="right">${analysis.fields.reflection.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(analysis.fields.reflection, analysis.fields.total)}</td>
|
<td align="right">${toPercent(analysis.fields.reflection, analysis.fields.total)}</td>
|
||||||
<td align="right">${analysis.methods.reflection}</td>
|
<td align="right">${analysis.methods.reflection.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(analysis.methods.reflection, analysis.methods.total)}</td>
|
<td align="right">${toPercent(analysis.methods.reflection, analysis.methods.total)}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><a href="${DOCS_BASE}#glossary-jni-access-registrations" target="_blank">JNI</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-jni-access-registrations" target="_blank">JNI</a></td>
|
||||||
<td align="right">${analysis.classes.jni}</td>
|
<td align="right">${analysisTypes.jni.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(analysis.classes.jni, analysis.classes.total)}</td>
|
<td align="right">${toPercent(analysisTypes.jni, analysisTypes.total)}</td>
|
||||||
<td align="right">${analysis.fields.jni}</td>
|
<td align="right">${analysis.fields.jni.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(analysis.fields.jni, analysis.fields.total)}</td>
|
<td align="right">${toPercent(analysis.fields.jni, analysis.fields.total)}</td>
|
||||||
<td align="right">${analysis.methods.jni}</td>
|
<td align="right">${analysis.methods.jni.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(analysis.methods.jni, analysis.methods.total)}</td>
|
<td align="right">${toPercent(analysis.methods.jni, analysis.methods.total)}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><a href="${DOCS_BASE}#glossary-reachability" target="_blank">Loaded</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-reachability" target="_blank">Loaded</a></td>
|
||||||
<td align="right">${analysis.classes.total}</td>
|
<td align="right">${analysisTypes.total.toLocaleString()}</td>
|
||||||
<td align="right">100.000%</td>
|
<td align="right">100.000%</td>
|
||||||
<td align="right">${analysis.fields.total}</td>
|
<td align="right">${analysis.fields.total.toLocaleString()}</td>
|
||||||
<td align="right">100.000%</td>
|
<td align="right">100.000%</td>
|
||||||
<td align="right">${analysis.methods.total}</td>
|
<td align="right">${analysis.methods.total.toLocaleString()}</td>
|
||||||
<td align="right">100.000%</td>
|
<td align="right">100.000%</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@ -70513,13 +70557,13 @@ function createReport(data) {
|
|||||||
<td align="left"><a href="${DOCS_BASE}#glossary-code-area" target="_blank">Code area</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-code-area" target="_blank">Code area</a></td>
|
||||||
<td align="right">${bytesToHuman(details.code_area.bytes)}</td>
|
<td align="right">${bytesToHuman(details.code_area.bytes)}</td>
|
||||||
<td align="right">${toPercent(details.code_area.bytes, details.total_bytes)}</td>
|
<td align="right">${toPercent(details.code_area.bytes, details.total_bytes)}</td>
|
||||||
<td align="left">${details.code_area.compilation_units} compilation units</td>
|
<td align="left">${details.code_area.compilation_units.toLocaleString()} compilation units</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><a href="${DOCS_BASE}#glossary-image-heap" target="_blank">Image heap</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-image-heap" target="_blank">Image heap</a></td>
|
||||||
<td align="right">${bytesToHuman(details.image_heap.bytes)}</td>
|
<td align="right">${bytesToHuman(details.image_heap.bytes)}</td>
|
||||||
<td align="right">${toPercent(details.image_heap.bytes, details.total_bytes)}</td>
|
<td align="right">${toPercent(details.image_heap.bytes, details.total_bytes)}</td>
|
||||||
<td align="left">${bytesToHuman(details.image_heap.resources.bytes)} for ${details.image_heap.resources.count} resources</td>
|
<td align="left">${objectCount}${bytesToHuman(details.image_heap.resources.bytes)} for ${details.image_heap.resources.count.toLocaleString()} resources</td>
|
||||||
</tr>${debugInfoLine}
|
</tr>${debugInfoLine}
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><a href="${DOCS_BASE}#glossary-other-data" target="_blank">Other data</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-other-data" target="_blank">Other data</a></td>
|
||||||
@ -70542,7 +70586,7 @@ function createReport(data) {
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><a href="${DOCS_BASE}#glossary-garbage-collections" target="_blank">Garbage collection</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-garbage-collections" target="_blank">Garbage collection</a></td>
|
||||||
<td align="left">${resources.garbage_collection.total_secs.toFixed(2)}s in ${resources.garbage_collection.count} GCs</td>
|
<td align="left">${resources.garbage_collection.total_secs.toFixed(2)}s${gcTotalTimeRatio} in ${resources.garbage_collection.count} GCs</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><a href="${DOCS_BASE}#glossary-peak-rss" target="_blank">Peak RSS</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-peak-rss" target="_blank">Peak RSS</a></td>
|
||||||
@ -70574,6 +70618,14 @@ function bytesToHuman(bytes) {
|
|||||||
return `${(bytes / BYTES_TO_GiB).toFixed(2)}GB`;
|
return `${(bytes / BYTES_TO_GiB).toFixed(2)}GB`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
function secondsToHuman(seconds) {
|
||||||
|
if (seconds < 60) {
|
||||||
|
return `${seconds.toFixed(1)}s`;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return `${Math.trunc(seconds / 60)}m ${Math.trunc(seconds % 60)}s`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
@ -33,11 +33,18 @@ interface BuildOutput {
|
|||||||
name: string
|
name: string
|
||||||
graalvm_version: string
|
graalvm_version: string
|
||||||
java_version: string | null
|
java_version: string | null
|
||||||
|
vendor_version?: string
|
||||||
c_compiler: string | null
|
c_compiler: string | null
|
||||||
garbage_collector: string
|
garbage_collector: string
|
||||||
|
graal_compiler?: {
|
||||||
|
optimization_level: string
|
||||||
|
march: string
|
||||||
|
pgo?: string[]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
analysis_results: {
|
analysis_results: {
|
||||||
classes: AnalysisResult
|
classes: AnalysisResult
|
||||||
|
types?: AnalysisResult
|
||||||
fields: AnalysisResult
|
fields: AnalysisResult
|
||||||
methods: AnalysisResult
|
methods: AnalysisResult
|
||||||
}
|
}
|
||||||
@ -49,6 +56,9 @@ interface BuildOutput {
|
|||||||
}
|
}
|
||||||
image_heap: {
|
image_heap: {
|
||||||
bytes: number
|
bytes: number
|
||||||
|
objects?: {
|
||||||
|
count: number
|
||||||
|
}
|
||||||
resources: {
|
resources: {
|
||||||
count: number
|
count: number
|
||||||
bytes: number
|
bytes: number
|
||||||
@ -75,6 +85,7 @@ interface BuildOutput {
|
|||||||
system_total: number
|
system_total: number
|
||||||
peak_rss_bytes: number
|
peak_rss_bytes: number
|
||||||
}
|
}
|
||||||
|
total_secs?: number
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,9 +98,9 @@ export async function setUpNativeImageBuildReports(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
const isSupported =
|
const isSupported =
|
||||||
|
isGraalVMforJDK17OrLater ||
|
||||||
graalVMVersion === c.VERSION_LATEST ||
|
graalVMVersion === c.VERSION_LATEST ||
|
||||||
graalVMVersion === c.VERSION_DEV ||
|
graalVMVersion === c.VERSION_DEV ||
|
||||||
isGraalVMforJDK17OrLater ||
|
|
||||||
(!graalVMVersion.startsWith(c.MANDREL_NAMESPACE) &&
|
(!graalVMVersion.startsWith(c.MANDREL_NAMESPACE) &&
|
||||||
gte(toSemVer(graalVMVersion), '22.2.0'))
|
gte(toSemVer(graalVMVersion), '22.2.0'))
|
||||||
if (!isSupported) {
|
if (!isSupported) {
|
||||||
@ -155,7 +166,12 @@ function createReport(data: BuildOutput): string {
|
|||||||
const context = github.context
|
const context = github.context
|
||||||
const info = data.general_info
|
const info = data.general_info
|
||||||
const analysis = data.analysis_results
|
const analysis = data.analysis_results
|
||||||
|
const analysisTypes = analysis.types ? analysis.types : analysis.classes
|
||||||
const details = data.image_details
|
const details = data.image_details
|
||||||
|
let objectCount = ''
|
||||||
|
if (details.image_heap.objects) {
|
||||||
|
objectCount = `${details.image_heap.objects.count.toLocaleString()} objects, `
|
||||||
|
}
|
||||||
const debugInfoBytes = details.debug_info ? details.debug_info.bytes : 0
|
const debugInfoBytes = details.debug_info ? details.debug_info.bytes : 0
|
||||||
const otherBytes =
|
const otherBytes =
|
||||||
details.total_bytes -
|
details.total_bytes -
|
||||||
@ -172,12 +188,59 @@ function createReport(data: BuildOutput): string {
|
|||||||
<td align="left"></td>
|
<td align="left"></td>
|
||||||
</tr>`
|
</tr>`
|
||||||
}
|
}
|
||||||
|
let versionLine
|
||||||
|
if (info.vendor_version) {
|
||||||
|
versionLine = `
|
||||||
|
<tr>
|
||||||
|
<td><a href="${DOCS_BASE}#glossary-java-info" target="_blank">Java version</a></td>
|
||||||
|
<td>${info.java_version}</td>
|
||||||
|
<td><a href="${DOCS_BASE}#glossary-java-info" target="_blank">Vendor version</a></td>
|
||||||
|
<td>${info.vendor_version}</td>
|
||||||
|
</tr>`
|
||||||
|
} else {
|
||||||
|
versionLine = `
|
||||||
|
<tr>
|
||||||
|
<td><a href="${DOCS_BASE}#glossary-version-info" target="_blank">GraalVM version</a></td>
|
||||||
|
<td>${info.graalvm_version}</td>
|
||||||
|
<td><a href="${DOCS_BASE}#glossary-java-version-info" target="_blank">Java version</a></td>
|
||||||
|
<td>${info.java_version}</td>
|
||||||
|
</tr>`
|
||||||
|
}
|
||||||
|
let graalLine
|
||||||
|
if (info.graal_compiler) {
|
||||||
|
let pgoSuffix = ''
|
||||||
|
const isOracleGraalVM =
|
||||||
|
info.vendor_version && info.vendor_version.includes('Oracle GraalVM')
|
||||||
|
if (isOracleGraalVM) {
|
||||||
|
const pgo = info.graal_compiler.pgo
|
||||||
|
const pgoText = pgo ? pgo.join('+') : 'off'
|
||||||
|
pgoSuffix = `, <a href="${DOCS_BASE}#recommendation-pgo" target="_blank">PGO</a>: ${pgoText}`
|
||||||
|
}
|
||||||
|
graalLine = `
|
||||||
|
<tr>
|
||||||
|
<td align="left"><a href="${DOCS_BASE}#glossary-graal-compiler" target="_blank">Graal compiler</a></td>
|
||||||
|
<td colspan="3">
|
||||||
|
optimization level: ${info.graal_compiler.optimization_level},
|
||||||
|
target machine: ${info.graal_compiler.march}${pgoSuffix}
|
||||||
|
</td>
|
||||||
|
</tr>`
|
||||||
|
}
|
||||||
|
|
||||||
const resources = data.resource_usage
|
const resources = data.resource_usage
|
||||||
|
|
||||||
|
let totalTime = ''
|
||||||
|
let gcTotalTimeRatio = ''
|
||||||
|
if (resources.total_secs) {
|
||||||
|
totalTime = ` in ${secondsToHuman(resources.total_secs)}`
|
||||||
|
gcTotalTimeRatio = ` (${toPercent(
|
||||||
|
resources.garbage_collection.total_secs,
|
||||||
|
resources.total_secs
|
||||||
|
)} of total time)`
|
||||||
|
}
|
||||||
|
|
||||||
return `## GraalVM Native Image Build Report
|
return `## GraalVM Native Image Build Report
|
||||||
|
|
||||||
\`${info.name}\` generated as part of the '${
|
\`${info.name}\` generated${totalTime} as part of the '${
|
||||||
context.job
|
context.job
|
||||||
}' job in run <a href="${context.serverUrl}/${context.repo.owner}/${
|
}' job in run <a href="${context.serverUrl}/${context.repo.owner}/${
|
||||||
context.repo.repo
|
context.repo.repo
|
||||||
@ -185,18 +248,14 @@ function createReport(data: BuildOutput): string {
|
|||||||
|
|
||||||
#### Environment
|
#### Environment
|
||||||
|
|
||||||
<table>
|
<table>${versionLine}${graalLine}
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="${DOCS_BASE}#glossary-version-info" target="_blank">GraalVM version</a></td>
|
|
||||||
<td>${info.graalvm_version}</td>
|
|
||||||
<td><a href="${DOCS_BASE}#glossary-ccompiler" target="_blank">C compiler</a></td>
|
<td><a href="${DOCS_BASE}#glossary-ccompiler" target="_blank">C compiler</a></td>
|
||||||
<td>${info.c_compiler}</td>
|
<td colspan="3">${info.c_compiler}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="${DOCS_BASE}#glossary-java-version-info" target="_blank">Java version</a></td>
|
|
||||||
<td>${info.java_version}</td>
|
|
||||||
<td><a href="${DOCS_BASE}#glossary-gc" target="_blank">Garbage collector</a></td>
|
<td><a href="${DOCS_BASE}#glossary-gc" target="_blank">Garbage collector</a></td>
|
||||||
<td>${info.garbage_collector}</td>
|
<td colspan="3">${info.garbage_collector}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
@ -217,17 +276,17 @@ function createReport(data: BuildOutput): string {
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><a href="${DOCS_BASE}#glossary-reachability" target="_blank">Reachable</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-reachability" target="_blank">Reachable</a></td>
|
||||||
<td align="right">${analysis.classes.reachable}</td>
|
<td align="right">${analysisTypes.reachable.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(
|
<td align="right">${toPercent(
|
||||||
analysis.classes.reachable,
|
analysisTypes.reachable,
|
||||||
analysis.classes.total
|
analysisTypes.total
|
||||||
)}</td>
|
)}</td>
|
||||||
<td align="right">${analysis.fields.reachable}</td>
|
<td align="right">${analysis.fields.reachable.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(
|
<td align="right">${toPercent(
|
||||||
analysis.fields.reachable,
|
analysis.fields.reachable,
|
||||||
analysis.fields.total
|
analysis.fields.total
|
||||||
)}</td>
|
)}</td>
|
||||||
<td align="right">${analysis.methods.reachable}</td>
|
<td align="right">${analysis.methods.reachable.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(
|
<td align="right">${toPercent(
|
||||||
analysis.methods.reachable,
|
analysis.methods.reachable,
|
||||||
analysis.methods.total
|
analysis.methods.total
|
||||||
@ -235,17 +294,17 @@ function createReport(data: BuildOutput): string {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><a href="${DOCS_BASE}#glossary-reflection-registrations" target="_blank">Reflection</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-reflection-registrations" target="_blank">Reflection</a></td>
|
||||||
<td align="right">${analysis.classes.reflection}</td>
|
<td align="right">${analysisTypes.reflection.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(
|
<td align="right">${toPercent(
|
||||||
analysis.classes.reflection,
|
analysisTypes.reflection,
|
||||||
analysis.classes.total
|
analysisTypes.total
|
||||||
)}</td>
|
)}</td>
|
||||||
<td align="right">${analysis.fields.reflection}</td>
|
<td align="right">${analysis.fields.reflection.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(
|
<td align="right">${toPercent(
|
||||||
analysis.fields.reflection,
|
analysis.fields.reflection,
|
||||||
analysis.fields.total
|
analysis.fields.total
|
||||||
)}</td>
|
)}</td>
|
||||||
<td align="right">${analysis.methods.reflection}</td>
|
<td align="right">${analysis.methods.reflection.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(
|
<td align="right">${toPercent(
|
||||||
analysis.methods.reflection,
|
analysis.methods.reflection,
|
||||||
analysis.methods.total
|
analysis.methods.total
|
||||||
@ -253,17 +312,17 @@ function createReport(data: BuildOutput): string {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><a href="${DOCS_BASE}#glossary-jni-access-registrations" target="_blank">JNI</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-jni-access-registrations" target="_blank">JNI</a></td>
|
||||||
<td align="right">${analysis.classes.jni}</td>
|
<td align="right">${analysisTypes.jni.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(
|
<td align="right">${toPercent(
|
||||||
analysis.classes.jni,
|
analysisTypes.jni,
|
||||||
analysis.classes.total
|
analysisTypes.total
|
||||||
)}</td>
|
)}</td>
|
||||||
<td align="right">${analysis.fields.jni}</td>
|
<td align="right">${analysis.fields.jni.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(
|
<td align="right">${toPercent(
|
||||||
analysis.fields.jni,
|
analysis.fields.jni,
|
||||||
analysis.fields.total
|
analysis.fields.total
|
||||||
)}</td>
|
)}</td>
|
||||||
<td align="right">${analysis.methods.jni}</td>
|
<td align="right">${analysis.methods.jni.toLocaleString()}</td>
|
||||||
<td align="right">${toPercent(
|
<td align="right">${toPercent(
|
||||||
analysis.methods.jni,
|
analysis.methods.jni,
|
||||||
analysis.methods.total
|
analysis.methods.total
|
||||||
@ -271,11 +330,11 @@ function createReport(data: BuildOutput): string {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><a href="${DOCS_BASE}#glossary-reachability" target="_blank">Loaded</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-reachability" target="_blank">Loaded</a></td>
|
||||||
<td align="right">${analysis.classes.total}</td>
|
<td align="right">${analysisTypes.total.toLocaleString()}</td>
|
||||||
<td align="right">100.000%</td>
|
<td align="right">100.000%</td>
|
||||||
<td align="right">${analysis.fields.total}</td>
|
<td align="right">${analysis.fields.total.toLocaleString()}</td>
|
||||||
<td align="right">100.000%</td>
|
<td align="right">100.000%</td>
|
||||||
<td align="right">${analysis.methods.total}</td>
|
<td align="right">${analysis.methods.total.toLocaleString()}</td>
|
||||||
<td align="right">100.000%</td>
|
<td align="right">100.000%</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@ -300,9 +359,7 @@ function createReport(data: BuildOutput): string {
|
|||||||
details.code_area.bytes,
|
details.code_area.bytes,
|
||||||
details.total_bytes
|
details.total_bytes
|
||||||
)}</td>
|
)}</td>
|
||||||
<td align="left">${
|
<td align="left">${details.code_area.compilation_units.toLocaleString()} compilation units</td>
|
||||||
details.code_area.compilation_units
|
|
||||||
} compilation units</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><a href="${DOCS_BASE}#glossary-image-heap" target="_blank">Image heap</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-image-heap" target="_blank">Image heap</a></td>
|
||||||
@ -311,9 +368,9 @@ function createReport(data: BuildOutput): string {
|
|||||||
details.image_heap.bytes,
|
details.image_heap.bytes,
|
||||||
details.total_bytes
|
details.total_bytes
|
||||||
)}</td>
|
)}</td>
|
||||||
<td align="left">${bytesToHuman(
|
<td align="left">${objectCount}${bytesToHuman(
|
||||||
details.image_heap.resources.bytes
|
details.image_heap.resources.bytes
|
||||||
)} for ${details.image_heap.resources.count} resources</td>
|
)} for ${details.image_heap.resources.count.toLocaleString()} resources</td>
|
||||||
</tr>${debugInfoLine}
|
</tr>${debugInfoLine}
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><a href="${DOCS_BASE}#glossary-other-data" target="_blank">Other data</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-other-data" target="_blank">Other data</a></td>
|
||||||
@ -340,7 +397,7 @@ function createReport(data: BuildOutput): string {
|
|||||||
<td align="left"><a href="${DOCS_BASE}#glossary-garbage-collections" target="_blank">Garbage collection</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-garbage-collections" target="_blank">Garbage collection</a></td>
|
||||||
<td align="left">${resources.garbage_collection.total_secs.toFixed(
|
<td align="left">${resources.garbage_collection.total_secs.toFixed(
|
||||||
2
|
2
|
||||||
)}s in ${resources.garbage_collection.count} GCs</td>
|
)}s${gcTotalTimeRatio} in ${resources.garbage_collection.count} GCs</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align="left"><a href="${DOCS_BASE}#glossary-peak-rss" target="_blank">Peak RSS</a></td>
|
<td align="left"><a href="${DOCS_BASE}#glossary-peak-rss" target="_blank">Peak RSS</a></td>
|
||||||
@ -379,3 +436,11 @@ function bytesToHuman(bytes: number): string {
|
|||||||
return `${(bytes / BYTES_TO_GiB).toFixed(2)}GB`
|
return `${(bytes / BYTES_TO_GiB).toFixed(2)}GB`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function secondsToHuman(seconds: number): string {
|
||||||
|
if (seconds < 60) {
|
||||||
|
return `${seconds.toFixed(1)}s`
|
||||||
|
} else {
|
||||||
|
return `${Math.trunc(seconds / 60)}m ${Math.trunc(seconds % 60)}s`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user