diff options
| author | 2016-12-12 13:11:26 +0000 | |
|---|---|---|
| committer | 2017-02-20 13:33:40 +0000 | |
| commit | f629cfdbf6da3409aff177352e9ff41209b4570c (patch) | |
| tree | e59e58924de62f4ff9906a95691f259e94b7fd09 /tools/ahat/src/heapdump/AhatClassInstance.java | |
| parent | cda4f2e72f569e0a0d6119c1c75284fd44df79ab (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.java | 49 |
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"); |