Limit MissingStartupProfileItemsDiagnostic to 100 items

Bug: b/370937458
Change-Id: I4ef686cac2ee8c7dfe4d09864bb7729017c5e944
diff --git a/src/main/java/com/android/tools/r8/startup/diagnostic/MissingStartupProfileItemsDiagnostic.java b/src/main/java/com/android/tools/r8/startup/diagnostic/MissingStartupProfileItemsDiagnostic.java
index c5ab7a9..1087442 100644
--- a/src/main/java/com/android/tools/r8/startup/diagnostic/MissingStartupProfileItemsDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/startup/diagnostic/MissingStartupProfileItemsDiagnostic.java
@@ -13,6 +13,7 @@
 import com.android.tools.r8.position.Position;
 import com.android.tools.r8.profile.startup.profile.StartupProfileClassRule;
 import com.android.tools.r8.profile.startup.profile.StartupProfileMethodRule;
+import com.android.tools.r8.utils.SystemPropertyUtils;
 import com.google.common.collect.Sets;
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -22,6 +23,10 @@
 @KeepForApi
 public class MissingStartupProfileItemsDiagnostic implements Diagnostic {
 
+  private static final int THRESHOLD =
+      SystemPropertyUtils.parseSystemPropertyOrDefault(
+          "com.android.tools.r8.startup.diagnostic.limit", 100);
+
   private final List<DexReference> missingStartupItems;
   private final Origin origin;
 
@@ -43,6 +48,10 @@
 
   @Override
   public String getDiagnosticMessage() {
+    if (THRESHOLD == 0) {
+      return "Found " + missingStartupItems.size() + " missing startup classes and methods";
+    }
+
     StringBuilder builder = new StringBuilder();
     Iterator<DexReference> missingStartupItemIterator = missingStartupItems.iterator();
 
@@ -50,9 +59,21 @@
     writeMissingStartupItem(builder, missingStartupItemIterator.next());
 
     // Write remaining missing startup items with line separator before.
-    while (missingStartupItemIterator.hasNext()) {
+    int itemsToReport = (THRESHOLD > 0 ? THRESHOLD : Integer.MAX_VALUE) - 1;
+    while (missingStartupItemIterator.hasNext() && itemsToReport > 0) {
       writeMissingStartupItem(
           builder.append(System.lineSeparator()), missingStartupItemIterator.next());
+      itemsToReport--;
+    }
+
+    if (missingStartupItemIterator.hasNext()) {
+      assert THRESHOLD > 0;
+      int omittedItems = missingStartupItems.size() - THRESHOLD;
+      builder
+          .append(System.lineSeparator())
+          .append("Found ")
+          .append(omittedItems)
+          .append(" other missing startup classes and methods");
     }
 
     return builder.toString();