diff options
Diffstat (limited to 'deps/v8/src/logging/log.cc')
-rw-r--r-- | deps/v8/src/logging/log.cc | 128 |
1 files changed, 72 insertions, 56 deletions
diff --git a/deps/v8/src/logging/log.cc b/deps/v8/src/logging/log.cc index 9b86a16031..2befcd330a 100644 --- a/deps/v8/src/logging/log.cc +++ b/deps/v8/src/logging/log.cc @@ -180,9 +180,9 @@ class CodeEventLogger::NameBuffer { }; CodeEventLogger::CodeEventLogger(Isolate* isolate) - : isolate_(isolate), name_buffer_(new NameBuffer) {} + : isolate_(isolate), name_buffer_(std::make_unique<NameBuffer>()) {} -CodeEventLogger::~CodeEventLogger() { delete name_buffer_; } +CodeEventLogger::~CodeEventLogger() = default; void CodeEventLogger::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag, AbstractCode code, const char* comment) { @@ -477,6 +477,23 @@ void ExternalCodeEventListener::RegExpCodeCreateEvent(AbstractCode code, code_event_handler_->Handle(reinterpret_cast<v8::CodeEvent*>(&code_event)); } +void ExternalCodeEventListener::CodeMoveEvent(AbstractCode from, + AbstractCode to) { + CodeEvent code_event; + code_event.previous_code_start_address = + static_cast<uintptr_t>(from.InstructionStart()); + code_event.code_start_address = static_cast<uintptr_t>(to.InstructionStart()); + code_event.code_size = static_cast<size_t>(to.InstructionSize()); + code_event.function_name = isolate_->factory()->empty_string(); + code_event.script_name = isolate_->factory()->empty_string(); + code_event.script_line = 0; + code_event.script_column = 0; + code_event.code_type = v8::CodeEventType::kRelocationType; + code_event.comment = ""; + + code_event_handler_->Handle(reinterpret_cast<v8::CodeEvent*>(&code_event)); +} + // Low-level logging support. class LowLevelLogger : public CodeEventLogger { public: @@ -816,7 +833,7 @@ class Ticker : public sampler::Sampler { Ticker(Isolate* isolate, int interval_microseconds) : sampler::Sampler(reinterpret_cast<v8::Isolate*>(isolate)), sampling_thread_( - base::make_unique<SamplingThread>(this, interval_microseconds)) {} + std::make_unique<SamplingThread>(this, interval_microseconds)) {} ~Ticker() override { if (IsActive()) Stop(); @@ -910,13 +927,11 @@ void Profiler::Run() { Logger::Logger(Isolate* isolate) : isolate_(isolate), - log_events_(nullptr), is_logging_(false), - log_(nullptr), is_initialized_(false), existing_code_logger_(isolate) {} -Logger::~Logger() { delete log_; } +Logger::~Logger() = default; const LogSeparator Logger::kNext = LogSeparator::kSeparator; @@ -931,7 +946,7 @@ void Logger::RemoveCodeEventListener(CodeEventListener* listener) { void Logger::ProfilerBeginEvent() { if (!log_->IsEnabled()) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << "profiler" << kNext << "begin" << kNext << FLAG_prof_sampling_interval; msg.WriteToLogFile(); } @@ -942,7 +957,7 @@ void Logger::StringEvent(const char* name, const char* value) { void Logger::UncheckedStringEvent(const char* name, const char* value) { if (!log_->IsEnabled()) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << name << kNext << value; msg.WriteToLogFile(); } @@ -953,7 +968,7 @@ void Logger::IntPtrTEvent(const char* name, intptr_t value) { void Logger::UncheckedIntPtrTEvent(const char* name, intptr_t value) { if (!log_->IsEnabled()) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << name << kNext; msg.AppendFormatString("%" V8PRIdPTR, value); msg.WriteToLogFile(); @@ -961,14 +976,14 @@ void Logger::UncheckedIntPtrTEvent(const char* name, intptr_t value) { void Logger::HandleEvent(const char* name, Address* location) { if (!log_->IsEnabled() || !FLAG_log_handles) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << name << kNext << reinterpret_cast<void*>(location); msg.WriteToLogFile(); } void Logger::ApiSecurityCheck() { if (!log_->IsEnabled() || !FLAG_log_api) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << "api" << kNext << "check-security"; msg.WriteToLogFile(); } @@ -977,7 +992,7 @@ void Logger::SharedLibraryEvent(const std::string& library_path, uintptr_t start, uintptr_t end, intptr_t aslr_slide) { if (!log_->IsEnabled() || !FLAG_prof_cpp) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << "shared-library" << kNext << library_path.c_str() << kNext << reinterpret_cast<void*>(start) << kNext << reinterpret_cast<void*>(end) << kNext << aslr_slide; @@ -988,7 +1003,7 @@ void Logger::CodeDeoptEvent(Code code, DeoptimizeKind kind, Address pc, int fp_to_sp_delta) { if (!log_->IsEnabled()) return; Deoptimizer::DeoptInfo info = Deoptimizer::GetDeoptInfo(code, pc); - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << "code-deopt" << kNext << timer_.Elapsed().InMicroseconds() << kNext << code.CodeSize() << kNext << reinterpret_cast<void*>(code.InstructionStart()); @@ -1014,14 +1029,14 @@ void Logger::CodeDeoptEvent(Code code, DeoptimizeKind kind, Address pc, void Logger::CurrentTimeEvent() { if (!log_->IsEnabled()) return; DCHECK(FLAG_log_internal_timer_events); - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << "current-time" << kNext << timer_.Elapsed().InMicroseconds(); msg.WriteToLogFile(); } void Logger::TimerEvent(Logger::StartEnd se, const char* name) { if (!log_->IsEnabled()) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); switch (se) { case START: msg << "timer-event-start"; @@ -1053,7 +1068,7 @@ void Logger::ApiNamedPropertyAccess(const char* tag, JSObject holder, Object property_name) { DCHECK(property_name.IsName()); if (!log_->IsEnabled() || !FLAG_log_api) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << "api" << kNext << tag << kNext << holder.class_name() << kNext << Name::cast(property_name); msg.WriteToLogFile(); @@ -1062,7 +1077,7 @@ void Logger::ApiNamedPropertyAccess(const char* tag, JSObject holder, void Logger::ApiIndexedPropertyAccess(const char* tag, JSObject holder, uint32_t index) { if (!log_->IsEnabled() || !FLAG_log_api) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << "api" << kNext << tag << kNext << holder.class_name() << kNext << index; msg.WriteToLogFile(); @@ -1070,21 +1085,21 @@ void Logger::ApiIndexedPropertyAccess(const char* tag, JSObject holder, void Logger::ApiObjectAccess(const char* tag, JSObject object) { if (!log_->IsEnabled() || !FLAG_log_api) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << "api" << kNext << tag << kNext << object.class_name(); msg.WriteToLogFile(); } void Logger::ApiEntryCall(const char* name) { if (!log_->IsEnabled() || !FLAG_log_api) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << "api" << kNext << name; msg.WriteToLogFile(); } void Logger::NewEvent(const char* name, void* object, size_t size) { if (!log_->IsEnabled() || !FLAG_log) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << "new" << kNext << name << kNext << object << kNext << static_cast<unsigned int>(size); msg.WriteToLogFile(); @@ -1092,7 +1107,7 @@ void Logger::NewEvent(const char* name, void* object, size_t size) { void Logger::DeleteEvent(const char* name, void* object) { if (!log_->IsEnabled() || !FLAG_log) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << "delete" << kNext << name << kNext << object; msg.WriteToLogFile(); } @@ -1100,7 +1115,7 @@ void Logger::DeleteEvent(const char* name, void* object) { void Logger::CallbackEventInternal(const char* prefix, Name name, Address entry_point) { if (!FLAG_log_code || !log_->IsEnabled()) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << kLogEventsNames[CodeEventListener::CODE_CREATION_EVENT] << kNext << kLogEventsNames[CodeEventListener::CALLBACK_TAG] << kNext << -2 << kNext << timer_.Elapsed().InMicroseconds() << kNext @@ -1149,7 +1164,7 @@ void Logger::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag, AbstractCode code, const char* comment) { if (!is_listening_to_code_events()) return; if (!FLAG_log_code || !log_->IsEnabled()) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); AppendCodeCreateHeader(msg, tag, code, &timer_); msg << comment; msg.WriteToLogFile(); @@ -1159,7 +1174,7 @@ void Logger::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag, AbstractCode code, Name name) { if (!is_listening_to_code_events()) return; if (!FLAG_log_code || !log_->IsEnabled()) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); AppendCodeCreateHeader(msg, tag, code, &timer_); msg << name; msg.WriteToLogFile(); @@ -1175,7 +1190,7 @@ void Logger::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag, return; } - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); AppendCodeCreateHeader(msg, tag, code, &timer_); msg << name << kNext << reinterpret_cast<void*>(shared.address()) << kNext << ComputeMarker(shared, code); @@ -1186,7 +1201,7 @@ void Logger::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag, const wasm::WasmCode* code, wasm::WasmName name) { if (!is_listening_to_code_events()) return; if (!FLAG_log_code || !log_->IsEnabled()) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); AppendCodeCreateHeader(msg, tag, AbstractCode::Kind::WASM_FUNCTION, code->instructions().begin(), code->instructions().length(), &timer_); @@ -1215,7 +1230,7 @@ void Logger::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag, if (!is_listening_to_code_events()) return; if (!FLAG_log_code || !log_->IsEnabled()) return; { - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); AppendCodeCreateHeader(msg, tag, code, &timer_); msg << shared.DebugName() << " " << source << ":" << line << ":" << column << kNext << reinterpret_cast<void*>(shared.address()) << kNext @@ -1250,7 +1265,7 @@ void Logger::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag, // <function-id> is an index into the <fns> function table // <fns> is the function table encoded as a sequence of strings // S<shared-function-info-address> - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << "code-source-info" << kNext << reinterpret_cast<void*>(code.InstructionStart()) << kNext << script.id() << kNext << shared.StartPosition() << kNext @@ -1307,7 +1322,7 @@ void Logger::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag, void Logger::CodeDisableOptEvent(AbstractCode code, SharedFunctionInfo shared) { if (!is_listening_to_code_events()) return; if (!FLAG_log_code || !log_->IsEnabled()) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << kLogEventsNames[CodeEventListener::CODE_DISABLE_OPT_EVENT] << kNext << shared.DebugName() << kNext << GetBailoutReason(shared.disable_optimization_reason()); @@ -1323,7 +1338,7 @@ void Logger::CodeMovingGCEvent() { void Logger::RegExpCodeCreateEvent(AbstractCode code, String source) { if (!is_listening_to_code_events()) return; if (!FLAG_log_code || !log_->IsEnabled()) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); AppendCodeCreateHeader(msg, CodeEventListener::REG_EXP_TAG, code, &timer_); msg << source; msg.WriteToLogFile(); @@ -1373,7 +1388,7 @@ void Logger::CodeLinePosInfoRecordEvent( void Logger::CodeNameEvent(Address addr, int pos, const char* code_name) { if (code_name == nullptr) return; // Not a code object. - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << kLogEventsNames[CodeEventListener::SNAPSHOT_CODE_NAME_EVENT] << kNext << pos << kNext << code_name; msg.WriteToLogFile(); @@ -1387,7 +1402,7 @@ void Logger::SharedFunctionInfoMoveEvent(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_); + Log::MessageBuilder msg(log_.get()); msg << kLogEventsNames[event] << kNext << reinterpret_cast<void*>(from) << kNext << reinterpret_cast<void*>(to); msg.WriteToLogFile(); @@ -1395,7 +1410,7 @@ void Logger::MoveEventInternal(CodeEventListener::LogEventsAndTags event, void Logger::ResourceEvent(const char* name, const char* tag) { if (!log_->IsEnabled() || !FLAG_log) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << name << kNext << tag << kNext; uint32_t sec, usec; @@ -1409,7 +1424,7 @@ void Logger::ResourceEvent(const char* name, const char* tag) { void Logger::SuspectReadEvent(Name name, Object obj) { if (!log_->IsEnabled() || !FLAG_log_suspect) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); String class_name = obj.IsJSObject() ? JSObject::cast(obj).class_name() : ReadOnlyRoots(isolate_).empty_string(); msg << "suspect-read" << kNext << class_name << kNext << name; @@ -1432,7 +1447,7 @@ void Logger::FunctionEvent(const char* reason, int script_id, double time_delta, int start_position, int end_position, String function_name) { if (!log_->IsEnabled() || !FLAG_log_function_events) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); AppendFunctionMessage(msg, reason, script_id, time_delta, start_position, end_position, &timer_); if (!function_name.is_null()) msg << function_name; @@ -1444,7 +1459,7 @@ void Logger::FunctionEvent(const char* reason, int script_id, double time_delta, const char* function_name, size_t function_name_length) { if (!log_->IsEnabled() || !FLAG_log_function_events) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); AppendFunctionMessage(msg, reason, script_id, time_delta, start_position, end_position, &timer_); if (function_name_length > 0) { @@ -1456,7 +1471,7 @@ void Logger::FunctionEvent(const char* reason, int script_id, double time_delta, void Logger::CompilationCacheEvent(const char* action, const char* cache_type, SharedFunctionInfo sfi) { if (!log_->IsEnabled() || !FLAG_log_function_events) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); int script_id = -1; if (sfi.script().IsScript()) { script_id = Script::cast(sfi.script()).id(); @@ -1470,7 +1485,7 @@ void Logger::CompilationCacheEvent(const char* action, const char* cache_type, void Logger::ScriptEvent(ScriptEventType type, int script_id) { if (!log_->IsEnabled() || !FLAG_log_function_events) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << "script" << Logger::kNext; switch (type) { case ScriptEventType::kReserveId: @@ -1497,7 +1512,7 @@ void Logger::ScriptEvent(ScriptEventType type, int script_id) { void Logger::ScriptDetails(Script script) { if (!log_->IsEnabled() || !FLAG_log_function_events) return; { - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << "script-details" << Logger::kNext << script.id() << Logger::kNext; if (script.name().IsString()) { msg << String::cast(script.name()); @@ -1514,7 +1529,7 @@ void Logger::ScriptDetails(Script script) { bool Logger::EnsureLogScriptSource(Script script) { if (!log_->IsEnabled()) return false; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); // Make sure the script is written to the log file. int script_id = script.id(); if (logged_source_code_.find(script_id) != logged_source_code_.end()) { @@ -1544,7 +1559,7 @@ void Logger::RuntimeCallTimerEvent() { RuntimeCallStats* stats = isolate_->counters()->runtime_call_stats(); RuntimeCallCounter* counter = stats->current_counter(); if (counter == nullptr) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << "active-runtime-timer" << kNext << counter->name(); msg.WriteToLogFile(); } @@ -1555,7 +1570,7 @@ void Logger::TickEvent(TickSample* sample, bool overflow) { v8::tracing::TracingCategoryObserver::ENABLED_BY_NATIVE)) { RuntimeCallTimerEvent(); } - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << kLogEventsNames[CodeEventListener::TICK_EVENT] << kNext << reinterpret_cast<void*>(sample->pc) << kNext << timer_.Elapsed().InMicroseconds(); @@ -1577,7 +1592,7 @@ void Logger::ICEvent(const char* type, bool keyed, Map map, Object key, char old_state, char new_state, const char* modifier, const char* slow_stub_reason) { if (!log_->IsEnabled() || !FLAG_trace_ic) return; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); if (keyed) msg << "Keyed"; int line; int column; @@ -1611,7 +1626,7 @@ void Logger::MapEvent(const char* type, Map from, Map to, const char* reason, if (!isolate_->bootstrapper()->IsActive()) { pc = isolate_->GetAbstractPC(&line, &column); } - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << "map" << kNext << type << kNext << timer_.Elapsed().InMicroseconds() << kNext << AsHex::Address(from.ptr()) << kNext << AsHex::Address(to.ptr()) << kNext << AsHex::Address(pc) << kNext @@ -1634,7 +1649,7 @@ void Logger::MapEvent(const char* type, Map from, Map to, const char* reason, void Logger::MapCreate(Map map) { if (!log_->IsEnabled() || !FLAG_trace_maps) return; DisallowHeapAllocation no_gc; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << "map-create" << kNext << timer_.Elapsed().InMicroseconds() << kNext << AsHex::Address(map.ptr()); msg.WriteToLogFile(); @@ -1643,7 +1658,7 @@ void Logger::MapCreate(Map map) { void Logger::MapDetails(Map map) { if (!log_->IsEnabled() || !FLAG_trace_maps) return; DisallowHeapAllocation no_gc; - Log::MessageBuilder msg(log_); + Log::MessageBuilder msg(log_.get()); msg << "map-details" << kNext << timer_.Elapsed().InMicroseconds() << kNext << AsHex::Address(map.ptr()) << kNext; if (FLAG_trace_maps_details) { @@ -1842,24 +1857,25 @@ bool Logger::SetUp(Isolate* isolate) { std::ostringstream log_file_name; std::ostringstream source_log_file_name; PrepareLogFileName(log_file_name, isolate, FLAG_logfile); - log_ = new Log(this, log_file_name.str().c_str()); + log_ = std::make_unique<Log>(this, log_file_name.str().c_str()); if (FLAG_perf_basic_prof) { - perf_basic_logger_.reset(new PerfBasicLogger(isolate)); + perf_basic_logger_ = std::make_unique<PerfBasicLogger>(isolate); AddCodeEventListener(perf_basic_logger_.get()); } if (FLAG_perf_prof) { - perf_jit_logger_.reset(new PerfJitLogger(isolate)); + perf_jit_logger_ = std::make_unique<PerfJitLogger>(isolate); AddCodeEventListener(perf_jit_logger_.get()); } if (FLAG_ll_prof) { - ll_logger_.reset(new LowLevelLogger(isolate, log_file_name.str().c_str())); + ll_logger_ = + std::make_unique<LowLevelLogger>(isolate, log_file_name.str().c_str()); AddCodeEventListener(ll_logger_.get()); } - ticker_.reset(new Ticker(isolate, FLAG_prof_sampling_interval)); + ticker_ = std::make_unique<Ticker>(isolate, FLAG_prof_sampling_interval); if (Log::InitLogAtStart()) { is_logging_ = true; @@ -1868,7 +1884,7 @@ bool Logger::SetUp(Isolate* isolate) { timer_.Start(); if (FLAG_prof_cpp) { - profiler_.reset(new Profiler(isolate)); + profiler_ = std::make_unique<Profiler>(isolate); is_logging_ = true; profiler_->Engage(); } @@ -1891,7 +1907,7 @@ void Logger::SetCodeEventHandler(uint32_t options, if (isolate_->wasm_engine() != nullptr) { isolate_->wasm_engine()->EnableCodeLogging(isolate_); } - jit_logger_.reset(new JitLogger(isolate_, event_handler)); + jit_logger_ = std::make_unique<JitLogger>(isolate_, event_handler); AddCodeEventListener(jit_logger_.get()); if (options & kJitCodeEventEnumExisting) { HandleScope scope(isolate_); @@ -2042,9 +2058,9 @@ void ExistingCodeLogger::LogCompiledFunctions() { const int wasm_module_objects_count = EnumerateWasmModuleObjects(heap, nullptr); - std::unique_ptr<Handle<WasmModuleObject>[]> module_objects( - new Handle<WasmModuleObject>[wasm_module_objects_count]); - EnumerateWasmModuleObjects(heap, module_objects.get()); + ScopedVector<Handle<WasmModuleObject>> module_objects( + wasm_module_objects_count); + EnumerateWasmModuleObjects(heap, module_objects.begin()); for (int i = 0; i < wasm_module_objects_count; ++i) { module_objects[i]->native_module()->LogWasmCodes(isolate_); } |