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

Unified Diff: src/log.cc

Issue 2061623002: Introduce JIT code events dispatcher for the isolate. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebaseline Created 4 years, 6 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/log.h ('k') | src/log-inl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/log.cc
diff --git a/src/log.cc b/src/log.cc
index e327308b845e5634e4e7a13f385290dc058642f1..040109535b247f2cf660b7f3e5646fef23afed89 100644
--- a/src/log.cc
+++ b/src/log.cc
@@ -31,23 +31,10 @@ namespace internal {
#define DECLARE_EVENT(ignore1, name) name,
-static const char* const kLogEventsNames[Logger::NUMBER_OF_LOG_EVENTS] = {
- LOG_EVENTS_AND_TAGS_LIST(DECLARE_EVENT)
-};
+static const char* kLogEventsNames[CodeEventListener::NUMBER_OF_LOG_EVENTS] = {
+ LOG_EVENTS_AND_TAGS_LIST(DECLARE_EVENT)};
#undef DECLARE_EVENT
-
-#define CALL_LISTENERS(Call) \
-for (int i = 0; i < listeners_.length(); ++i) { \
- listeners_[i]->Call; \
-}
-
-#define PROFILER_LOG(Call) \
- if (isolate_->is_profiling()) { \
- isolate_->cpu_profiler()->Call; \
- } else { \
- }
-
static const char* ComputeMarker(SharedFunctionInfo* shared,
AbstractCode* code) {
switch (code->kind()) {
@@ -70,7 +57,7 @@ class CodeEventLogger::NameBuffer {
utf8_pos_ = 0;
}
- void Init(Logger::LogEventsAndTags tag) {
+ void Init(CodeEventListener::LogEventsAndTags tag) {
Reset();
AppendBytes(kLogEventsNames[tag]);
AppendByte(':');
@@ -164,21 +151,21 @@ CodeEventLogger::CodeEventLogger() : name_buffer_(new NameBuffer) { }
CodeEventLogger::~CodeEventLogger() { delete name_buffer_; }
-void CodeEventLogger::CodeCreateEvent(Logger::LogEventsAndTags tag,
+void CodeEventLogger::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
AbstractCode* code, const char* comment) {
name_buffer_->Init(tag);
name_buffer_->AppendBytes(comment);
LogRecordedBuffer(code, NULL, name_buffer_->get(), name_buffer_->size());
}
-void CodeEventLogger::CodeCreateEvent(Logger::LogEventsAndTags tag,
+void CodeEventLogger::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
AbstractCode* code, Name* name) {
name_buffer_->Init(tag);
name_buffer_->AppendName(name);
LogRecordedBuffer(code, NULL, name_buffer_->get(), name_buffer_->size());
}
-void CodeEventLogger::CodeCreateEvent(Logger::LogEventsAndTags tag,
+void CodeEventLogger::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
AbstractCode* code,
SharedFunctionInfo* shared, Name* name) {
name_buffer_->Init(tag);
@@ -187,7 +174,7 @@ void CodeEventLogger::CodeCreateEvent(Logger::LogEventsAndTags tag,
LogRecordedBuffer(code, shared, name_buffer_->get(), name_buffer_->size());
}
-void CodeEventLogger::CodeCreateEvent(Logger::LogEventsAndTags tag,
+void CodeEventLogger::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
AbstractCode* code,
SharedFunctionInfo* shared, Name* source,
int line, int column) {
@@ -207,7 +194,7 @@ void CodeEventLogger::CodeCreateEvent(Logger::LogEventsAndTags tag,
LogRecordedBuffer(code, shared, name_buffer_->get(), name_buffer_->size());
}
-void CodeEventLogger::CodeCreateEvent(Logger::LogEventsAndTags tag,
+void CodeEventLogger::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
AbstractCode* code, int args_count) {
name_buffer_->Init(tag);
name_buffer_->AppendInt(args_count);
@@ -216,7 +203,7 @@ void CodeEventLogger::CodeCreateEvent(Logger::LogEventsAndTags tag,
void CodeEventLogger::RegExpCodeCreateEvent(AbstractCode* code,
String* source) {
- name_buffer_->Init(Logger::REG_EXP_TAG);
+ name_buffer_->Init(CodeEventListener::REG_EXP_TAG);
name_buffer_->AppendString(source);
LogRecordedBuffer(code, NULL, name_buffer_->get(), name_buffer_->size());
}
@@ -774,24 +761,16 @@ Logger::~Logger() {
delete log_;
}
-
void Logger::addCodeEventListener(CodeEventListener* listener) {
- DCHECK(!hasCodeEventListener(listener));
- listeners_.Add(listener);
+ bool result = isolate_->code_event_dispatcher()->AddListener(listener);
+ USE(result);
+ DCHECK(result);
}
-
void Logger::removeCodeEventListener(CodeEventListener* listener) {
- DCHECK(hasCodeEventListener(listener));
- listeners_.RemoveElement(listener);
-}
-
-
-bool Logger::hasCodeEventListener(CodeEventListener* listener) {
- return listeners_.Contains(listener);
+ isolate_->code_event_dispatcher()->RemoveListener(listener);
}
-
void Logger::ProfilerBeginEvent() {
if (!log_->IsEnabled()) return;
Log::MessageBuilder msg(log_);
@@ -879,7 +858,6 @@ void Logger::SharedLibraryEvent(const std::string& library_path,
void Logger::CodeDeoptEvent(Code* code, Address pc, int fp_to_sp_delta) {
- PROFILER_LOG(CodeDeoptEvent(code, pc, fp_to_sp_delta));
if (!log_->IsEnabled() || !FLAG_log_internal_timer_events) return;
Log::MessageBuilder msg(log_);
int since_epoch = static_cast<int>(timer_.Elapsed().InMicroseconds());
@@ -1071,8 +1049,8 @@ void Logger::CallbackEventInternal(const char* prefix, Name* name,
if (!FLAG_log_code || !log_->IsEnabled()) return;
Log::MessageBuilder msg(log_);
msg.Append("%s,%s,-2,",
- kLogEventsNames[CODE_CREATION_EVENT],
- kLogEventsNames[CALLBACK_TAG]);
+ kLogEventsNames[CodeEventListener::CODE_CREATION_EVENT],
+ kLogEventsNames[CodeEventListener::CALLBACK_TAG]);
msg.AppendAddress(entry_point);
if (name->IsString()) {
base::SmartArrayPointer<char> str =
@@ -1095,41 +1073,33 @@ void Logger::CallbackEventInternal(const char* prefix, Name* name,
void Logger::CallbackEvent(Name* name, Address entry_point) {
- PROFILER_LOG(CallbackEvent(name, entry_point));
CallbackEventInternal("", name, entry_point);
}
void Logger::GetterCallbackEvent(Name* name, Address entry_point) {
- PROFILER_LOG(GetterCallbackEvent(name, entry_point));
CallbackEventInternal("get ", name, entry_point);
}
void Logger::SetterCallbackEvent(Name* name, Address entry_point) {
- PROFILER_LOG(SetterCallbackEvent(name, entry_point));
CallbackEventInternal("set ", name, entry_point);
}
static void AppendCodeCreateHeader(Log::MessageBuilder* msg,
- Logger::LogEventsAndTags tag,
+ CodeEventListener::LogEventsAndTags tag,
AbstractCode* code) {
DCHECK(msg);
msg->Append("%s,%s,%d,",
- kLogEventsNames[Logger::CODE_CREATION_EVENT],
- kLogEventsNames[tag],
- code->kind());
+ kLogEventsNames[CodeEventListener::CODE_CREATION_EVENT],
+ kLogEventsNames[tag], code->kind());
msg->AppendAddress(code->address());
msg->Append(",%d,", code->ExecutableSize());
}
-void Logger::CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
- const char* comment) {
- PROFILER_LOG(CodeCreateEvent(tag, code, comment));
-
+void Logger::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
+ AbstractCode* code, const char* comment) {
if (!is_logging_code_events()) return;
- CALL_LISTENERS(CodeCreateEvent(tag, code, comment));
-
if (!FLAG_log_code || !log_->IsEnabled()) return;
Log::MessageBuilder msg(log_);
AppendCodeCreateHeader(&msg, tag, code);
@@ -1137,13 +1107,9 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
msg.WriteToLogFile();
}
-void Logger::CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
- Name* name) {
- PROFILER_LOG(CodeCreateEvent(tag, code, name));
-
+void Logger::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
+ AbstractCode* code, Name* name) {
if (!is_logging_code_events()) return;
- CALL_LISTENERS(CodeCreateEvent(tag, code, name));
-
if (!FLAG_log_code || !log_->IsEnabled()) return;
Log::MessageBuilder msg(log_);
AppendCodeCreateHeader(&msg, tag, code);
@@ -1157,13 +1123,10 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
msg.WriteToLogFile();
}
-void Logger::CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
- SharedFunctionInfo* shared, Name* name) {
- PROFILER_LOG(CodeCreateEvent(tag, code, shared, name));
-
+void Logger::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
+ AbstractCode* code, SharedFunctionInfo* shared,
+ Name* name) {
if (!is_logging_code_events()) return;
- CALL_LISTENERS(CodeCreateEvent(tag, code, shared, name));
-
if (!FLAG_log_code || !log_->IsEnabled()) return;
if (code == AbstractCode::cast(
isolate_->builtins()->builtin(Builtins::kCompileLazy))) {
@@ -1189,14 +1152,10 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
// Although, it is possible to extract source and line from
// the SharedFunctionInfo object, we left it to caller
// to leave logging functions free from heap allocations.
-void Logger::CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
- SharedFunctionInfo* shared, Name* source, int line,
- int column) {
- PROFILER_LOG(CodeCreateEvent(tag, code, shared, source, line, column));
-
+void Logger::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
+ AbstractCode* code, SharedFunctionInfo* shared,
+ Name* source, int line, int column) {
if (!is_logging_code_events()) return;
- CALL_LISTENERS(CodeCreateEvent(tag, code, shared, source, line, column));
-
if (!FLAG_log_code || !log_->IsEnabled()) return;
Log::MessageBuilder msg(log_);
AppendCodeCreateHeader(&msg, tag, code);
@@ -1216,13 +1175,9 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
msg.WriteToLogFile();
}
-void Logger::CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
- int args_count) {
- PROFILER_LOG(CodeCreateEvent(tag, code, args_count));
-
+void Logger::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
+ AbstractCode* code, int args_count) {
if (!is_logging_code_events()) return;
- CALL_LISTENERS(CodeCreateEvent(tag, code, args_count));
-
if (!FLAG_log_code || !log_->IsEnabled()) return;
Log::MessageBuilder msg(log_);
AppendCodeCreateHeader(&msg, tag, code);
@@ -1232,14 +1187,10 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
void Logger::CodeDisableOptEvent(AbstractCode* code,
SharedFunctionInfo* shared) {
- PROFILER_LOG(CodeDisableOptEvent(code, shared));
-
if (!is_logging_code_events()) return;
- CALL_LISTENERS(CodeDisableOptEvent(code, shared));
-
if (!FLAG_log_code || !log_->IsEnabled()) return;
Log::MessageBuilder msg(log_);
- msg.Append("%s,", kLogEventsNames[CODE_DISABLE_OPT_EVENT]);
+ msg.Append("%s,", kLogEventsNames[CodeEventListener::CODE_DISABLE_OPT_EVENT]);
base::SmartArrayPointer<char> name =
shared->DebugName()->ToCString(DISALLOW_NULLS, ROBUST_STRING_TRAVERSAL);
msg.Append("\"%s\",", name.get());
@@ -1249,23 +1200,16 @@ void Logger::CodeDisableOptEvent(AbstractCode* code,
void Logger::CodeMovingGCEvent() {
- PROFILER_LOG(CodeMovingGCEvent());
-
if (!is_logging_code_events()) return;
if (!log_->IsEnabled() || !FLAG_ll_prof) return;
- CALL_LISTENERS(CodeMovingGCEvent());
base::OS::SignalCodeMovingGC();
}
void Logger::RegExpCodeCreateEvent(AbstractCode* code, String* source) {
- PROFILER_LOG(RegExpCodeCreateEvent(code, source));
-
if (!is_logging_code_events()) return;
- CALL_LISTENERS(RegExpCodeCreateEvent(code, source));
-
if (!FLAG_log_code || !log_->IsEnabled()) return;
Log::MessageBuilder msg(log_);
- AppendCodeCreateHeader(&msg, REG_EXP_TAG, code);
+ AppendCodeCreateHeader(&msg, CodeEventListener::REG_EXP_TAG, code);
msg.Append('"');
msg.AppendDetailed(source, false);
msg.Append('"');
@@ -1273,11 +1217,8 @@ void Logger::RegExpCodeCreateEvent(AbstractCode* code, String* source) {
}
void Logger::CodeMoveEvent(AbstractCode* from, Address to) {
- PROFILER_LOG(CodeMoveEvent(from, to));
-
if (!is_logging_code_events()) return;
- CALL_LISTENERS(CodeMoveEvent(from, to));
- MoveEventInternal(CODE_MOVE_EVENT, from->address(), to);
+ MoveEventInternal(CodeEventListener::CODE_MOVE_EVENT, from->address(), to);
}
void Logger::CodeLinePosInfoAddPositionEvent(void* jit_handler_data,
@@ -1314,7 +1255,8 @@ void Logger::CodeEndLinePosInfoRecordEvent(AbstractCode* code,
void Logger::CodeNameEvent(Address addr, int pos, const char* code_name) {
if (code_name == NULL) return; // Not a code object.
Log::MessageBuilder msg(log_);
- msg.Append("%s,%d,", kLogEventsNames[SNAPSHOT_CODE_NAME_EVENT], pos);
+ msg.Append("%s,%d,",
+ kLogEventsNames[CodeEventListener::SNAPSHOT_CODE_NAME_EVENT], pos);
msg.AppendDoubleQuotedString(code_name);
msg.WriteToLogFile();
}
@@ -1322,13 +1264,11 @@ void Logger::CodeNameEvent(Address addr, int pos, const char* code_name) {
void Logger::SharedFunctionInfoMoveEvent(Address from, Address to) {
if (!is_logging_code_events()) return;
- MoveEventInternal(SHARED_FUNC_MOVE_EVENT, from, to);
+ MoveEventInternal(CodeEventListener::SHARED_FUNC_MOVE_EVENT, from, to);
}
-
-void Logger::MoveEventInternal(LogEventsAndTags event,
- Address from,
- Address to) {
+void Logger::MoveEventInternal(CodeEventListener::LogEventsAndTags event,
+ Address from, Address to) {
if (!FLAG_log_code || !log_->IsEnabled()) return;
Log::MessageBuilder msg(log_);
msg.Append("%s,", kLogEventsNames[event]);
@@ -1440,7 +1380,7 @@ void Logger::TickEvent(TickSample* sample, bool overflow) {
RuntimeCallTimerEvent();
}
Log::MessageBuilder msg(log_);
- msg.Append("%s,", kLogEventsNames[TICK_EVENT]);
+ msg.Append("%s,", kLogEventsNames[CodeEventListener::TICK_EVENT]);
msg.AppendAddress(sample->pc);
msg.Append(",%d", static_cast<int>(timer_.Elapsed().InMicroseconds()));
if (sample->has_external_callback) {
@@ -1467,6 +1407,7 @@ void Logger::StopProfiler() {
if (profiler_ != NULL) {
profiler_->pause();
is_logging_ = false;
+ removeCodeEventListener(this);
}
}
@@ -1548,7 +1489,7 @@ static int EnumerateCompiledFunctions(Heap* heap,
void Logger::LogCodeObject(Object* object) {
AbstractCode* code_object = AbstractCode::cast(object);
- LogEventsAndTags tag = Logger::STUB_TAG;
+ CodeEventListener::LogEventsAndTags tag = CodeEventListener::STUB_TAG;
const char* description = "Unknown code from the snapshot";
switch (code_object->kind()) {
case AbstractCode::FUNCTION:
@@ -1566,28 +1507,28 @@ void Logger::LogCodeObject(Object* object) {
CodeStub::MajorName(CodeStub::GetMajorKey(code_object->GetCode()));
if (description == NULL)
description = "A stub from the snapshot";
- tag = Logger::STUB_TAG;
+ tag = CodeEventListener::STUB_TAG;
break;
case AbstractCode::REGEXP:
description = "Regular expression code";
- tag = Logger::REG_EXP_TAG;
+ tag = CodeEventListener::REG_EXP_TAG;
break;
case AbstractCode::BUILTIN:
description =
isolate_->builtins()->name(code_object->GetCode()->builtin_index());
- tag = Logger::BUILTIN_TAG;
+ tag = CodeEventListener::BUILTIN_TAG;
break;
case AbstractCode::HANDLER:
description = "An IC handler from the snapshot";
- tag = Logger::HANDLER_TAG;
+ tag = CodeEventListener::HANDLER_TAG;
break;
case AbstractCode::KEYED_LOAD_IC:
description = "A keyed load IC from the snapshot";
- tag = Logger::KEYED_LOAD_IC_TAG;
+ tag = CodeEventListener::KEYED_LOAD_IC_TAG;
break;
case AbstractCode::LOAD_IC:
description = "A load IC from the snapshot";
- tag = Logger::LOAD_IC_TAG;
+ tag = CodeEventListener::LOAD_IC_TAG;
break;
case AbstractCode::LOAD_GLOBAL_IC:
description = "A load global IC from the snapshot";
@@ -1595,27 +1536,27 @@ void Logger::LogCodeObject(Object* object) {
break;
case AbstractCode::CALL_IC:
description = "A call IC from the snapshot";
- tag = Logger::CALL_IC_TAG;
+ tag = CodeEventListener::CALL_IC_TAG;
break;
case AbstractCode::STORE_IC:
description = "A store IC from the snapshot";
- tag = Logger::STORE_IC_TAG;
+ tag = CodeEventListener::STORE_IC_TAG;
break;
case AbstractCode::KEYED_STORE_IC:
description = "A keyed store IC from the snapshot";
- tag = Logger::KEYED_STORE_IC_TAG;
+ tag = CodeEventListener::KEYED_STORE_IC_TAG;
break;
case AbstractCode::WASM_FUNCTION:
description = "A Wasm function";
- tag = Logger::STUB_TAG;
+ tag = CodeEventListener::STUB_TAG;
break;
case AbstractCode::JS_TO_WASM_FUNCTION:
description = "A JavaScript to Wasm adapter";
- tag = Logger::STUB_TAG;
+ tag = CodeEventListener::STUB_TAG;
break;
case AbstractCode::WASM_TO_JS_FUNCTION:
description = "A Wasm to JavaScript adapter";
- tag = Logger::STUB_TAG;
+ tag = CodeEventListener::STUB_TAG;
break;
case AbstractCode::NUMBER_OF_KINDS:
UNIMPLEMENTED();
@@ -1654,8 +1595,8 @@ void Logger::LogBytecodeHandlers() {
Code* code = interpreter->GetBytecodeHandler(bytecode, operand_scale);
std::string bytecode_name =
interpreter::Bytecodes::ToString(bytecode, operand_scale);
- CodeCreateEvent(Logger::BYTECODE_HANDLER_TAG, AbstractCode::cast(code),
- bytecode_name.c_str());
+ CodeCreateEvent(CodeEventListener::BYTECODE_HANDLER_TAG,
+ AbstractCode::cast(code), bytecode_name.c_str());
}
}
}
@@ -1674,20 +1615,22 @@ void Logger::LogExistingFunction(Handle<SharedFunctionInfo> shared,
if (line_num > 0) {
PROFILE(isolate_,
CodeCreateEvent(
- Logger::ToNativeByScript(Logger::LAZY_COMPILE_TAG, *script),
+ Logger::ToNativeByScript(
+ CodeEventListener::LAZY_COMPILE_TAG, *script),
*code, *shared, *script_name, line_num, column_num));
} else {
// Can't distinguish eval and script here, so always use Script.
- PROFILE(isolate_, CodeCreateEvent(Logger::ToNativeByScript(
- Logger::SCRIPT_TAG, *script),
- *code, *shared, *script_name));
+ PROFILE(isolate_,
+ CodeCreateEvent(Logger::ToNativeByScript(
+ CodeEventListener::SCRIPT_TAG, *script),
+ *code, *shared, *script_name));
}
} else {
PROFILE(isolate_,
- CodeCreateEvent(
- Logger::ToNativeByScript(Logger::LAZY_COMPILE_TAG, *script),
- *code, *shared, isolate_->heap()->empty_string(), line_num,
- column_num));
+ CodeCreateEvent(Logger::ToNativeByScript(
+ CodeEventListener::LAZY_COMPILE_TAG, *script),
+ *code, *shared, isolate_->heap()->empty_string(),
+ line_num, column_num));
}
} else if (shared->IsApiFunction()) {
// API function.
@@ -1703,8 +1646,8 @@ void Logger::LogExistingFunction(Handle<SharedFunctionInfo> shared,
PROFILE(isolate_, CallbackEvent(*func_name, entry_point));
}
} else {
- PROFILE(isolate_, CodeCreateEvent(Logger::LAZY_COMPILE_TAG, *code, *shared,
- *func_name));
+ PROFILE(isolate_, CodeCreateEvent(CodeEventListener::LAZY_COMPILE_TAG,
+ *code, *shared, *func_name));
}
}
@@ -1817,7 +1760,6 @@ bool Logger::SetUp(Isolate* isolate) {
PrepareLogFileName(log_file_name, isolate, FLAG_logfile);
log_->Initialize(log_file_name.str().c_str());
-
if (FLAG_perf_basic_prof) {
perf_basic_logger_ = new PerfBasicLogger();
addCodeEventListener(perf_basic_logger_);
@@ -1847,6 +1789,10 @@ bool Logger::SetUp(Isolate* isolate) {
profiler_->Engage();
}
+ if (is_logging_) {
+ addCodeEventListener(this);
+ }
+
return true;
}
« no previous file with comments | « src/log.h ('k') | src/log-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698