summaryrefslogtreecommitdiff
path: root/deps/v8/src/profiler/profiler-listener.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/profiler/profiler-listener.cc')
-rw-r--r--deps/v8/src/profiler/profiler-listener.cc66
1 files changed, 27 insertions, 39 deletions
diff --git a/deps/v8/src/profiler/profiler-listener.cc b/deps/v8/src/profiler/profiler-listener.cc
index 07a10afb5d..fecfdb66b0 100644
--- a/deps/v8/src/profiler/profiler-listener.cc
+++ b/deps/v8/src/profiler/profiler-listener.cc
@@ -16,11 +16,7 @@ namespace internal {
ProfilerListener::ProfilerListener(Isolate* isolate)
: function_and_resource_names_(isolate->heap()) {}
-ProfilerListener::~ProfilerListener() {
- for (auto code_entry : code_entries_) {
- delete code_entry;
- }
-}
+ProfilerListener::~ProfilerListener() = default;
void ProfilerListener::CallbackEvent(Name* name, Address entry_point) {
CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION);
@@ -39,7 +35,7 @@ void ProfilerListener::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
rec->entry = NewCodeEntry(
tag, GetFunctionName(name), CodeEntry::kEmptyNamePrefix,
CodeEntry::kEmptyResourceName, CpuProfileNode::kNoLineNumberInfo,
- CpuProfileNode::kNoColumnNumberInfo, NULL, code->instruction_start());
+ CpuProfileNode::kNoColumnNumberInfo, nullptr, code->instruction_start());
RecordInliningInfo(rec->entry, code);
rec->size = code->ExecutableSize();
DispatchCodeEvent(evt_rec);
@@ -53,7 +49,7 @@ void ProfilerListener::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
rec->entry = NewCodeEntry(
tag, GetFunctionName(name), CodeEntry::kEmptyNamePrefix,
CodeEntry::kEmptyResourceName, CpuProfileNode::kNoLineNumberInfo,
- CpuProfileNode::kNoColumnNumberInfo, NULL, code->instruction_start());
+ CpuProfileNode::kNoColumnNumberInfo, nullptr, code->instruction_start());
RecordInliningInfo(rec->entry, code);
rec->size = code->ExecutableSize();
DispatchCodeEvent(evt_rec);
@@ -70,7 +66,7 @@ void ProfilerListener::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
tag, GetFunctionName(shared->DebugName()), CodeEntry::kEmptyNamePrefix,
GetName(InferScriptName(script_name, shared)),
CpuProfileNode::kNoLineNumberInfo, CpuProfileNode::kNoColumnNumberInfo,
- NULL, code->instruction_start());
+ nullptr, code->instruction_start());
RecordInliningInfo(rec->entry, code);
rec->entry->FillFunctionInfo(shared);
rec->size = code->ExecutableSize();
@@ -85,7 +81,7 @@ void ProfilerListener::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION);
CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_;
rec->start = abstract_code->address();
- JITLineInfoTable* line_table = NULL;
+ JITLineInfoTable* line_table = nullptr;
if (shared->script()->IsScript()) {
Script* script = Script::cast(shared->script());
line_table = new JITLineInfoTable();
@@ -114,20 +110,6 @@ void ProfilerListener::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
DispatchCodeEvent(evt_rec);
}
-void ProfilerListener::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
- AbstractCode* code, int args_count) {
- CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION);
- CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_;
- rec->start = code->address();
- rec->entry = NewCodeEntry(
- tag, GetName(args_count), "args_count: ", CodeEntry::kEmptyResourceName,
- CpuProfileNode::kNoLineNumberInfo, CpuProfileNode::kNoColumnNumberInfo,
- NULL, code->instruction_start());
- RecordInliningInfo(rec->entry, code);
- rec->size = code->ExecutableSize();
- DispatchCodeEvent(evt_rec);
-}
-
void ProfilerListener::CodeMoveEvent(AbstractCode* from, Address to) {
CodeEventsContainer evt_rec(CodeEventRecord::CODE_MOVE);
CodeMoveEventRecord* rec = &evt_rec.CodeMoveEventRecord_;
@@ -173,10 +155,11 @@ void ProfilerListener::RegExpCodeCreateEvent(AbstractCode* code,
CodeEventsContainer evt_rec(CodeEventRecord::CODE_CREATION);
CodeCreateEventRecord* rec = &evt_rec.CodeCreateEventRecord_;
rec->start = code->address();
- rec->entry = NewCodeEntry(
- CodeEventListener::REG_EXP_TAG, GetName(source), "RegExp: ",
- CodeEntry::kEmptyResourceName, CpuProfileNode::kNoLineNumberInfo,
- CpuProfileNode::kNoColumnNumberInfo, NULL, code->instruction_start());
+ rec->entry = NewCodeEntry(CodeEventListener::REG_EXP_TAG, GetName(source),
+ "RegExp: ", CodeEntry::kEmptyResourceName,
+ CpuProfileNode::kNoLineNumberInfo,
+ CpuProfileNode::kNoColumnNumberInfo, nullptr,
+ code->instruction_start());
rec->size = code->ExecutableSize();
DispatchCodeEvent(evt_rec);
}
@@ -203,8 +186,8 @@ void ProfilerListener::RecordInliningInfo(CodeEntry* entry,
if (!abstract_code->IsCode()) return;
Code* code = abstract_code->GetCode();
if (code->kind() != Code::OPTIMIZED_FUNCTION) return;
- DeoptimizationInputData* deopt_input_data =
- DeoptimizationInputData::cast(code->deoptimization_data());
+ DeoptimizationData* deopt_input_data =
+ DeoptimizationData::cast(code->deoptimization_data());
int deopt_count = deopt_input_data->DeoptCount();
for (int i = 0; i < deopt_count; i++) {
int pc_offset = deopt_input_data->Pc(i)->value();
@@ -230,6 +213,7 @@ void ProfilerListener::RecordInliningInfo(CodeEntry* entry,
SharedFunctionInfo* shared_info = SharedFunctionInfo::cast(
deopt_input_data->LiteralArray()->get(shared_info_id));
if (!depth++) continue; // Skip the current function itself.
+
const char* resource_name =
(shared_info->script()->IsScript() &&
Script::cast(shared_info->script())->name()->IsName())
@@ -275,7 +259,7 @@ void ProfilerListener::RecordDeoptInlinedFrames(CodeEntry* entry,
DCHECK(last_position.IsKnown());
std::vector<CpuProfileDeoptFrame> inlined_frames;
for (SourcePositionInfo& pos_info : last_position.InliningStack(code)) {
- DCHECK(pos_info.position.ScriptOffset() != kNoSourcePosition);
+ DCHECK_NE(pos_info.position.ScriptOffset(), kNoSourcePosition);
if (!pos_info.function->script()->IsScript()) continue;
int script_id = Script::cast(pos_info.function->script())->id();
size_t offset = static_cast<size_t>(pos_info.position.ScriptOffset());
@@ -293,19 +277,23 @@ CodeEntry* ProfilerListener::NewCodeEntry(
CodeEventListener::LogEventsAndTags tag, const char* name,
const char* name_prefix, const char* resource_name, int line_number,
int column_number, JITLineInfoTable* line_info, Address instruction_start) {
- CodeEntry* code_entry =
- new CodeEntry(tag, name, name_prefix, resource_name, line_number,
- column_number, line_info, instruction_start);
- code_entries_.push_back(code_entry);
- return code_entry;
+ std::unique_ptr<CodeEntry> code_entry = base::make_unique<CodeEntry>(
+ tag, name, name_prefix, resource_name, line_number, column_number,
+ line_info, instruction_start);
+ CodeEntry* raw_code_entry = code_entry.get();
+ code_entries_.push_back(std::move(code_entry));
+ return raw_code_entry;
}
void ProfilerListener::AddObserver(CodeEventObserver* observer) {
base::LockGuard<base::Mutex> guard(&mutex_);
- if (std::find(observers_.begin(), observers_.end(), observer) !=
- observers_.end())
- return;
- observers_.push_back(observer);
+ if (observers_.empty()) {
+ code_entries_.clear();
+ }
+ if (std::find(observers_.begin(), observers_.end(), observer) ==
+ observers_.end()) {
+ observers_.push_back(observer);
+ }
}
void ProfilerListener::RemoveObserver(CodeEventObserver* observer) {