Chromium Code Reviews| Index: src/cpu-profiler.cc |
| diff --git a/src/cpu-profiler.cc b/src/cpu-profiler.cc |
| index 109ddd5d976f0a36ccdb1512e02b2a78467238d6..c3d59f4afe6ebca7d9fe22423ad7ee5bf0220da5 100644 |
| --- a/src/cpu-profiler.cc |
| +++ b/src/cpu-profiler.cc |
| @@ -58,85 +58,9 @@ ProfilerEventsProcessor::ProfilerEventsProcessor( |
| } |
| -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; |
| + CodeEventsContainer evt_rec(CodeEventRecord::CODE_MOVE); |
| CodeMoveEventRecord* rec = &evt_rec.CodeMoveEventRecord_; |
| - rec->type = CodeEventRecord::CODE_MOVE; |
| rec->order = ++enqueue_order_; |
| rec->from = from; |
| rec->to = to; |
| @@ -146,10 +70,9 @@ void ProfilerEventsProcessor::CodeMoveEvent(Address from, Address to) { |
| void ProfilerEventsProcessor::SharedFunctionInfoMoveEvent(Address from, |
| Address to) { |
| - CodeEventsContainer evt_rec; |
| + CodeEventsContainer evt_rec(CodeEventRecord::SHARED_FUNC_MOVE); |
| SharedFunctionInfoMoveEventRecord* rec = |
| &evt_rec.SharedFunctionInfoMoveEventRecord_; |
| - rec->type = CodeEventRecord::SHARED_FUNC_MOVE; |
| rec->order = ++enqueue_order_; |
| rec->from = from; |
| rec->to = to; |
| @@ -157,24 +80,6 @@ void ProfilerEventsProcessor::SharedFunctionInfoMoveEvent(Address from, |
| } |
| -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); |
| -} |
| - |
| - |
| void ProfilerEventsProcessor::AddCurrentStack() { |
| TickSampleEventRecord record(enqueue_order_); |
| TickSample* sample = &record.sample; |
| @@ -306,29 +211,47 @@ bool CpuProfiler::HasDetachedProfiles() { |
| void CpuProfiler::CallbackEvent(Name* name, Address entry_point) { |
| - processor_->CallbackCreateEvent( |
| - Logger::CALLBACK_TAG, CodeEntry::kEmptyNamePrefix, name, 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); |
| } |
| void CpuProfiler::CodeCreateEvent(Logger::LogEventsAndTags tag, |
| - Code* code, const char* comment) { |
| - processor_->CodeCreateEvent( |
| - tag, comment, code->address(), code->ExecutableSize()); |
| + Code* code, |
| + const char* comment) { |
|
yurys
2013/06/28 11:33:43
comment -> name?
loislo
2013/06/28 12:33:12
Done.
|
| + 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(comment)); |
| + rec->size = code->ExecutableSize(); |
| + rec->shared = NULL; |
| + processor_->Enqueue(&evt_rec); |
| } |
| void CpuProfiler::CodeCreateEvent(Logger::LogEventsAndTags tag, |
| - Code* code, Name* name) { |
| - processor_->CodeCreateEvent( |
| - tag, |
| - name, |
| - isolate_->heap()->empty_string(), |
| - v8::CpuProfileNode::kNoLineNumberInfo, |
| - code->address(), |
| - code->ExecutableSize(), |
| - NULL, |
| - NULL); |
| + 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); |
| } |
| @@ -337,15 +260,17 @@ void CpuProfiler::CodeCreateEvent(Logger::LogEventsAndTags tag, |
| SharedFunctionInfo* shared, |
| CompilationInfo* info, |
| Name* name) { |
| - processor_->CodeCreateEvent( |
| - tag, |
| - name, |
| - isolate_->heap()->empty_string(), |
| - v8::CpuProfileNode::kNoLineNumberInfo, |
| - code->address(), |
| - code->ExecutableSize(), |
| - shared->address(), |
| - info); |
| + 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); |
| } |
| @@ -354,25 +279,41 @@ void CpuProfiler::CodeCreateEvent(Logger::LogEventsAndTags tag, |
| SharedFunctionInfo* shared, |
| CompilationInfo* info, |
| String* source, int line) { |
| - processor_->CodeCreateEvent( |
| + if (FilterOutCodeCreateEvent(tag)) return; |
| + CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION); |
| + CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_; |
| + rec->start = code->address(); |
| + rec->entry = profiles_->NewCodeEntry( |
| tag, |
| - shared->DebugName(), |
| - source, |
| - line, |
| - code->address(), |
| - code->ExecutableSize(), |
| - shared->address(), |
| - info); |
| + 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); |
| } |
| void CpuProfiler::CodeCreateEvent(Logger::LogEventsAndTags tag, |
| - Code* code, int args_count) { |
| - processor_->CodeCreateEvent( |
| + 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( |
| tag, |
| - args_count, |
| - code->address(), |
| - code->ExecutableSize()); |
| + profiles_->GetName(args_count), |
| + TokenEnumerator::kInheritsSecurityToken, |
| + "args_count: "); |
| + rec->size = code->ExecutableSize(); |
| + rec->shared = NULL; |
| + processor_->Enqueue(&evt_rec); |
| } |
| @@ -391,24 +332,49 @@ void CpuProfiler::SharedFunctionInfoMoveEvent(Address from, Address to) { |
| void CpuProfiler::GetterCallbackEvent(Name* name, Address entry_point) { |
| - processor_->CallbackCreateEvent( |
| - Logger::CALLBACK_TAG, "get ", name, 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); |
| } |
| void CpuProfiler::RegExpCodeCreateEvent(Code* code, String* source) { |
| - processor_->RegExpCodeCreateEvent( |
| + 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( |
| Logger::REG_EXP_TAG, |
| - "RegExp: ", |
| - source, |
| - code->address(), |
| - code->ExecutableSize()); |
| + profiles_->GetName(source), |
| + TokenEnumerator::kInheritsSecurityToken, |
| + "RegExp: "); |
| + rec->size = code->ExecutableSize(); |
| + processor_->Enqueue(&evt_rec); |
| } |
| void CpuProfiler::SetterCallbackEvent(Name* name, Address entry_point) { |
| - processor_->CallbackCreateEvent( |
| - Logger::CALLBACK_TAG, "set ", name, 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); |
| } |
| @@ -424,6 +390,21 @@ 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_; |