diff options
author | 2020-07-31 15:16:53 +0200 | |
---|---|---|
committer | 2020-07-31 13:38:57 +0000 | |
commit | 89992b8bbdf2d6d3c3da6a029e184c5d59eb505c (patch) | |
tree | 51fa578abde7e26b58e783a51af07badef126a51 | |
parent | faf5f3fed7e25b701720b39647911645a27994b4 (diff) |
Report object size of classes.
This way we do not need to re-emit the size for every instance.
Test: flash and get heap dump of system_server
Change-Id: I3c1034dc55d1505c149b9ba19d8942fd1046e9dc
Bug: 143874090
Bug: 159806127
-rw-r--r-- | perfetto_hprof/perfetto_hprof.cc | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/perfetto_hprof/perfetto_hprof.cc b/perfetto_hprof/perfetto_hprof.cc index 3f5d06d02f..d397e8ee4f 100644 --- a/perfetto_hprof/perfetto_hprof.cc +++ b/perfetto_hprof/perfetto_hprof.cc @@ -579,6 +579,7 @@ void DumpPerfetto(art::Thread* self) { type_proto->set_class_name(PrettyType(klass)); type_proto->set_location_id(FindOrAppend(&interned_locations, klass->GetLocation())); + type_proto->set_object_size(klass->GetObjectSize()); } art::mirror::Class* klass = obj->GetClass(); @@ -606,7 +607,10 @@ void DumpPerfetto(art::Thread* self) { writer.GetHeapGraph()->add_objects(); object_proto->set_id(GetObjectId(obj)); object_proto->set_type_id(class_id); - object_proto->set_self_size(obj->SizeOf()); + + // Arrays / strings are magic and have an instance dependent size. + if (obj->SizeOf() != klass->GetObjectSize()) + object_proto->set_self_size(obj->SizeOf()); std::vector<std::pair<std::string, art::mirror::Object*>> referred_objects; |