Add Marker when running D8 without a main-dex list as well.

With detailed assertion message for MainDexListTest#deterministicTest,
currently case primary: DEBUG: without a main-dex list is failing, and
the main diff is that that case is using MonoDexDistributor whereas
other cases are landed on FillFilesDistributor. And, the diff between
two distributors is adding tool marker or not.

Desclaimer: There are two more kinds of distributors in VirtualFile,
but I am not sure whether the remaining also need to add tool marker.

Bug:
Change-Id: I230f0ccaa29d42d2fb6b8db715c54a34f3d7b0d2
diff --git a/src/main/java/com/android/tools/r8/dex/VirtualFile.java b/src/main/java/com/android/tools/r8/dex/VirtualFile.java
index f4fa536..9391af9 100644
--- a/src/main/java/com/android/tools/r8/dex/VirtualFile.java
+++ b/src/main/java/com/android/tools/r8/dex/VirtualFile.java
@@ -349,6 +349,10 @@
     public Map<Integer, VirtualFile> run() throws ExecutionException, IOException {
       VirtualFile mainDexFile = new VirtualFile(0, writer.namingLens);
       nameToFileMap.put(0, mainDexFile);
+      if (writer.markerString != null) {
+        mainDexFile.transaction.addString(writer.markerString);
+        mainDexFile.commitTransaction();
+      }
 
       for (DexProgramClass programClass : classes) {
         mainDexFile.addClass(programClass);
diff --git a/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java b/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
index a87985e..a296a3e 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
@@ -62,7 +62,9 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
@@ -271,21 +273,31 @@
     for (CompilationMode mode : CompilationMode.values()) {
 
       // Build with all different main dex lists.
-      List<Path> testDirs = new ArrayList<>();
+      Map<Path, String> testDirs = new HashMap<>();  // Map Path to test scenario.
       if (allClasses) {
         // If all classes are passed add a run without a main-dex list as well.
-        testDirs.add(runD8WithMainDexList(mode, input, null, true));
+        testDirs.put(
+            runD8WithMainDexList(mode, input, null, true),
+            mode.toString() + ": without a main-dex list");
       }
-      testDirs.add(runD8WithMainDexList(mode, input, mainDexClasses, true));
-      testDirs.add(runD8WithMainDexList(mode, input, mainDexClasses, false));
+      testDirs.put(
+          runD8WithMainDexList(mode, input, mainDexClasses, true),
+          mode.toString() + ": main-dex list files");
+      testDirs.put(
+          runD8WithMainDexList(mode, input, mainDexClasses, false),
+          mode.toString() + ": main-dex classes");
       if (mainDexClasses != null) {
-        testDirs.add(runD8WithMainDexList(mode, input, Lists.reverse(mainDexClasses), true));
-        testDirs.add(runD8WithMainDexList(mode, input, Lists.reverse(mainDexClasses), false));
+        testDirs.put(
+            runD8WithMainDexList(mode, input, Lists.reverse(mainDexClasses), true),
+            mode.toString() + ": main-dex list files (reversed)");
+        testDirs.put(
+            runD8WithMainDexList(mode, input, Lists.reverse(mainDexClasses), false),
+            mode.toString() + ": main-dex classes (reversed)");
       }
 
       byte[] ref = null;
       byte[] ref2 = null;
-      for (Path testDir : testDirs) {
+      for (Path testDir : testDirs.keySet()) {
         Path primaryDexFile = testDir.resolve(FileUtils.DEFAULT_DEX_FILENAME);
         Path secondaryDexFile = testDir.resolve("classes2.dex");
         assertTrue(Files.exists(primaryDexFile));
@@ -295,14 +307,14 @@
         if (ref == null) {
           ref = content;
         } else {
-          assertArrayEquals(ref, content);
+          assertArrayEquals("primary: " + testDirs.get(testDir), ref, content);
         }
         if (hasSecondaryDexFile) {
           content = Files.readAllBytes(primaryDexFile);
           if (ref2 == null) {
             ref2 = content;
           } else {
-            assertArrayEquals(ref2, content);
+            assertArrayEquals("secondary: " + testDirs.get(testDir), ref2, content);
           }
         }
       }