Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(181)

Unified Diff: src/frames.cc

Issue 2670843005: Revert of [profiler] Fix attribution for the top-most interpreted frame. (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/frames.cc
diff --git a/src/frames.cc b/src/frames.cc
index 4ce3cf9a056644c97ce85c0a10666982d0248324..f206dbdd996a69e0b01c27af8ce6f04f5bc32f5c 100644
--- a/src/frames.cc
+++ b/src/frames.cc
@@ -180,22 +180,6 @@
DCHECK(iterator_.frame()->is_arguments_adaptor());
}
-static bool IsInterpreterFramePc(Isolate* isolate, Address pc) {
- Code* interpreter_entry_trampoline =
- isolate->builtins()->builtin(Builtins::kInterpreterEntryTrampoline);
- Code* interpreter_bytecode_advance =
- isolate->builtins()->builtin(Builtins::kInterpreterEnterBytecodeAdvance);
- Code* interpreter_bytecode_dispatch =
- isolate->builtins()->builtin(Builtins::kInterpreterEnterBytecodeDispatch);
-
- return (pc >= interpreter_entry_trampoline->instruction_start() &&
- pc < interpreter_entry_trampoline->instruction_end()) ||
- (pc >= interpreter_bytecode_advance->instruction_start() &&
- pc < interpreter_bytecode_advance->instruction_end()) ||
- (pc >= interpreter_bytecode_dispatch->instruction_start() &&
- pc < interpreter_bytecode_dispatch->instruction_end());
-}
-
// -------------------------------------------------------------------------
@@ -210,7 +194,6 @@
StackFrame::State state;
StackFrame::Type type;
ThreadLocalTop* top = isolate->thread_local_top();
- bool advance_frame = true;
if (IsValidTop(top)) {
type = ExitFrame::GetStateForFramePointer(Isolate::c_entry_fp(top), &state);
top_frame_type_ = type;
@@ -220,19 +203,6 @@
state.sp = sp;
state.pc_address = StackFrame::ResolveReturnAddressLocation(
reinterpret_cast<Address*>(StandardFrame::ComputePCAddress(fp)));
-
- // If the top of stack is a return address to the interpreter trampoline,
- // then we are likely in a bytecode handler with elided frame. In that
- // case, set the PC properly and make sure we do not drop the frame.
- if (IsValidStackAddress(sp)) {
- MSAN_MEMORY_IS_INITIALIZED(sp, kPointerSize);
- Address tos = Memory::Address_at(reinterpret_cast<Address>(sp));
- if (IsInterpreterFramePc(isolate, tos)) {
- state.pc_address = reinterpret_cast<Address*>(sp);
- advance_frame = false;
- }
- }
-
// StackFrame::ComputeType will read both kContextOffset and kMarkerOffset,
// we check only that kMarkerOffset is within the stack bounds and do
// compile time check that kContextOffset slot is pushed on the stack before
@@ -243,10 +213,6 @@
if (IsValidStackAddress(frame_marker)) {
type = StackFrame::ComputeType(this, &state);
top_frame_type_ = type;
- // We only keep the top frame if we believe it to be interpreted frame.
- if (type != StackFrame::INTERPRETED) {
- advance_frame = true;
- }
} else {
// Mark the frame as JAVA_SCRIPT if we cannot determine its type.
// The frame anyways will be skipped.
@@ -258,7 +224,7 @@
return;
}
frame_ = SingletonFor(type, &state);
- if (advance_frame && frame_) Advance();
+ if (frame_) Advance();
}
@@ -421,6 +387,22 @@
ReturnAddressLocationResolver resolver) {
DCHECK(return_address_location_resolver_ == NULL);
return_address_location_resolver_ = resolver;
+}
+
+static bool IsInterpreterFramePc(Isolate* isolate, Address pc) {
+ Code* interpreter_entry_trampoline =
+ isolate->builtins()->builtin(Builtins::kInterpreterEntryTrampoline);
+ Code* interpreter_bytecode_advance =
+ isolate->builtins()->builtin(Builtins::kInterpreterEnterBytecodeAdvance);
+ Code* interpreter_bytecode_dispatch =
+ isolate->builtins()->builtin(Builtins::kInterpreterEnterBytecodeDispatch);
+
+ return (pc >= interpreter_entry_trampoline->instruction_start() &&
+ pc < interpreter_entry_trampoline->instruction_end()) ||
+ (pc >= interpreter_bytecode_advance->instruction_start() &&
+ pc < interpreter_bytecode_advance->instruction_end()) ||
+ (pc >= interpreter_bytecode_dispatch->instruction_start() &&
+ pc < interpreter_bytecode_dispatch->instruction_end());
}
StackFrame::Type StackFrame::ComputeType(const StackFrameIteratorBase* iterator,
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698