Reduce meta-data object sizes, introduce meta-data helper classes.
Change-Id: Id14ad218f1c74c659701352fdf1a45bf6444daa3
diff --git a/src/dex_file.cc b/src/dex_file.cc
index 5185ba8..01bb6d5 100644
--- a/src/dex_file.cc
+++ b/src/dex_file.cc
@@ -571,7 +571,7 @@
}
const DexFile::ProtoId* DexFile::FindProtoId(uint16_t return_type_idx,
- const std::vector<uint16_t>& signature_type_ids) const {
+ const std::vector<uint16_t>& signature_type_idxs) const {
uint32_t lo = 0;
uint32_t hi = NumProtoIds() - 1;
while (hi >= lo) {
@@ -581,15 +581,15 @@
if (compare == 0) {
DexFileParameterIterator it(*this, proto);
size_t i = 0;
- while (it.HasNext() && i < signature_type_ids.size() && compare == 0) {
- compare = signature_type_ids[i] - it.GetTypeId();
+ while (it.HasNext() && i < signature_type_idxs.size() && compare == 0) {
+ compare = signature_type_idxs[i] - it.GetTypeIdx();
it.Next();
i++;
}
if (compare == 0) {
if (it.HasNext()) {
compare = -1;
- } else if (i < signature_type_ids.size()) {
+ } else if (i < signature_type_idxs.size()) {
compare = 1;
}
}
@@ -704,7 +704,8 @@
// A method with no line number info should return -1
LineNumFromPcContext context(rel_pc, -1);
- DecodeDebugInfo(code_item, method, LineNumForPcCb, NULL, &context);
+ DecodeDebugInfo(code_item, method->IsStatic(), method->GetDexMethodIndex(), LineNumForPcCb,
+ NULL, &context);
return context.line_num_;
}
@@ -733,7 +734,7 @@
return -1;
}
-void DexFile::DecodeDebugInfo0(const CodeItem* code_item, const Method* method,
+void DexFile::DecodeDebugInfo0(const CodeItem* code_item, bool is_static, uint32_t method_idx,
DexDebugNewPositionCb posCb, DexDebugNewLocalCb local_cb,
void* cnxt, const byte* stream, LocalInfo* local_in_reg) const {
uint32_t line = DecodeUnsignedLeb128(&stream);
@@ -742,13 +743,11 @@
uint32_t address = 0;
bool need_locals = (local_cb != NULL);
- if (!method->IsStatic()) {
+ if (!is_static) {
if (need_locals) {
- std::string descriptor = method->GetDeclaringClass()->GetDescriptor()->ToModifiedUtf8();
- const ClassDef* class_def = FindClassDef(descriptor);
- CHECK(class_def != NULL) << descriptor;
+ const char* descriptor = GetMethodDeclaringClassDescriptor(GetMethodId(method_idx));
local_in_reg[arg_reg].name_ = "this";
- local_in_reg[arg_reg].descriptor_ = GetClassDescriptor(*class_def);
+ local_in_reg[arg_reg].descriptor_ = descriptor;
local_in_reg[arg_reg].signature_ = NULL;
local_in_reg[arg_reg].start_address_ = 0;
local_in_reg[arg_reg].is_live_ = true;
@@ -756,7 +755,7 @@
arg_reg++;
}
- DexFileParameterIterator it(*this, GetProtoId(method->GetProtoIdx()));
+ DexFileParameterIterator it(*this, GetMethodPrototype(GetMethodId(method_idx)));
for (uint32_t i = 0; i < parameters_size && it.HasNext(); ++i, it.Next()) {
if (arg_reg >= code_item->registers_size_) {
LOG(ERROR) << "invalid stream - arg reg >= reg size (" << arg_reg
@@ -897,14 +896,14 @@
}
}
-void DexFile::DecodeDebugInfo(const CodeItem* code_item, const art::Method* method,
+void DexFile::DecodeDebugInfo(const CodeItem* code_item, bool is_static, uint32_t method_idx,
DexDebugNewPositionCb posCb, DexDebugNewLocalCb local_cb,
void* cnxt) const {
const byte* stream = GetDebugInfoStream(code_item);
LocalInfo local_in_reg[code_item->registers_size_];
if (stream != NULL) {
- DecodeDebugInfo0(code_item, method, posCb, local_cb, cnxt, stream, local_in_reg);
+ DecodeDebugInfo0(code_item, is_static, method_idx, posCb, local_cb, cnxt, stream, local_in_reg);
}
for (int reg = 0; reg < code_item->registers_size_; reg++) {
InvokeLocalCbIfLive(cnxt, reg, code_item->insns_size_in_code_units_, local_in_reg, local_cb);