summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Mathieu Chartier <mathieuc@google.com> 2015-03-06 21:06:26 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2015-03-06 21:06:27 +0000
commit3b5408b565509341301e6da82f3d07c75aad5f51 (patch)
treeb4144be2207eab5584d100e155e107a873da4794
parent709d8df91d829573e399b68db882399e5509aeb5 (diff)
parent15f345cdfaebe480de6387b67d4be4eb5f106870 (diff)
Merge "Fix failing hprof DCHECK"
-rw-r--r--runtime/hprof/hprof.cc44
1 files changed, 33 insertions, 11 deletions
diff --git a/runtime/hprof/hprof.cc b/runtime/hprof/hprof.cc
index 7da22b1238..5a7b7e1032 100644
--- a/runtime/hprof/hprof.cc
+++ b/runtime/hprof/hprof.cc
@@ -1008,17 +1008,26 @@ void Hprof::DumpHeapClass(mirror::Class* klass, EndianOutput* output) {
HprofBasicType t = SignatureToBasicTypeAndSize(f->GetTypeDescriptor(), &size);
__ AddStringId(LookupStringId(f->GetName()));
__ AddU1(t);
- switch (size) {
- case 1:
+ switch (t) {
+ case hprof_basic_byte:
__ AddU1(f->GetByte(klass));
break;
- case 2:
+ case hprof_basic_boolean:
+ __ AddU1(f->GetBoolean(klass));
+ break;
+ case hprof_basic_char:
__ AddU2(f->GetChar(klass));
break;
- case 4:
+ case hprof_basic_short:
+ __ AddU2(f->GetShort(klass));
+ break;
+ case hprof_basic_float:
+ case hprof_basic_int:
+ case hprof_basic_object:
__ AddU4(f->Get32(klass));
break;
- case 8:
+ case hprof_basic_double:
+ case hprof_basic_long:
__ AddU8(f->Get64(klass));
break;
default:
@@ -1099,16 +1108,29 @@ void Hprof::DumpHeapInstanceObject(mirror::Object* obj, mirror::Class* klass,
for (int i = 0; i < ifieldCount; ++i) {
mirror::ArtField* f = klass->GetInstanceField(i);
size_t size;
- SignatureToBasicTypeAndSize(f->GetTypeDescriptor(), &size);
- if (size == 1) {
+ auto t = SignatureToBasicTypeAndSize(f->GetTypeDescriptor(), &size);
+ switch (t) {
+ case hprof_basic_byte:
__ AddU1(f->GetByte(obj));
- } else if (size == 2) {
+ break;
+ case hprof_basic_boolean:
+ __ AddU1(f->GetBoolean(obj));
+ break;
+ case hprof_basic_char:
__ AddU2(f->GetChar(obj));
- } else if (size == 4) {
+ break;
+ case hprof_basic_short:
+ __ AddU2(f->GetShort(obj));
+ break;
+ case hprof_basic_float:
+ case hprof_basic_int:
+ case hprof_basic_object:
__ AddU4(f->Get32(obj));
- } else {
- CHECK_EQ(size, 8U);
+ break;
+ case hprof_basic_double:
+ case hprof_basic_long:
__ AddU8(f->Get64(obj));
+ break;
}
}