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;
}
}