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;