Remove Frame, merge shadow and quick representations.
Change-Id: I5ae03a5e52111792d2df7e83cbd89ab25777844b
diff --git a/src/trace.cc b/src/trace.cc
index a453e37..7b7c3eb 100644
--- a/src/trace.cc
+++ b/src/trace.cc
@@ -194,26 +194,28 @@
return true;
}
-static void TraceRestoreStack(Thread* t, void*) {
- Frame frame = t->GetTopOfStack();
- if (frame.GetSP() != 0) {
- for ( ; frame.GetMethod() != 0; frame.Next()) {
- if (t->IsTraceStackEmpty()) {
- break;
+static void TraceRestoreStack(Thread* self, void*) {
+ struct RestoreStackVisitor : public StackVisitor {
+ RestoreStackVisitor(Thread* self) : StackVisitor(self->GetManagedStack(),
+ self->GetTraceStack()), self_(self) {}
+
+ virtual bool VisitFrame() {
+ if (self_->IsTraceStackEmpty()) {
+ return false; // Stop.
}
-#if defined(ART_USE_LLVM_COMPILER)
- UNIMPLEMENTED(FATAL);
-#else
- uintptr_t pc = frame.GetReturnPC();
- Method* method = frame.GetMethod();
+ uintptr_t pc = GetReturnPc();
if (IsTraceExitPc(pc)) {
- TraceStackFrame trace_frame = t->PopTraceStackFrame();
- frame.SetReturnPC(trace_frame.return_pc_);
- CHECK(method == trace_frame.method_);
+ TraceStackFrame trace_frame = self_->PopTraceStackFrame();
+ SetReturnPc(trace_frame.return_pc_);
+ CHECK(GetMethod() == trace_frame.method_);
}
-#endif
+ return true; // Continue.
}
- }
+
+ Thread* self_;
+ };
+ RestoreStackVisitor visitor(self);
+ visitor.WalkStack();
}
void Trace::AddSavedCodeToMap(const Method* method, const void* code) {
@@ -470,10 +472,9 @@
for (It it = visited_methods_.begin(); it != visited_methods_.end(); ++it) {
const Method* method = *it;
MethodHelper mh(method);
- os << StringPrintf("%p\t%s\t%s\t%s\t%s\t%d\n", method,
+ os << StringPrintf("%p\t%s\t%s\t%s\t%s\n", method,
PrettyDescriptor(mh.GetDeclaringClassDescriptor()).c_str(), mh.GetName(),
- mh.GetSignature().c_str(), mh.GetDeclaringClassSourceFile(),
- mh.GetLineNumFromNativePC(0));
+ mh.GetSignature().c_str(), mh.GetDeclaringClassSourceFile());
}
}