Track class merger group removal per policy

Change-Id: Ieea299a659e40b5e24bcec7c806255fd666f8f7e
diff --git a/src/main/java/com/android/tools/r8/classmerging/Policy.java b/src/main/java/com/android/tools/r8/classmerging/Policy.java
index 7655762..6170933 100644
--- a/src/main/java/com/android/tools/r8/classmerging/Policy.java
+++ b/src/main/java/com/android/tools/r8/classmerging/Policy.java
@@ -89,10 +89,12 @@
     }
     assert previousNumberOfRemovedClasses >= newNumberOfRemovedClasses;
     int change = previousNumberOfRemovedClasses - newNumberOfRemovedClasses;
-    if (isInterfaceGroup) {
-      numberOfRemovedInterfaces += change;
-    } else {
-      numberOfRemovedClasses += change;
+    synchronized (this) {
+      if (isInterfaceGroup) {
+        numberOfRemovedInterfaces += change;
+      } else {
+        numberOfRemovedClasses += change;
+      }
     }
     return true;
   }
diff --git a/src/main/java/com/android/tools/r8/verticalclassmerging/VerticalClassMergerPolicyExecutor.java b/src/main/java/com/android/tools/r8/verticalclassmerging/VerticalClassMergerPolicyExecutor.java
index dc573a6..1b5f45a 100644
--- a/src/main/java/com/android/tools/r8/verticalclassmerging/VerticalClassMergerPolicyExecutor.java
+++ b/src/main/java/com/android/tools/r8/verticalclassmerging/VerticalClassMergerPolicyExecutor.java
@@ -14,6 +14,7 @@
 import com.android.tools.r8.verticalclassmerging.policies.VerticalClassMergerPolicyWithPreprocessing;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Comparator;
 import java.util.LinkedList;
 import java.util.List;
@@ -69,7 +70,15 @@
       VerticalClassMergerPolicyWithPreprocessing<T> policy,
       LinkedList<VerticalMergeGroup> linkedGroups) {
     T data = policy.preprocess(linkedGroups);
-    linkedGroups.removeIf(group -> !policy.canMerge(group, data));
+    linkedGroups.removeIf(
+        group -> {
+          if (policy.canMerge(group, data)) {
+            return false;
+          }
+          assert policy.recordRemovedClassesForDebugging(
+              group.getSource().isInterface(), group.size(), Collections.emptyList());
+          return true;
+        });
     return linkedGroups;
   }
 }