ahat: switch to using new dominators API
Bug: 79131879
Test: m ahat-test
Change-Id: I40086393b1c57d59e5bfdc7c089372bce42779be
diff --git a/tools/ahat/etc/ahat_api.txt b/tools/ahat/etc/ahat_api.txt
index 8c7ff64..c30d501 100644
--- a/tools/ahat/etc/ahat_api.txt
+++ b/tools/ahat/etc/ahat_api.txt
@@ -63,7 +63,7 @@
method public boolean isPlaceHolder();
}
- public abstract class AhatInstance implements com.android.ahat.heapdump.Diffable com.android.ahat.dominators.DominatorsComputation.Node {
+ public abstract class AhatInstance implements com.android.ahat.heapdump.Diffable {
method public com.android.ahat.heapdump.AhatArrayInstance asArrayInstance();
method public java.awt.image.BufferedImage asBitmap();
method public com.android.ahat.heapdump.AhatClassInstance asClassInstance();
@@ -77,7 +77,6 @@
method public com.android.ahat.heapdump.AhatClassObj getClassObj();
method public java.lang.String getDexCacheLocation(int);
method public java.util.List<com.android.ahat.heapdump.AhatInstance> getDominated();
- method public java.lang.Object getDominatorsComputationState();
method public com.android.ahat.heapdump.Value getField(java.lang.String);
method public deprecated java.util.List<com.android.ahat.heapdump.AhatInstance> getHardReverseReferences();
method public com.android.ahat.heapdump.AhatHeap getHeap();
@@ -86,7 +85,6 @@
method public java.util.List<com.android.ahat.heapdump.PathElement> getPathFromGcRoot();
method public com.android.ahat.heapdump.Reachability getReachability();
method public com.android.ahat.heapdump.AhatInstance getRefField(java.lang.String);
- method public java.lang.Iterable<? extends com.android.ahat.dominators.DominatorsComputation.Node> getReferencesForDominators();
method public com.android.ahat.heapdump.AhatInstance getReferent();
method public com.android.ahat.heapdump.Size getRetainedSize(com.android.ahat.heapdump.AhatHeap);
method public java.util.List<com.android.ahat.heapdump.AhatInstance> getReverseReferences();
@@ -103,8 +101,6 @@
method public boolean isStronglyReachable();
method public boolean isUnreachable();
method public deprecated boolean isWeaklyReachable();
- method public void setDominator(com.android.ahat.dominators.DominatorsComputation.Node);
- method public void setDominatorsComputationState(java.lang.Object);
method public abstract java.lang.String toString();
}
diff --git a/tools/ahat/src/main/com/android/ahat/heapdump/AhatInstance.java b/tools/ahat/src/main/com/android/ahat/heapdump/AhatInstance.java
index a321ec0..b13117c 100644
--- a/tools/ahat/src/main/com/android/ahat/heapdump/AhatInstance.java
+++ b/tools/ahat/src/main/com/android/ahat/heapdump/AhatInstance.java
@@ -16,7 +16,6 @@
package com.android.ahat.heapdump;
-import com.android.ahat.dominators.DominatorsComputation;
import com.android.ahat.progress.Progress;
import java.awt.image.BufferedImage;
import java.util.ArrayDeque;
@@ -33,8 +32,7 @@
* kinds of Java instances, including normal Java objects, class objects, and
* arrays.
*/
-public abstract class AhatInstance implements Diffable<AhatInstance>,
- DominatorsComputation.Node {
+public abstract class AhatInstance implements Diffable<AhatInstance> {
// The id of this instance from the heap dump.
private final long mId;
@@ -739,24 +737,12 @@
}
}
- @Override
- public void setDominatorsComputationState(Object state) {
- setTemporaryUserData(state);
- }
-
- @Override
- public Object getDominatorsComputationState() {
- return getTemporaryUserData();
- }
-
- @Override
- public Iterable<? extends DominatorsComputation.Node> getReferencesForDominators() {
+ Iterable<AhatInstance> getReferencesForDominators() {
return new DominatorReferenceIterator(getReferences());
}
- @Override
- public void setDominator(DominatorsComputation.Node dominator) {
- mImmediateDominator = (AhatInstance)dominator;
+ void setDominator(AhatInstance dominator) {
+ mImmediateDominator = dominator;
mImmediateDominator.mDominated.add(this);
}
}
diff --git a/tools/ahat/src/main/com/android/ahat/heapdump/AhatSnapshot.java b/tools/ahat/src/main/com/android/ahat/heapdump/AhatSnapshot.java
index 12d3755..1b83d69 100644
--- a/tools/ahat/src/main/com/android/ahat/heapdump/AhatSnapshot.java
+++ b/tools/ahat/src/main/com/android/ahat/heapdump/AhatSnapshot.java
@@ -16,7 +16,7 @@
package com.android.ahat.heapdump;
-import com.android.ahat.dominators.DominatorsComputation;
+import com.android.ahat.dominators.Dominators;
import com.android.ahat.progress.Progress;
import java.util.List;
@@ -60,7 +60,29 @@
}
}
- DominatorsComputation.computeDominators(mSuperRoot, progress, mInstances.size());
+ Dominators.Graph<AhatInstance> graph = new Dominators.Graph<AhatInstance>() {
+ @Override
+ public void setDominatorsComputationState(AhatInstance node, Object state) {
+ node.setTemporaryUserData(state);
+ }
+
+ @Override
+ public Object getDominatorsComputationState(AhatInstance node) {
+ return node.getTemporaryUserData();
+ }
+
+ @Override
+ public Iterable<? extends AhatInstance> getReferencesForDominators(AhatInstance node) {
+ return node.getReferencesForDominators();
+ }
+
+ @Override
+ public void setDominator(AhatInstance node, AhatInstance dominator) {
+ node.setDominator(dominator);
+ }
+ };
+ new Dominators(graph).progress(progress, mInstances.size()).computeDominators(mSuperRoot);
+
AhatInstance.computeRetainedSize(mSuperRoot, mHeaps.size());
for (AhatHeap heap : mHeaps) {
diff --git a/tools/ahat/src/main/com/android/ahat/heapdump/SuperRoot.java b/tools/ahat/src/main/com/android/ahat/heapdump/SuperRoot.java
index d06df90..a871c7e 100644
--- a/tools/ahat/src/main/com/android/ahat/heapdump/SuperRoot.java
+++ b/tools/ahat/src/main/com/android/ahat/heapdump/SuperRoot.java
@@ -16,12 +16,11 @@
package com.android.ahat.heapdump;
-import com.android.ahat.dominators.DominatorsComputation;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.List;
-class SuperRoot extends AhatInstance implements DominatorsComputation.Node {
+class SuperRoot extends AhatInstance {
private List<AhatInstance> mRoots = new ArrayList<AhatInstance>();
private Object mDominatorsComputationState;