Add --android-resources-usage-log support to compiledump.py

Change-Id: I9e43d6f1d7c7f053fcf8fa0d4e4cab888379cac1
diff --git a/src/main/java/com/android/tools/r8/utils/CompileDumpCompatR8.java b/src/main/java/com/android/tools/r8/utils/CompileDumpCompatR8.java
index 86e2e39..a2c973e 100644
--- a/src/main/java/com/android/tools/r8/utils/CompileDumpCompatR8.java
+++ b/src/main/java/com/android/tools/r8/utils/CompileDumpCompatR8.java
@@ -7,10 +7,12 @@
 import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.CompilationMode;
 import com.android.tools.r8.DexIndexedConsumer.ArchiveConsumer;
+import com.android.tools.r8.DiagnosticsHandler;
 import com.android.tools.r8.FeatureSplit;
 import com.android.tools.r8.OutputMode;
 import com.android.tools.r8.R8;
 import com.android.tools.r8.R8Command;
+import com.android.tools.r8.StringConsumer;
 import com.android.tools.r8.utils.compiledump.CompilerCommandDumpUtils;
 import com.android.tools.r8.utils.compiledump.R8PartialDumpUtils;
 import com.android.tools.r8.utils.compiledump.ResourceShrinkerDumpUtils;
@@ -69,7 +71,8 @@
           "--partial-include",
           "--partial-exclude",
           "--threads",
-          "--startup-profile");
+          "--startup-profile",
+          "--android-resources-usage-log");
 
   private static final List<String> VALID_OPTIONS_WITH_TWO_OPERANDS =
       Arrays.asList("--art-profile", "--feature-jar", "--android-resources");
@@ -121,6 +124,7 @@
     List<Path> startupProfileFiles = new ArrayList<>();
     Path androidResourcesInput = null;
     Path androidResourcesOutput = null;
+    StringConsumer androidResourcesUsageLogConsumer = null;
     int minApi = 1;
     int threads = -1;
     BooleanBox enableMissingLibraryApiModeling = new BooleanBox(false);
@@ -229,6 +233,22 @@
               startupProfileFiles.add(Paths.get(operand));
               break;
             }
+          case "--android-resources-usage-log":
+            {
+              if (operand.equals("-") || operand.equals("stdout")) {
+                androidResourcesUsageLogConsumer =
+                    new StringConsumer() {
+                      @Override
+                      public void accept(String string, DiagnosticsHandler handler) {
+                        System.out.print(string);
+                      }
+                    };
+              } else {
+                androidResourcesUsageLogConsumer =
+                    new StringConsumer.FileConsumer(Paths.get(operand));
+              }
+              break;
+            }
           default:
             throw new IllegalArgumentException("Unimplemented option: " + option);
         }
@@ -321,6 +341,15 @@
               ResourceShrinkerDumpUtils.setOptimziedResourceShrinking(
                   optimizedResourceShrinking.get(), commandBuilder),
           "Failed setting optimized resource shrinking flag.");
+      if (optimizedResourceShrinking.get() && androidResourcesUsageLogConsumer != null) {
+        StringConsumer finalConsumer = androidResourcesUsageLogConsumer;
+        runIgnoreMissing(
+            () ->
+                commandBuilder.setResourceShrinkerConfiguration(
+                    b ->
+                        b.enableOptimizedShrinkingWithR8().setDebugConsumer(finalConsumer).build()),
+            "Failed setting optimized resource shrinking log consumer.");
+      }
     }
     if (outputMode != OutputMode.ClassFile) {
       commandBuilder.setMinApiLevel(minApi);
diff --git a/tools/compiledump.py b/tools/compiledump.py
index 3e661ba..4de0444 100755
--- a/tools/compiledump.py
+++ b/tools/compiledump.py
@@ -161,6 +161,12 @@
                         help='Use optimized resource shrinking',
                         default=False,
                         action='store_true')
+    parser.add_argument(
+        '--android-resources-usage-log',
+        '--android_resources_usage_log',
+        help=
+        'File to write resources usage log to (or "-" / "stdout" for stdout)',
+        default=None)
     parser.add_argument('--compilation-mode',
                         '--compilation_mode',
                         help='Run compilation in specified mode',
@@ -797,6 +803,11 @@
                 raise Exception("Proguard map input only supported for D8 dump")
         if is_r8_compiler(compiler) and optimized_resource_shrinking:
             cmd.extend(['--optimized-resource-shrinking'])
+        if is_r8_compiler(compiler) and args.android_resources_usage_log:
+            cmd.extend([
+                '--android-resources-usage-log',
+                args.android_resources_usage_log
+            ])
         if enable_missing_library_api_modeling:
             cmd.extend(['--enable-missing-library-api-modeling'])
         if args.threads: