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

Unified Diff: src/profiler/tick-sample.cc

Issue 2105943002: Expose TickSample and its APIs in v8-profiler.h (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebase Created 4 years, 5 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 | « src/profiler/tick-sample.h ('k') | test/cctest/test-cpu-profiler.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/profiler/tick-sample.cc
diff --git a/src/profiler/tick-sample.cc b/src/profiler/tick-sample.cc
index afc2407d5ef7176a20bd9c18ed995652d8233cb6..8b7fe2c73ac6aceb20a324925a1331042a0f727b 100644
--- a/src/profiler/tick-sample.cc
+++ b/src/profiler/tick-sample.cc
@@ -4,16 +4,17 @@
#include "src/profiler/tick-sample.h"
+#include "include/v8-profiler.h"
#include "src/frames-inl.h"
+#include "src/msan.h"
+#include "src/simulator.h"
#include "src/vm-state-inl.h"
-
namespace v8 {
-namespace internal {
namespace {
-bool IsSamePage(byte* ptr1, byte* ptr2) {
+bool IsSamePage(i::byte* ptr1, i::byte* ptr2) {
const uint32_t kPageSize = 4096;
uintptr_t mask = ~static_cast<uintptr_t>(kPageSize - 1);
return (reinterpret_cast<uintptr_t>(ptr1) & mask) ==
@@ -22,13 +23,13 @@ bool IsSamePage(byte* ptr1, byte* ptr2) {
// Check if the code at specified address could potentially be a
// frame setup code.
-bool IsNoFrameRegion(Address address) {
+bool IsNoFrameRegion(i::Address address) {
struct Pattern {
int bytes_count;
- byte bytes[8];
+ i::byte bytes[8];
int offsets[4];
};
- byte* pc = reinterpret_cast<byte*>(address);
+ i::byte* pc = reinterpret_cast<i::byte*>(address);
static Pattern patterns[] = {
#if V8_HOST_ARCH_IA32
// push %ebp
@@ -79,62 +80,60 @@ bool IsNoFrameRegion(Address address) {
//
// StackTracer implementation
//
-DISABLE_ASAN void TickSample::Init(Isolate* isolate,
- const v8::RegisterState& regs,
+DISABLE_ASAN void TickSample::Init(Isolate* v8_isolate,
+ const RegisterState& regs,
RecordCEntryFrame record_c_entry_frame,
bool update_stats) {
- timestamp = base::TimeTicks::HighResolutionNow();
this->update_stats = update_stats;
SampleInfo info;
- if (GetStackSample(isolate, regs, record_c_entry_frame,
- reinterpret_cast<void**>(&stack[0]), kMaxFramesCount,
- &info)) {
+ if (GetStackSample(v8_isolate, const_cast<RegisterState&>(regs),
+ record_c_entry_frame, reinterpret_cast<void**>(&stack[0]),
+ kMaxFramesCount, &info)) {
state = info.vm_state;
- pc = static_cast<Address>(regs.pc);
+ pc = regs.pc;
frames_count = static_cast<unsigned>(info.frames_count);
has_external_callback = info.external_callback_entry != nullptr;
if (has_external_callback) {
- external_callback_entry =
- static_cast<Address>(info.external_callback_entry);
+ external_callback_entry = info.external_callback_entry;
} else if (frames_count) {
// sp register may point at an arbitrary place in memory, make
// sure MSAN doesn't complain about it.
- MSAN_MEMORY_IS_INITIALIZED(regs.sp, sizeof(Address));
+ MSAN_MEMORY_IS_INITIALIZED(regs.sp, sizeof(void*));
// Sample potential return address value for frameless invocation of
// stubs (we'll figure out later, if this value makes sense).
- tos = Memory::Address_at(reinterpret_cast<Address>(regs.sp));
+ tos = i::Memory::Address_at(reinterpret_cast<i::Address>(regs.sp));
} else {
tos = nullptr;
}
} else {
// It is executing JS but failed to collect a stack trace.
// Mark the sample as spoiled.
- timestamp = base::TimeTicks();
pc = nullptr;
}
}
-bool TickSample::GetStackSample(Isolate* isolate, const v8::RegisterState& regs,
+bool TickSample::GetStackSample(Isolate* v8_isolate, const RegisterState& regs,
RecordCEntryFrame record_c_entry_frame,
void** frames, size_t frames_limit,
v8::SampleInfo* sample_info) {
+ i::Isolate* isolate = reinterpret_cast<i::Isolate*>(v8_isolate);
sample_info->frames_count = 0;
sample_info->vm_state = isolate->current_vm_state();
sample_info->external_callback_entry = nullptr;
if (sample_info->vm_state == GC) return true;
- Address js_entry_sp = isolate->js_entry_sp();
+ i::Address js_entry_sp = isolate->js_entry_sp();
if (js_entry_sp == nullptr) return true; // Not executing JS now.
DCHECK(regs.sp);
- if (regs.pc && IsNoFrameRegion(static_cast<Address>(regs.pc))) {
+ if (regs.pc && IsNoFrameRegion(static_cast<i::Address>(regs.pc))) {
// Can't collect stack.
return false;
}
- ExternalCallbackScope* scope = isolate->external_callback_scope();
- Address handler = Isolate::handler(isolate->thread_local_top());
+ i::ExternalCallbackScope* scope = isolate->external_callback_scope();
+ i::Address handler = i::Isolate::handler(isolate->thread_local_top());
// If there is a handler on top of the external callback scope then
// we have already entrered JavaScript again and the external callback
// is not the top function.
@@ -143,23 +142,26 @@ bool TickSample::GetStackSample(Isolate* isolate, const v8::RegisterState& regs,
*scope->callback_entrypoint_address();
}
- SafeStackFrameIterator it(isolate, reinterpret_cast<Address>(regs.fp),
- reinterpret_cast<Address>(regs.sp), js_entry_sp);
+ i::SafeStackFrameIterator it(isolate, reinterpret_cast<i::Address>(regs.fp),
+ reinterpret_cast<i::Address>(regs.sp),
+ js_entry_sp);
size_t i = 0;
if (record_c_entry_frame == kIncludeCEntryFrame && !it.done() &&
- (it.top_frame_type() == StackFrame::EXIT ||
- it.top_frame_type() == StackFrame::BUILTIN_EXIT)) {
+ (it.top_frame_type() == internal::StackFrame::EXIT ||
+ it.top_frame_type() == internal::StackFrame::BUILTIN_EXIT)) {
frames[i++] = isolate->c_function();
}
while (!it.done() && i < frames_limit) {
if (it.frame()->is_interpreted()) {
// For interpreted frames use the bytecode array pointer as the pc.
- InterpretedFrame* frame = static_cast<InterpretedFrame*>(it.frame());
+ i::InterpretedFrame* frame =
+ static_cast<i::InterpretedFrame*>(it.frame());
// Since the sampler can interrupt execution at any point the
// bytecode_array might be garbage, so don't dereference it.
- Address bytecode_array =
- reinterpret_cast<Address>(frame->GetBytecodeArray()) - kHeapObjectTag;
- frames[i++] = bytecode_array + BytecodeArray::kHeaderSize +
+ i::Address bytecode_array =
+ reinterpret_cast<i::Address>(frame->GetBytecodeArray()) -
+ i::kHeapObjectTag;
+ frames[i++] = bytecode_array + i::BytecodeArray::kHeaderSize +
frame->GetBytecodeOffset();
} else {
frames[i++] = it.frame()->pc();
@@ -170,10 +172,21 @@ bool TickSample::GetStackSample(Isolate* isolate, const v8::RegisterState& regs,
return true;
}
+namespace internal {
+
+void TickSample::Init(Isolate* isolate, const v8::RegisterState& state,
+ RecordCEntryFrame record_c_entry_frame,
+ bool update_stats) {
+ v8::TickSample::Init(reinterpret_cast<v8::Isolate*>(isolate), state,
+ record_c_entry_frame, update_stats);
+ if (pc == nullptr) return;
+ timestamp = base::TimeTicks::HighResolutionNow();
+}
+
#if defined(USE_SIMULATOR)
bool SimulatorHelper::FillRegisters(Isolate* isolate,
v8::RegisterState* state) {
- Simulator *simulator = isolate->thread_local_top()->simulator_;
+ Simulator* simulator = isolate->thread_local_top()->simulator_;
// Check if there is active simulator.
if (simulator == NULL) return false;
#if V8_TARGET_ARCH_ARM
@@ -181,8 +194,8 @@ bool SimulatorHelper::FillRegisters(Isolate* isolate,
state->pc = reinterpret_cast<Address>(simulator->get_pc());
}
state->sp = reinterpret_cast<Address>(simulator->get_register(Simulator::sp));
- state->fp = reinterpret_cast<Address>(simulator->get_register(
- Simulator::r11));
+ state->fp =
+ reinterpret_cast<Address>(simulator->get_register(Simulator::r11));
#elif V8_TARGET_ARCH_ARM64
state->pc = reinterpret_cast<Address>(simulator->pc());
state->sp = reinterpret_cast<Address>(simulator->sp());
« no previous file with comments | « src/profiler/tick-sample.h ('k') | test/cctest/test-cpu-profiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698