summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMathieu Chartier <mathieuc@google.com>2015-03-06 12:45:44 -0800
committerMathieu Chartier <mathieuc@google.com>2015-03-06 12:52:57 -0800
commit15f345cdfaebe480de6387b67d4be4eb5f106870 (patch)
treeb4144be2207eab5584d100e155e107a873da4794
parent709d8df91d829573e399b68db882399e5509aeb5 (diff)
downloadart-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.cc44
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;
}
}