diff options
author | Mathieu Chartier <mathieuc@google.com> | 2015-03-06 12:45:44 -0800 |
---|---|---|
committer | Mathieu Chartier <mathieuc@google.com> | 2015-03-06 12:52:57 -0800 |
commit | 15f345cdfaebe480de6387b67d4be4eb5f106870 (patch) | |
tree | b4144be2207eab5584d100e155e107a873da4794 | |
parent | 709d8df91d829573e399b68db882399e5509aeb5 (diff) | |
download | art-15f345cdfaebe480de6387b67d4be4eb5f106870.zip art-15f345cdfaebe480de6387b67d4be4eb5f106870.tar.gz art-15f345cdfaebe480de6387b67d4be4eb5f106870.tar.bz2 |
Fix failing hprof DCHECK
Benign.
Bug: 19627999
Change-Id: I20f3d36ffa1efaf23b40b6290c042df81eca2fea
-rw-r--r-- | runtime/hprof/hprof.cc | 44 |
1 files changed, 33 insertions, 11 deletions
diff --git a/runtime/hprof/hprof.cc b/runtime/hprof/hprof.cc index 7da22b1..5a7b7e1 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; } } |