4949import java .util .concurrent .ScheduledFuture ;
5050import java .util .concurrent .TimeUnit ;
5151import java .util .concurrent .atomic .AtomicBoolean ;
52+ import java .util .function .BiConsumer ;
5253import java .util .function .Consumer ;
5354import 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