Run -identifiernamestring marker in parallel.

Marking const-string in method is already run in parallel.
This one is parallelizing marking const-string in fields.

Change-Id: I2ded0b693e0a524adc14268e23bc30399ab8ec45
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 32b7cbe..e28aa62 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -766,7 +766,7 @@
     clearDexMethodCompilationState();
 
     if (identifierNameStringMarker != null) {
-      identifierNameStringMarker.decoupleIdentifierNameStringsInFields();
+      identifierNameStringMarker.decoupleIdentifierNameStringsInFields(executorService);
     }
 
     if (Log.ENABLED) {
diff --git a/src/main/java/com/android/tools/r8/naming/IdentifierNameStringMarker.java b/src/main/java/com/android/tools/r8/naming/IdentifierNameStringMarker.java
index 75d1037..de60241 100644
--- a/src/main/java/com/android/tools/r8/naming/IdentifierNameStringMarker.java
+++ b/src/main/java/com/android/tools/r8/naming/IdentifierNameStringMarker.java
@@ -15,7 +15,6 @@
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.graph.DexField;
 import com.android.tools.r8.graph.DexMethod;
-import com.android.tools.r8.graph.DexProgramClass;
 import com.android.tools.r8.graph.DexReference;
 import com.android.tools.r8.graph.DexString;
 import com.android.tools.r8.graph.DexType;
@@ -40,6 +39,7 @@
 import com.android.tools.r8.position.TextPosition;
 import com.android.tools.r8.shaking.AppInfoWithLiveness;
 import com.android.tools.r8.utils.StringDiagnostic;
+import com.android.tools.r8.utils.ThreadUtils;
 import com.google.common.collect.Streams;
 import it.unimi.dsi.fastutil.objects.Object2BooleanMap;
 import java.util.Arrays;
@@ -47,6 +47,8 @@
 import java.util.ListIterator;
 import java.util.Objects;
 import java.util.Set;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
 import java.util.stream.Collectors;
 
 public class IdentifierNameStringMarker {
@@ -61,12 +63,17 @@
     this.throwingInfo = ThrowingInfo.defaultForConstString(appView.options());
   }
 
-  public void decoupleIdentifierNameStringsInFields() {
-    for (DexProgramClass clazz : appView.appInfo().classes()) {
-      for (DexEncodedField field : clazz.staticFields()) {
-        decoupleIdentifierNameStringInStaticField(field);
-      }
-    }
+  public void decoupleIdentifierNameStringsInFields(
+      ExecutorService executorService) throws ExecutionException {
+    ThreadUtils.processItems(
+        appView.appInfo().classes(),
+        clazz -> {
+          for (DexEncodedField field : clazz.staticFields()) {
+            decoupleIdentifierNameStringInStaticField(field);
+          }
+        },
+        executorService
+    );
   }
 
   private void decoupleIdentifierNameStringInStaticField(DexEncodedField encodedField) {