summaryrefslogtreecommitdiff
path: root/tools/ahat/src/heapdump/AhatClassInstance.java
diff options
context:
space:
mode:
author Richard Uhler <ruhler@google.com> 2016-12-12 13:11:26 +0000
committer Richard Uhler <ruhler@google.com> 2017-02-20 13:33:40 +0000
commitf629cfdbf6da3409aff177352e9ff41209b4570c (patch)
treee59e58924de62f4ff9906a95691f259e94b7fd09 /tools/ahat/src/heapdump/AhatClassInstance.java
parentcda4f2e72f569e0a0d6119c1c75284fd44df79ab (diff)
ahat: add support for diffing two heap dumps.
ahat now has the option to specify a --baseline hprof file to use as the basis for comparing two heap dumps. When a baseline hprof file is provided, ahat will highlight how the heap dump has changed relative to the hprof file. Differences that are highlighted include: * overall heap sizes * total bytes and number of allocations by type * new and deleted instances of a given type * retained sizes of objects * instance fields, static fields, and array elements of modified objects Also: * Remove support for showing NativeAllocations, because I haven't ever found it to be useful, it is not obvious what a "native" allocation is, and I don't feel like adding diff support for them. * Remove help page. Because it is outdated, not well maintained, and not very helpful in the first place. Test: m ahat-test Test: Run in diff mode for tests and added new tests for diff. Test: Manually run with and without diff mode on heap dumps from system server. Bug: 33770653 Change-Id: Id9a392ac75588200e716bbc3edbae6e9cd97c26b
Diffstat (limited to 'tools/ahat/src/heapdump/AhatClassInstance.java')
-rw-r--r--tools/ahat/src/heapdump/AhatClassInstance.java49
1 files changed, 0 insertions, 49 deletions
diff --git a/tools/ahat/src/heapdump/AhatClassInstance.java b/tools/ahat/src/heapdump/AhatClassInstance.java
index fae34b0d29..273530af64 100644
--- a/tools/ahat/src/heapdump/AhatClassInstance.java
+++ b/tools/ahat/src/heapdump/AhatClassInstance.java
@@ -143,55 +143,6 @@ public class AhatClassInstance extends AhatInstance {
return null;
}
- @Override public NativeAllocation getNativeAllocation() {
- if (!isInstanceOfClass("libcore.util.NativeAllocationRegistry$CleanerThunk")) {
- return null;
- }
-
- Long pointer = getLongField("nativePtr", null);
- if (pointer == null) {
- return null;
- }
-
- // Search for the registry field of inst.
- AhatInstance registry = null;
- for (FieldValue field : mFieldValues) {
- Value fieldValue = field.getValue();
- if (fieldValue.isAhatInstance()) {
- AhatClassInstance fieldInst = fieldValue.asAhatInstance().asClassInstance();
- if (fieldInst != null
- && fieldInst.isInstanceOfClass("libcore.util.NativeAllocationRegistry")) {
- registry = fieldInst;
- break;
- }
- }
- }
-
- if (registry == null || !registry.isClassInstance()) {
- return null;
- }
-
- Long size = registry.asClassInstance().getLongField("size", null);
- if (size == null) {
- return null;
- }
-
- AhatInstance referent = null;
- for (AhatInstance ref : getHardReverseReferences()) {
- if (ref.isClassInstance() && ref.asClassInstance().isInstanceOfClass("sun.misc.Cleaner")) {
- referent = ref.getReferent();
- if (referent != null) {
- break;
- }
- }
- }
-
- if (referent == null) {
- return null;
- }
- return new NativeAllocation(size, getHeap(), pointer, referent);
- }
-
@Override public String getDexCacheLocation(int maxChars) {
if (isInstanceOfClass("java.lang.DexCache")) {
AhatInstance location = getRefField("location");