package com.squareup.haha.perflib.analysis; import com.squareup.haha.guava.collect.ImmutableList; import com.squareup.haha.guava.collect.Iterables; import com.squareup.haha.perflib.Heap; import com.squareup.haha.perflib.Instance; import com.squareup.haha.perflib.RootObj; import com.squareup.haha.perflib.Snapshot; import java.util.Iterator; /* loaded from: classes.dex */ public class Dominators { private final Snapshot mSnapshot; private final ImmutableList mTopSort; public Dominators(Snapshot snapshot, ImmutableList immutableList) { this.mSnapshot = snapshot; this.mTopSort = immutableList; Iterator it = snapshot.getGCRoots().iterator(); while (it.hasNext()) { Instance referredInstance = it.next().getReferredInstance(); if (referredInstance != null) { referredInstance.setImmediateDominator(Snapshot.SENTINEL_ROOT); } } } private void computeDominators() { boolean z; for (boolean z2 = true; z2; z2 = z) { z = false; for (int i = 0; i < this.mTopSort.size(); i++) { Instance instance = this.mTopSort.get(i); if (instance.getImmediateDominator() != Snapshot.SENTINEL_ROOT) { Instance instance2 = null; for (int i2 = 0; i2 < instance.getHardReferences().size(); i2++) { Instance instance3 = instance.getHardReferences().get(i2); if (instance3.getImmediateDominator() != null) { if (instance2 == null) { instance2 = instance3; } else { while (instance2 != instance3) { if (instance2.getTopologicalOrder() < instance3.getTopologicalOrder()) { instance3 = instance3.getImmediateDominator(); } else { instance2 = instance2.getImmediateDominator(); } } } } } if (instance.getImmediateDominator() != instance2) { instance.setImmediateDominator(instance2); z = true; } } } } } public void computeRetainedSizes() { for (Heap heap : this.mSnapshot.getHeaps()) { Iterator it = Iterables.concat(heap.getClasses(), heap.getInstances()).iterator(); while (it.hasNext()) { ((Instance) it.next()).resetRetainedSize(); } } computeDominators(); for (Instance instance : this.mSnapshot.getReachableInstances()) { int heapIndex = this.mSnapshot.getHeapIndex(instance.getHeap()); for (Instance immediateDominator = instance.getImmediateDominator(); immediateDominator != Snapshot.SENTINEL_ROOT; immediateDominator = immediateDominator.getImmediateDominator()) { immediateDominator.addRetainedSize(heapIndex, instance.getSize()); } } } }