Index: src/cpu-profiler.cc |
diff --git a/src/cpu-profiler.cc b/src/cpu-profiler.cc |
index bdb4ec427ed8df5236c940f3a24d97f7aba999ea..109ddd5d976f0a36ccdb1512e02b2a78467238d6 100644 |
--- a/src/cpu-profiler.cc |
+++ b/src/cpu-profiler.cc |
@@ -58,9 +58,120 @@ ProfilerEventsProcessor::ProfilerEventsProcessor( |
} |
-void ProfilerEventsProcessor::Enqueue(const CodeEventsContainer& event) { |
- event.generic.order = ++enqueue_order_; |
- events_buffer_.Enqueue(event); |
+void ProfilerEventsProcessor::CallbackCreateEvent(Logger::LogEventsAndTags tag, |
+ const char* prefix, |
+ Name* name, |
+ Address start) { |
+ if (FilterOutCodeCreateEvent(tag)) return; |
+ CodeEventsContainer evt_rec; |
+ CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_; |
+ rec->type = CodeEventRecord::CODE_CREATION; |
+ rec->order = ++enqueue_order_; |
+ rec->start = start; |
+ rec->entry = profiles_->NewCodeEntry(tag, prefix, name); |
+ rec->size = 1; |
+ rec->shared = NULL; |
+ events_buffer_.Enqueue(evt_rec); |
+} |
+ |
+ |
+void ProfilerEventsProcessor::CodeCreateEvent(Logger::LogEventsAndTags tag, |
+ Name* name, |
+ String* resource_name, |
+ int line_number, |
+ Address start, |
+ unsigned size, |
+ Address shared, |
+ CompilationInfo* info) { |
+ if (FilterOutCodeCreateEvent(tag)) return; |
+ CodeEventsContainer evt_rec; |
+ CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_; |
+ rec->type = CodeEventRecord::CODE_CREATION; |
+ rec->order = ++enqueue_order_; |
+ rec->start = start; |
+ rec->entry = profiles_->NewCodeEntry(tag, name, resource_name, line_number); |
+ if (info) { |
+ rec->entry->set_no_frame_ranges(info->ReleaseNoFrameRanges()); |
+ } |
+ rec->size = size; |
+ rec->shared = shared; |
+ events_buffer_.Enqueue(evt_rec); |
+} |
+ |
+ |
+void ProfilerEventsProcessor::CodeCreateEvent(Logger::LogEventsAndTags tag, |
+ const char* name, |
+ Address start, |
+ unsigned size) { |
+ if (FilterOutCodeCreateEvent(tag)) return; |
+ CodeEventsContainer evt_rec; |
+ CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_; |
+ rec->type = CodeEventRecord::CODE_CREATION; |
+ rec->order = ++enqueue_order_; |
+ rec->start = start; |
+ rec->entry = profiles_->NewCodeEntry(tag, name); |
+ rec->size = size; |
+ rec->shared = NULL; |
+ events_buffer_.Enqueue(evt_rec); |
+} |
+ |
+ |
+void ProfilerEventsProcessor::CodeCreateEvent(Logger::LogEventsAndTags tag, |
+ int args_count, |
+ Address start, |
+ unsigned size) { |
+ if (FilterOutCodeCreateEvent(tag)) return; |
+ CodeEventsContainer evt_rec; |
+ CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_; |
+ rec->type = CodeEventRecord::CODE_CREATION; |
+ rec->order = ++enqueue_order_; |
+ rec->start = start; |
+ rec->entry = profiles_->NewCodeEntry(tag, args_count); |
+ rec->size = size; |
+ rec->shared = NULL; |
+ events_buffer_.Enqueue(evt_rec); |
+} |
+ |
+ |
+void ProfilerEventsProcessor::CodeMoveEvent(Address from, Address to) { |
+ CodeEventsContainer evt_rec; |
+ CodeMoveEventRecord* rec = &evt_rec.CodeMoveEventRecord_; |
+ rec->type = CodeEventRecord::CODE_MOVE; |
+ rec->order = ++enqueue_order_; |
+ rec->from = from; |
+ rec->to = to; |
+ events_buffer_.Enqueue(evt_rec); |
+} |
+ |
+ |
+void ProfilerEventsProcessor::SharedFunctionInfoMoveEvent(Address from, |
+ Address to) { |
+ CodeEventsContainer evt_rec; |
+ SharedFunctionInfoMoveEventRecord* rec = |
+ &evt_rec.SharedFunctionInfoMoveEventRecord_; |
+ rec->type = CodeEventRecord::SHARED_FUNC_MOVE; |
+ rec->order = ++enqueue_order_; |
+ rec->from = from; |
+ rec->to = to; |
+ events_buffer_.Enqueue(evt_rec); |
+} |
+ |
+ |
+void ProfilerEventsProcessor::RegExpCodeCreateEvent( |
+ Logger::LogEventsAndTags tag, |
+ const char* prefix, |
+ String* name, |
+ Address start, |
+ unsigned size) { |
+ if (FilterOutCodeCreateEvent(tag)) return; |
+ CodeEventsContainer evt_rec; |
+ CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_; |
+ rec->type = CodeEventRecord::CODE_CREATION; |
+ rec->order = ++enqueue_order_; |
+ rec->start = start; |
+ rec->entry = profiles_->NewCodeEntry(tag, prefix, name); |
+ rec->size = size; |
+ events_buffer_.Enqueue(evt_rec); |
} |
@@ -194,56 +305,30 @@ bool CpuProfiler::HasDetachedProfiles() { |
} |
-static bool FilterOutCodeCreateEvent(Logger::LogEventsAndTags tag) { |
- return FLAG_prof_browser_mode |
- && (tag != Logger::CALLBACK_TAG |
- && tag != Logger::FUNCTION_TAG |
- && tag != Logger::LAZY_COMPILE_TAG |
- && tag != Logger::REG_EXP_TAG |
- && tag != Logger::SCRIPT_TAG); |
-} |
- |
- |
void CpuProfiler::CallbackEvent(Name* name, Address entry_point) { |
- if (FilterOutCodeCreateEvent(Logger::CALLBACK_TAG)) return; |
- CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION); |
- CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_; |
- rec->start = entry_point; |
- rec->entry = profiles_->NewCodeEntry( |
- Logger::CALLBACK_TAG, |
- profiles_->GetName(name), |
- TokenEnumerator::kInheritsSecurityToken); |
- rec->size = 1; |
- rec->shared = NULL; |
- processor_->Enqueue(evt_rec); |
+ processor_->CallbackCreateEvent( |
+ Logger::CALLBACK_TAG, CodeEntry::kEmptyNamePrefix, name, entry_point); |
} |
void CpuProfiler::CodeCreateEvent(Logger::LogEventsAndTags tag, |
- Code* code, |
- const char* name) { |
- if (FilterOutCodeCreateEvent(tag)) return; |
- CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION); |
- CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_; |
- rec->start = code->address(); |
- rec->entry = profiles_->NewCodeEntry(tag, profiles_->GetFunctionName(name)); |
- rec->size = code->ExecutableSize(); |
- rec->shared = NULL; |
- processor_->Enqueue(evt_rec); |
+ Code* code, const char* comment) { |
+ processor_->CodeCreateEvent( |
+ tag, comment, code->address(), code->ExecutableSize()); |
} |
void CpuProfiler::CodeCreateEvent(Logger::LogEventsAndTags tag, |
- Code* code, |
- Name* name) { |
- if (FilterOutCodeCreateEvent(tag)) return; |
- CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION); |
- CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_; |
- rec->start = code->address(); |
- rec->entry = profiles_->NewCodeEntry(tag, profiles_->GetFunctionName(name)); |
- rec->size = code->ExecutableSize(); |
- rec->shared = NULL; |
- processor_->Enqueue(evt_rec); |
+ Code* code, Name* name) { |
+ processor_->CodeCreateEvent( |
+ tag, |
+ name, |
+ isolate_->heap()->empty_string(), |
+ v8::CpuProfileNode::kNoLineNumberInfo, |
+ code->address(), |
+ code->ExecutableSize(), |
+ NULL, |
+ NULL); |
} |
@@ -252,17 +337,15 @@ void CpuProfiler::CodeCreateEvent(Logger::LogEventsAndTags tag, |
SharedFunctionInfo* shared, |
CompilationInfo* info, |
Name* name) { |
- if (FilterOutCodeCreateEvent(tag)) return; |
- CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION); |
- CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_; |
- rec->start = code->address(); |
- rec->entry = profiles_->NewCodeEntry(tag, profiles_->GetFunctionName(name)); |
- rec->entry->set_no_frame_ranges(info ? |
- info->ReleaseNoFrameRanges() : |
- NULL); |
- rec->size = code->ExecutableSize(); |
- rec->shared = shared->address(); |
- processor_->Enqueue(evt_rec); |
+ processor_->CodeCreateEvent( |
+ tag, |
+ name, |
+ isolate_->heap()->empty_string(), |
+ v8::CpuProfileNode::kNoLineNumberInfo, |
+ code->address(), |
+ code->ExecutableSize(), |
+ shared->address(), |
+ info); |
} |
@@ -271,50 +354,30 @@ void CpuProfiler::CodeCreateEvent(Logger::LogEventsAndTags tag, |
SharedFunctionInfo* shared, |
CompilationInfo* info, |
String* source, int line) { |
- if (FilterOutCodeCreateEvent(tag)) return; |
- CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION); |
- CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_; |
- rec->start = code->address(); |
- rec->entry = profiles_->NewCodeEntry( |
+ processor_->CodeCreateEvent( |
tag, |
- profiles_->GetFunctionName(shared->DebugName()), |
- TokenEnumerator::kNoSecurityToken, |
- CodeEntry::kEmptyNamePrefix, |
- profiles_->GetName(source), |
- line); |
- rec->entry->set_no_frame_ranges(info ? |
- info->ReleaseNoFrameRanges() : |
- NULL); |
- rec->size = code->ExecutableSize(); |
- rec->shared = shared->address(); |
- processor_->Enqueue(evt_rec); |
+ shared->DebugName(), |
+ source, |
+ line, |
+ code->address(), |
+ code->ExecutableSize(), |
+ shared->address(), |
+ info); |
} |
void CpuProfiler::CodeCreateEvent(Logger::LogEventsAndTags tag, |
- Code* code, |
- int args_count) { |
- if (FilterOutCodeCreateEvent(tag)) return; |
- CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION); |
- CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_; |
- rec->start = code->address(); |
- rec->entry = profiles_->NewCodeEntry( |
+ Code* code, int args_count) { |
+ processor_->CodeCreateEvent( |
tag, |
- profiles_->GetName(args_count), |
- TokenEnumerator::kInheritsSecurityToken, |
- "args_count: "); |
- rec->size = code->ExecutableSize(); |
- rec->shared = NULL; |
- processor_->Enqueue(evt_rec); |
+ args_count, |
+ code->address(), |
+ code->ExecutableSize()); |
} |
void CpuProfiler::CodeMoveEvent(Address from, Address to) { |
- CodeEventsContainer evt_rec(CodeEventRecord::CODE_MOVE); |
- CodeMoveEventRecord* rec = &evt_rec.CodeMoveEventRecord_; |
- rec->from = from; |
- rec->to = to; |
- processor_->Enqueue(evt_rec); |
+ processor_->CodeMoveEvent(from, to); |
} |
@@ -323,59 +386,29 @@ void CpuProfiler::CodeDeleteEvent(Address from) { |
void CpuProfiler::SharedFunctionInfoMoveEvent(Address from, Address to) { |
- CodeEventsContainer evt_rec(CodeEventRecord::SHARED_FUNC_MOVE); |
- SharedFunctionInfoMoveEventRecord* rec = |
- &evt_rec.SharedFunctionInfoMoveEventRecord_; |
- rec->from = from; |
- rec->to = to; |
- processor_->Enqueue(evt_rec); |
+ processor_->SharedFunctionInfoMoveEvent(from, to); |
} |
void CpuProfiler::GetterCallbackEvent(Name* name, Address entry_point) { |
- if (FilterOutCodeCreateEvent(Logger::CALLBACK_TAG)) return; |
- CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION); |
- CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_; |
- rec->start = entry_point; |
- rec->entry = profiles_->NewCodeEntry( |
- Logger::CALLBACK_TAG, |
- profiles_->GetName(name), |
- TokenEnumerator::kInheritsSecurityToken, |
- "get "); |
- rec->size = 1; |
- rec->shared = NULL; |
- processor_->Enqueue(evt_rec); |
+ processor_->CallbackCreateEvent( |
+ Logger::CALLBACK_TAG, "get ", name, entry_point); |
} |
void CpuProfiler::RegExpCodeCreateEvent(Code* code, String* source) { |
- if (FilterOutCodeCreateEvent(Logger::REG_EXP_TAG)) return; |
- CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION); |
- CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_; |
- rec->start = code->address(); |
- rec->entry = profiles_->NewCodeEntry( |
+ processor_->RegExpCodeCreateEvent( |
Logger::REG_EXP_TAG, |
- profiles_->GetName(source), |
- TokenEnumerator::kInheritsSecurityToken, |
- "RegExp: "); |
- rec->size = code->ExecutableSize(); |
- processor_->Enqueue(evt_rec); |
+ "RegExp: ", |
+ source, |
+ code->address(), |
+ code->ExecutableSize()); |
} |
void CpuProfiler::SetterCallbackEvent(Name* name, Address entry_point) { |
- if (FilterOutCodeCreateEvent(Logger::CALLBACK_TAG)) return; |
- CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION); |
- CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_; |
- rec->start = entry_point; |
- rec->entry = profiles_->NewCodeEntry( |
- Logger::CALLBACK_TAG, |
- profiles_->GetName(name), |
- TokenEnumerator::kInheritsSecurityToken, |
- "set "); |
- rec->size = 1; |
- rec->shared = NULL; |
- processor_->Enqueue(evt_rec); |
+ processor_->CallbackCreateEvent( |
+ Logger::CALLBACK_TAG, "set ", name, entry_point); |
} |
@@ -391,21 +424,6 @@ CpuProfiler::CpuProfiler(Isolate* isolate) |
} |
-CpuProfiler::CpuProfiler(Isolate* isolate, |
- CpuProfilesCollection* test_profiles, |
- ProfileGenerator* test_generator, |
- ProfilerEventsProcessor* test_processor) |
- : isolate_(isolate), |
- profiles_(test_profiles), |
- next_profile_uid_(1), |
- token_enumerator_(new TokenEnumerator()), |
- generator_(test_generator), |
- processor_(test_processor), |
- need_to_stop_sampler_(false), |
- is_profiling_(false) { |
-} |
- |
- |
CpuProfiler::~CpuProfiler() { |
delete token_enumerator_; |
delete profiles_; |