Skip to content

Commit 0149fb7

Browse files
committed
[GR-44347] Make ProgressReporter more extensible
PullRequest: graal/13936
2 parents ba67300 + 34e9e92 commit 0149fb7

File tree

2 files changed

+36
-13
lines changed

2 files changed

+36
-13
lines changed

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/util/json/JsonWriter.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,14 @@ public JsonWriter appendObjectEnd() throws IOException {
6666
return append('}');
6767
}
6868

69+
public JsonWriter appendArrayStart() throws IOException {
70+
return append('[');
71+
}
72+
73+
public JsonWriter appendArrayEnd() throws IOException {
74+
return append(']');
75+
}
76+
6977
public JsonWriter appendSeparator() throws IOException {
7078
return append(',');
7179
}

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ProgressReporter.java

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import java.util.concurrent.ScheduledFuture;
5050
import java.util.concurrent.TimeUnit;
5151
import java.util.concurrent.atomic.AtomicBoolean;
52+
import java.util.function.BiConsumer;
5253
import java.util.function.Consumer;
5354
import java.util.stream.Collectors;
5455

@@ -108,7 +109,7 @@ public class ProgressReporter {
108109
private static final String HEADLINE_SEPARATOR;
109110
private static final String LINE_SEPARATOR;
110111
private static final int MAX_NUM_BREAKDOWN = 10;
111-
private static final String STAGE_DOCS_URL = "https://github.com/oracle/graal/blob/master/docs/reference-manual/native-image/BuildOutput.md";
112+
public static final String STAGE_DOCS_URL = "https://github.com/oracle/graal/blob/master/docs/reference-manual/native-image/BuildOutput.md";
112113
private static final double EXCESSIVE_GC_MIN_THRESHOLD_MILLIS = 15_000;
113114
private static final double EXCESSIVE_GC_RATIO = 0.5;
114115
private static final String BREAKDOWN_BYTE_ARRAY_PREFIX = "byte[] for ";
@@ -501,6 +502,16 @@ private static String findPackageOrClassName(HostedMethod method) {
501502
}
502503

503504
private void calculateHeapBreakdown(HostedMetaAccess metaAccess, Collection<ObjectInfo> heapObjects) {
505+
calculateHeapBreakdown(heapBreakdown, linkStrategy, metaAccess, heapObjects, reportStringBytes, graphEncodingByteLength, this::recordJsonMetric);
506+
}
507+
508+
public void calculateHeapBreakdown(Map<String, Long> breakdown, LinkStrategy strategy, HostedMetaAccess metaAccess, Collection<ObjectInfo> heapObjects) {
509+
calculateHeapBreakdown(breakdown, strategy, metaAccess, heapObjects, reportStringBytes, graphEncodingByteLength, (k, v) -> {
510+
});
511+
}
512+
513+
public static void calculateHeapBreakdown(Map<String, Long> heapBreakdown, LinkStrategy linkStrategy, HostedMetaAccess metaAccess, Collection<ObjectInfo> heapObjects,
514+
boolean reportStringBytes, long graphEncodingByteLength, BiConsumer<JsonMetric, Object> jsonMetricAction) {
504515
long stringByteLength = 0;
505516
for (ObjectInfo o : heapObjects) {
506517
heapBreakdown.merge(o.getClazz().toJavaName(true), o.getSize(), Long::sum);
@@ -533,13 +544,13 @@ private void calculateHeapBreakdown(HostedMetaAccess metaAccess, Collection<Obje
533544
resourcesByteLength += resource.length;
534545
}
535546
}
536-
recordJsonMetric(ImageDetailKey.RESOURCE_SIZE_BYTES, resourcesByteLength);
547+
jsonMetricAction.accept(ImageDetailKey.RESOURCE_SIZE_BYTES, resourcesByteLength);
537548
if (resourcesByteLength > 0) {
538549
heapBreakdown.put(BREAKDOWN_BYTE_ARRAY_PREFIX + linkStrategy.asDocLink("embedded resources", "#glossary-embedded-resources"), resourcesByteLength);
539550
remainingBytes -= resourcesByteLength;
540551
}
541552
if (graphEncodingByteLength >= 0) {
542-
recordJsonMetric(ImageDetailKey.GRAPH_ENCODING_SIZE, graphEncodingByteLength);
553+
jsonMetricAction.accept(ImageDetailKey.GRAPH_ENCODING_SIZE, graphEncodingByteLength);
543554
heapBreakdown.put(BREAKDOWN_BYTE_ARRAY_PREFIX + linkStrategy.asDocLink("graph encodings", "#glossary-graph-encodings"), graphEncodingByteLength);
544555
remainingBytes -= graphEncodingByteLength;
545556
}
@@ -903,10 +914,10 @@ private void println() {
903914
* PRINTERS
904915
*/
905916

906-
abstract class AbstractPrinter<T extends AbstractPrinter<T>> {
917+
public abstract class AbstractPrinter<T extends AbstractPrinter<T>> {
907918
abstract T getThis();
908919

909-
abstract T a(String text);
920+
public abstract T a(String text);
910921

911922
final T a(String text, Object... args) {
912923
return a(String.format(text, args));
@@ -976,7 +987,9 @@ public final T doclink(String text, String htmlAnchor) {
976987
}
977988
}
978989

979-
/** Start printing a new line. */
990+
/**
991+
* Start printing a new line.
992+
*/
980993
private DirectPrinter l() {
981994
return linePrinter.a(outputPrefix);
982995
}
@@ -1010,7 +1023,7 @@ abstract class LinePrinter<T extends LinePrinter<T>> extends AbstractPrinter<T>
10101023
protected final List<String> lineParts = new ArrayList<>();
10111024

10121025
@Override
1013-
T a(String value) {
1026+
public T a(String value) {
10141027
lineParts.add(value);
10151028
return getThis();
10161029
}
@@ -1165,7 +1178,7 @@ CharacterwiseStagePrinter getThis() {
11651178
* re-printed.
11661179
*/
11671180
@Override
1168-
CharacterwiseStagePrinter a(String value) {
1181+
public CharacterwiseStagePrinter a(String value) {
11691182
print(value);
11701183
return super.a(value);
11711184
}
@@ -1230,7 +1243,7 @@ TwoColumnPrinter getThis() {
12301243
}
12311244

12321245
@Override
1233-
TwoColumnPrinter a(String value) {
1246+
public TwoColumnPrinter a(String value) {
12341247
super.a(value);
12351248
return this;
12361249
}
@@ -1345,7 +1358,7 @@ public void reset() {
13451358
}
13461359
}
13471360

1348-
private interface LinkStrategy {
1361+
public interface LinkStrategy {
13491362
void link(AbstractPrinter<?> printer, String text, String url);
13501363

13511364
String asDocLink(String text, String htmlAnchor);
@@ -1360,7 +1373,7 @@ default void doclink(AbstractPrinter<?> printer, String text, String htmlAnchor)
13601373
}
13611374
}
13621375

1363-
final class LinklessStrategy implements LinkStrategy {
1376+
static final class LinklessStrategy implements LinkStrategy {
13641377
@Override
13651378
public void link(AbstractPrinter<?> printer, String text, String url) {
13661379
printer.a(text);
@@ -1372,8 +1385,10 @@ public String asDocLink(String text, String htmlAnchor) {
13721385
}
13731386
}
13741387

1375-
final class LinkyStrategy implements LinkStrategy {
1376-
/** Adding link part individually for {@link LinePrinter#getCurrentTextLength()}. */
1388+
static final class LinkyStrategy implements LinkStrategy {
1389+
/**
1390+
* Adding link part individually for {@link LinePrinter#getCurrentTextLength()}.
1391+
*/
13771392
@Override
13781393
public void link(AbstractPrinter<?> printer, String text, String url) {
13791394
printer.a(ANSI.LINK_START + url).a(ANSI.LINK_TEXT).a(text).a(ANSI.LINK_END);

0 commit comments

Comments
 (0)