summaryrefslogtreecommitdiff
path: root/deps/v8/src/log.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/log.cc')
-rw-r--r--deps/v8/src/log.cc317
1 files changed, 192 insertions, 125 deletions
diff --git a/deps/v8/src/log.cc b/deps/v8/src/log.cc
index da9e126879..77d68ef94e 100644
--- a/deps/v8/src/log.cc
+++ b/deps/v8/src/log.cc
@@ -114,7 +114,7 @@ class CodeEventLogger::NameBuffer {
} else {
Symbol* symbol = Symbol::cast(name);
AppendBytes("symbol(");
- if (!symbol->name()->IsUndefined(symbol->GetIsolate())) {
+ if (!symbol->name()->IsUndefined()) {
AppendBytes("\"");
AppendString(String::cast(symbol->name()));
AppendBytes("\" ");
@@ -191,8 +191,8 @@ class CodeEventLogger::NameBuffer {
uc16 utf16_buffer[kUtf16BufferSize];
};
-
-CodeEventLogger::CodeEventLogger() : name_buffer_(new NameBuffer) { }
+CodeEventLogger::CodeEventLogger(Isolate* isolate)
+ : isolate_(isolate), name_buffer_(new NameBuffer) {}
CodeEventLogger::~CodeEventLogger() { delete name_buffer_; }
@@ -267,10 +267,10 @@ void CodeEventLogger::RegExpCodeCreateEvent(AbstractCode* code,
// Linux perf tool logging support
class PerfBasicLogger : public CodeEventLogger {
public:
- PerfBasicLogger();
+ explicit PerfBasicLogger(Isolate* isolate);
~PerfBasicLogger() override;
- void CodeMoveEvent(AbstractCode* from, AbstractCode* to) override {}
+ void CodeMoveEvent(AbstractCode* from, Address to) override {}
void CodeDisableOptEvent(AbstractCode* code,
SharedFunctionInfo* shared) override {}
@@ -293,7 +293,8 @@ const char PerfBasicLogger::kFilenameFormatString[] = "/tmp/perf-%d.map";
// Extra space for the PID in the filename
const int PerfBasicLogger::kFilenameBufferPadding = 16;
-PerfBasicLogger::PerfBasicLogger() : perf_output_handle_(nullptr) {
+PerfBasicLogger::PerfBasicLogger(Isolate* isolate)
+ : CodeEventLogger(isolate), perf_output_handle_(nullptr) {
// Open the perf JIT dump file.
int bufferSize = sizeof(kFilenameFormatString) + kFilenameBufferPadding;
ScopedVector<char> perf_dump_name(bufferSize);
@@ -405,7 +406,8 @@ void ExternalCodeEventListener::CodeCreateEvent(
void ExternalCodeEventListener::CodeCreateEvent(
CodeEventListener::LogEventsAndTags tag, AbstractCode* code, Name* name) {
Handle<String> name_string =
- Name::ToFunctionName(Handle<Name>(name, isolate_)).ToHandleChecked();
+ Name::ToFunctionName(isolate_, Handle<Name>(name, isolate_))
+ .ToHandleChecked();
CodeEvent code_event;
code_event.code_start_address =
@@ -425,7 +427,8 @@ void ExternalCodeEventListener::CodeCreateEvent(
CodeEventListener::LogEventsAndTags tag, AbstractCode* code,
SharedFunctionInfo* shared, Name* name) {
Handle<String> name_string =
- Name::ToFunctionName(Handle<Name>(name, isolate_)).ToHandleChecked();
+ Name::ToFunctionName(isolate_, Handle<Name>(name, isolate_))
+ .ToHandleChecked();
CodeEvent code_event;
code_event.code_start_address =
@@ -445,10 +448,11 @@ void ExternalCodeEventListener::CodeCreateEvent(
CodeEventListener::LogEventsAndTags tag, AbstractCode* code,
SharedFunctionInfo* shared, Name* source, int line, int column) {
Handle<String> name_string =
- Name::ToFunctionName(Handle<Name>(shared->Name(), isolate_))
+ Name::ToFunctionName(isolate_, Handle<Name>(shared->Name(), isolate_))
.ToHandleChecked();
Handle<String> source_string =
- Name::ToFunctionName(Handle<Name>(source, isolate_)).ToHandleChecked();
+ Name::ToFunctionName(isolate_, Handle<Name>(source, isolate_))
+ .ToHandleChecked();
CodeEvent code_event;
code_event.code_start_address =
@@ -489,10 +493,10 @@ void ExternalCodeEventListener::RegExpCodeCreateEvent(AbstractCode* code,
// Low-level logging support.
class LowLevelLogger : public CodeEventLogger {
public:
- explicit LowLevelLogger(const char* file_name);
+ LowLevelLogger(Isolate* isolate, const char* file_name);
~LowLevelLogger() override;
- void CodeMoveEvent(AbstractCode* from, AbstractCode* to) override;
+ void CodeMoveEvent(AbstractCode* from, Address to) override;
void CodeDisableOptEvent(AbstractCode* code,
SharedFunctionInfo* shared) override {}
void SnapshotPositionEvent(HeapObject* obj, int pos);
@@ -543,7 +547,8 @@ class LowLevelLogger : public CodeEventLogger {
const char LowLevelLogger::kLogExt[] = ".ll";
-LowLevelLogger::LowLevelLogger(const char* name) : ll_output_handle_(nullptr) {
+LowLevelLogger::LowLevelLogger(Isolate* isolate, const char* name)
+ : CodeEventLogger(isolate), ll_output_handle_(nullptr) {
// Open the low-level log file.
size_t len = strlen(name);
ScopedVector<char> ll_name(static_cast<int>(len + sizeof(kLogExt)));
@@ -610,10 +615,11 @@ void LowLevelLogger::LogRecordedBuffer(const wasm::WasmCode* code,
code->instructions().length());
}
-void LowLevelLogger::CodeMoveEvent(AbstractCode* from, AbstractCode* to) {
+void LowLevelLogger::CodeMoveEvent(AbstractCode* from, Address to) {
CodeMoveStruct event;
event.from_address = from->InstructionStart();
- event.to_address = to->InstructionStart();
+ size_t header_size = from->InstructionStart() - from->address();
+ event.to_address = to + header_size;
LogWriteStruct(event);
}
@@ -633,9 +639,9 @@ void LowLevelLogger::CodeMovingGCEvent() {
class JitLogger : public CodeEventLogger {
public:
- explicit JitLogger(JitCodeEventHandler code_event_handler);
+ JitLogger(Isolate* isolate, JitCodeEventHandler code_event_handler);
- void CodeMoveEvent(AbstractCode* from, AbstractCode* to) override;
+ void CodeMoveEvent(AbstractCode* from, Address to) override;
void CodeDisableOptEvent(AbstractCode* code,
SharedFunctionInfo* shared) override {}
void AddCodeLinePosInfoEvent(void* jit_handler_data, int pc_offset,
@@ -655,10 +661,8 @@ class JitLogger : public CodeEventLogger {
base::Mutex logger_mutex_;
};
-
-JitLogger::JitLogger(JitCodeEventHandler code_event_handler)
- : code_event_handler_(code_event_handler) {
-}
+JitLogger::JitLogger(Isolate* isolate, JitCodeEventHandler code_event_handler)
+ : CodeEventLogger(isolate), code_event_handler_(code_event_handler) {}
void JitLogger::LogRecordedBuffer(AbstractCode* code,
SharedFunctionInfo* shared, const char* name,
@@ -672,11 +676,13 @@ void JitLogger::LogRecordedBuffer(AbstractCode* code,
event.code_len = code->InstructionSize();
Handle<SharedFunctionInfo> shared_function_handle;
if (shared && shared->script()->IsScript()) {
- shared_function_handle = Handle<SharedFunctionInfo>(shared);
+ shared_function_handle =
+ Handle<SharedFunctionInfo>(shared, shared->GetIsolate());
}
event.script = ToApiHandle<v8::UnboundScript>(shared_function_handle);
event.name.str = name;
event.name.len = length;
+ event.isolate = reinterpret_cast<v8::Isolate*>(isolate_);
code_event_handler_(&event);
}
@@ -690,10 +696,11 @@ void JitLogger::LogRecordedBuffer(const wasm::WasmCode* code, const char* name,
event.code_len = code->instructions().length();
event.name.str = name;
event.name.len = length;
+ event.isolate = reinterpret_cast<v8::Isolate*>(isolate_);
code_event_handler_(&event);
}
-void JitLogger::CodeMoveEvent(AbstractCode* from, AbstractCode* to) {
+void JitLogger::CodeMoveEvent(AbstractCode* from, Address to) {
base::LockGuard<base::Mutex> guard(&logger_mutex_);
JitCodeEvent event;
@@ -702,7 +709,13 @@ void JitLogger::CodeMoveEvent(AbstractCode* from, AbstractCode* to) {
from->IsCode() ? JitCodeEvent::JIT_CODE : JitCodeEvent::BYTE_CODE;
event.code_start = reinterpret_cast<void*>(from->InstructionStart());
event.code_len = from->InstructionSize();
- event.new_code_start = reinterpret_cast<void*>(to->InstructionStart());
+
+ // Calculate the header size.
+ const size_t header_size = from->InstructionStart() - from->address();
+
+ // Calculate the new start address of the instructions.
+ event.new_code_start = reinterpret_cast<void*>(to + header_size);
+ event.isolate = reinterpret_cast<v8::Isolate*>(isolate_);
code_event_handler_(&event);
}
@@ -719,6 +732,7 @@ void JitLogger::AddCodeLinePosInfoEvent(
event.line_info.offset = pc_offset;
event.line_info.pos = position;
event.line_info.position_type = position_type;
+ event.isolate = reinterpret_cast<v8::Isolate*>(isolate_);
code_event_handler_(&event);
}
@@ -728,6 +742,7 @@ void* JitLogger::StartCodePosInfoEvent() {
JitCodeEvent event;
memset(&event, 0, sizeof(event));
event.type = JitCodeEvent::CODE_START_LINE_INFO_RECORDING;
+ event.isolate = reinterpret_cast<v8::Isolate*>(isolate_);
code_event_handler_(&event);
return event.user_data;
@@ -740,6 +755,7 @@ void JitLogger::EndCodePosInfoEvent(Address start_address,
event.type = JitCodeEvent::CODE_END_LINE_INFO_RECORDING;
event.code_start = reinterpret_cast<void*>(start_address);
event.user_data = jit_handler_data;
+ event.isolate = reinterpret_cast<v8::Isolate*>(isolate_);
code_event_handler_(&event);
}
@@ -1044,7 +1060,7 @@ void Logger::SharedLibraryEvent(const std::string& library_path,
msg.WriteToLogFile();
}
-void Logger::CodeDeoptEvent(Code* code, DeoptKind kind, Address pc,
+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);
@@ -1065,17 +1081,7 @@ void Logger::CodeDeoptEvent(Code* code, DeoptKind kind, Address pc,
deopt_location << "<unknown>";
}
msg << kNext << inlining_id << kNext << script_offset << kNext;
- switch (kind) {
- case kLazy:
- msg << "lazy" << kNext;
- break;
- case kSoft:
- msg << "soft" << kNext;
- break;
- case kEager:
- msg << "eager" << kNext;
- break;
- }
+ msg << Deoptimizer::MessageFor(kind) << kNext;
msg << deopt_location.str().c_str() << kNext
<< DeoptimizeReasonToString(info.deopt_reason);
msg.WriteToLogFile();
@@ -1304,40 +1310,20 @@ void Logger::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
Name* source, int line, int column) {
if (!is_listening_to_code_events()) return;
if (!FLAG_log_code || !log_->IsEnabled()) return;
-
- Log::MessageBuilder msg(log_);
- AppendCodeCreateHeader(msg, tag, code, &timer_);
- msg << shared->DebugName() << " " << source << ":" << line << ":" << column
- << kNext << reinterpret_cast<void*>(shared->address()) << kNext
- << ComputeMarker(shared, code);
- msg.WriteToLogFile();
+ {
+ Log::MessageBuilder msg(log_);
+ AppendCodeCreateHeader(msg, tag, code, &timer_);
+ msg << shared->DebugName() << " " << source << ":" << line << ":" << column
+ << kNext << reinterpret_cast<void*>(shared->address()) << kNext
+ << ComputeMarker(shared, code);
+ msg.WriteToLogFile();
+ }
if (!FLAG_log_source_code) return;
Object* script_object = shared->script();
if (!script_object->IsScript()) return;
- // Make sure the script is written to the log file.
Script* script = Script::cast(script_object);
- int script_id = script->id();
- if (logged_source_code_.find(script_id) == logged_source_code_.end()) {
- // This script has not been logged yet.
- logged_source_code_.insert(script_id);
- Object* source_object = script->source();
- if (source_object->IsString()) {
- String* source_code = String::cast(source_object);
- msg << "script" << kNext << script_id << kNext;
-
- // Log the script name.
- if (script->name()->IsString()) {
- msg << String::cast(script->name()) << kNext;
- } else {
- msg << "<unknown>" << kNext;
- }
-
- // Log the source code.
- msg << source_code;
- msg.WriteToLogFile();
- }
- }
+ if (!EnsureLogScriptSource(script)) return;
// We log source code information in the form:
//
@@ -1360,10 +1346,11 @@ 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_);
msg << "code-source-info" << kNext
- << reinterpret_cast<void*>(code->InstructionStart()) << kNext << script_id
- << kNext << shared->StartPosition() << kNext << shared->EndPosition()
- << kNext;
+ << reinterpret_cast<void*>(code->InstructionStart()) << kNext
+ << script->id() << kNext << shared->StartPosition() << kNext
+ << shared->EndPosition() << kNext;
SourcePositionTableIterator iterator(code->source_position_table());
bool is_first = true;
@@ -1444,10 +1431,9 @@ void Logger::RegExpCodeCreateEvent(AbstractCode* code, String* source) {
msg.WriteToLogFile();
}
-void Logger::CodeMoveEvent(AbstractCode* from, AbstractCode* to) {
+void Logger::CodeMoveEvent(AbstractCode* from, Address to) {
if (!is_listening_to_code_events()) return;
- MoveEventInternal(CodeEventListener::CODE_MOVE_EVENT, from->address(),
- to->address());
+ MoveEventInternal(CodeEventListener::CODE_MOVE_EVENT, from->address(), to);
}
namespace {
@@ -1527,57 +1513,135 @@ void Logger::SuspectReadEvent(Name* name, Object* obj) {
if (!log_->IsEnabled() || !FLAG_log_suspect) return;
Log::MessageBuilder msg(log_);
String* class_name = obj->IsJSObject()
- ? JSObject::cast(obj)->class_name()
- : isolate_->heap()->empty_string();
+ ? JSObject::cast(obj)->class_name()
+ : ReadOnlyRoots(isolate_).empty_string();
msg << "suspect-read" << kNext << class_name << kNext << name;
msg.WriteToLogFile();
}
namespace {
void AppendFunctionMessage(Log::MessageBuilder& msg, const char* reason,
- Script* script, int script_id, double time_delta,
- int start_position, int end_position,
- base::ElapsedTimer* timer) {
- msg << "function" << Logger::kNext << reason << Logger::kNext;
- if (script) {
- if (script->name()->IsString()) {
- msg << String::cast(script->name());
- }
- msg << Logger::kNext << script->id();
- } else {
- msg << Logger::kNext << script_id;
- }
- msg << Logger::kNext << start_position << Logger::kNext << end_position
+ int script_id, double time_delta, int start_position,
+ int end_position, base::ElapsedTimer* timer) {
+ msg << "function" << Logger::kNext << reason << Logger::kNext << script_id
+ << Logger::kNext << start_position << Logger::kNext << end_position
<< Logger::kNext << time_delta << Logger::kNext
<< timer->Elapsed().InMicroseconds() << Logger::kNext;
}
} // namespace
-void Logger::FunctionEvent(const char* reason, Script* script, int script_id,
- double time_delta, int start_position,
- int end_position, String* function_name) {
+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_);
- AppendFunctionMessage(msg, reason, script, script_id, time_delta,
- start_position, end_position, &timer_);
+ AppendFunctionMessage(msg, reason, script_id, time_delta, start_position,
+ end_position, &timer_);
if (function_name) msg << function_name;
msg.WriteToLogFile();
}
-void Logger::FunctionEvent(const char* reason, Script* script, int script_id,
- double time_delta, int start_position,
- int end_position, const char* function_name,
+void Logger::FunctionEvent(const char* reason, int script_id, double time_delta,
+ int start_position, int end_position,
+ const char* function_name,
size_t function_name_length) {
if (!log_->IsEnabled() || !FLAG_log_function_events) return;
Log::MessageBuilder msg(log_);
- AppendFunctionMessage(msg, reason, script, script_id, time_delta,
- start_position, end_position, &timer_);
+ AppendFunctionMessage(msg, reason, script_id, time_delta, start_position,
+ end_position, &timer_);
if (function_name_length > 0) {
msg.AppendStringPart(function_name, function_name_length);
}
msg.WriteToLogFile();
}
+void Logger::CompilationCacheEvent(const char* action, const char* cache_type,
+ SharedFunctionInfo* sfi) {
+ if (!log_->IsEnabled() || !FLAG_log_function_events) return;
+ Log::MessageBuilder msg(log_);
+ int script_id = -1;
+ if (sfi->script()->IsScript()) {
+ script_id = Script::cast(sfi->script())->id();
+ }
+ msg << "compilation-cache" << Logger::kNext << action << Logger::kNext
+ << cache_type << Logger::kNext << script_id << Logger::kNext
+ << sfi->StartPosition() << Logger::kNext << sfi->EndPosition()
+ << Logger::kNext << timer_.Elapsed().InMicroseconds();
+ msg.WriteToLogFile();
+}
+
+void Logger::ScriptEvent(ScriptEventType type, int script_id) {
+ if (!log_->IsEnabled() || !FLAG_log_function_events) return;
+ Log::MessageBuilder msg(log_);
+ msg << "script" << Logger::kNext;
+ switch (type) {
+ case ScriptEventType::kReserveId:
+ msg << "reserve-id";
+ break;
+ case ScriptEventType::kCreate:
+ msg << "create";
+ break;
+ case ScriptEventType::kDeserialize:
+ msg << "deserialize";
+ break;
+ case ScriptEventType::kBackgroundCompile:
+ msg << "background-compile";
+ break;
+ case ScriptEventType::kStreamingCompile:
+ msg << "streaming-compile";
+ break;
+ }
+ msg << Logger::kNext << script_id << Logger::kNext
+ << timer_.Elapsed().InMicroseconds();
+ msg.WriteToLogFile();
+}
+
+void Logger::ScriptDetails(Script* script) {
+ if (!log_->IsEnabled() || !FLAG_log_function_events) return;
+ {
+ Log::MessageBuilder msg(log_);
+ msg << "script-details" << Logger::kNext << script->id() << Logger::kNext;
+ if (script->name()->IsString()) {
+ msg << String::cast(script->name());
+ }
+ msg << Logger::kNext << script->line_offset() << Logger::kNext
+ << script->column_offset() << Logger::kNext;
+ if (script->source_mapping_url()->IsString()) {
+ msg << String::cast(script->source_mapping_url());
+ }
+ msg.WriteToLogFile();
+ }
+ EnsureLogScriptSource(script);
+}
+
+bool Logger::EnsureLogScriptSource(Script* script) {
+ if (!log_->IsEnabled()) return false;
+ Log::MessageBuilder msg(log_);
+ // 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()) {
+ return false;
+ }
+ // This script has not been logged yet.
+ logged_source_code_.insert(script_id);
+ Object* source_object = script->source();
+ if (!source_object->IsString()) return false;
+ String* source_code = String::cast(source_object);
+ msg << "script-source" << kNext << script_id << kNext;
+
+ // Log the script name.
+ if (script->name()->IsString()) {
+ msg << String::cast(script->name()) << kNext;
+ } else {
+ msg << "<unknown>" << kNext;
+ }
+
+ // Log the source code.
+ msg << source_code;
+ msg.WriteToLogFile();
+ return true;
+}
+
void Logger::RuntimeCallTimerEvent() {
RuntimeCallStats* stats = isolate_->counters()->runtime_call_stats();
RuntimeCallCounter* counter = stats->current_counter();
@@ -1715,10 +1779,10 @@ static void AddFunctionAndCode(SharedFunctionInfo* sfi,
Handle<SharedFunctionInfo>* sfis,
Handle<AbstractCode>* code_objects, int offset) {
if (sfis != nullptr) {
- sfis[offset] = Handle<SharedFunctionInfo>(sfi);
+ sfis[offset] = Handle<SharedFunctionInfo>(sfi, sfi->GetIsolate());
}
if (code_objects != nullptr) {
- code_objects[offset] = Handle<AbstractCode>(code_object);
+ code_objects[offset] = Handle<AbstractCode>(code_object, sfi->GetIsolate());
}
}
@@ -1765,23 +1829,23 @@ static int EnumerateCompiledFunctions(Heap* heap,
return compiled_funcs_count;
}
-static int EnumerateWasmModules(Heap* heap,
- Handle<WasmCompiledModule>* modules) {
+static int EnumerateWasmModuleObjects(
+ Heap* heap, Handle<WasmModuleObject>* module_objects) {
HeapIterator iterator(heap);
DisallowHeapAllocation no_gc;
- int wasm_modules_count = 0;
+ int module_objects_count = 0;
for (HeapObject* obj = iterator.next(); obj != nullptr;
obj = iterator.next()) {
- if (obj->IsWasmCompiledModule()) {
- WasmCompiledModule* module = WasmCompiledModule::cast(obj);
- if (modules != nullptr) {
- modules[wasm_modules_count] = Handle<WasmCompiledModule>(module);
+ if (obj->IsWasmModuleObject()) {
+ WasmModuleObject* module = WasmModuleObject::cast(obj);
+ if (module_objects != nullptr) {
+ module_objects[module_objects_count] = handle(module, heap->isolate());
}
- wasm_modules_count++;
+ module_objects_count++;
}
}
- return wasm_modules_count;
+ return module_objects_count;
}
void Logger::LogCodeObject(Object* object) {
@@ -1909,17 +1973,17 @@ bool Logger::SetUp(Isolate* isolate) {
log_ = new Log(this, log_file_name.str().c_str());
if (FLAG_perf_basic_prof) {
- perf_basic_logger_ = new PerfBasicLogger();
+ perf_basic_logger_ = new PerfBasicLogger(isolate);
AddCodeEventListener(perf_basic_logger_);
}
if (FLAG_perf_prof) {
- perf_jit_logger_ = new PerfJitLogger();
+ perf_jit_logger_ = new PerfJitLogger(isolate);
AddCodeEventListener(perf_jit_logger_);
}
if (FLAG_ll_prof) {
- ll_logger_ = new LowLevelLogger(log_file_name.str().c_str());
+ ll_logger_ = new LowLevelLogger(isolate, log_file_name.str().c_str());
AddCodeEventListener(ll_logger_);
}
@@ -1954,7 +2018,7 @@ void Logger::SetCodeEventHandler(uint32_t options,
}
if (event_handler) {
- jit_logger_ = new JitLogger(event_handler);
+ jit_logger_ = new JitLogger(isolate_, event_handler);
AddCodeEventListener(jit_logger_);
if (options & kJitCodeEventEnumExisting) {
HandleScope scope(isolate_);
@@ -2090,21 +2154,24 @@ void ExistingCodeLogger::LogCompiledFunctions() {
// GetScriptLineNumber call.
for (int i = 0; i < compiled_funcs_count; ++i) {
if (sfis[i]->function_data()->IsInterpreterData()) {
- LogExistingFunction(sfis[i],
- Handle<AbstractCode>(AbstractCode::cast(
- sfis[i]->InterpreterTrampoline())),
- CodeEventListener::INTERPRETED_FUNCTION_TAG);
+ LogExistingFunction(
+ sfis[i],
+ Handle<AbstractCode>(
+ AbstractCode::cast(sfis[i]->InterpreterTrampoline()), isolate_),
+ CodeEventListener::INTERPRETED_FUNCTION_TAG);
}
if (code_objects[i].is_identical_to(BUILTIN_CODE(isolate_, CompileLazy)))
continue;
LogExistingFunction(sfis[i], code_objects[i]);
}
- const int compiled_wasm_modules_count = EnumerateWasmModules(heap, nullptr);
- ScopedVector<Handle<WasmCompiledModule>> modules(compiled_wasm_modules_count);
- EnumerateWasmModules(heap, modules.start());
- for (int i = 0; i < compiled_wasm_modules_count; ++i) {
- modules[i]->LogWasmCodes(isolate_);
+ 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());
+ for (int i = 0; i < wasm_module_objects_count; ++i) {
+ module_objects[i]->native_module()->LogWasmCodes(isolate_);
}
}
@@ -2143,12 +2210,12 @@ void ExistingCodeLogger::LogExistingFunction(
Handle<SharedFunctionInfo> shared, Handle<AbstractCode> code,
CodeEventListener::LogEventsAndTags tag) {
if (shared->script()->IsScript()) {
- Handle<Script> script(Script::cast(shared->script()));
+ Handle<Script> script(Script::cast(shared->script()), isolate_);
int line_num = Script::GetLineNumber(script, shared->StartPosition()) + 1;
int column_num =
Script::GetColumnNumber(script, shared->StartPosition()) + 1;
if (script->name()->IsString()) {
- Handle<String> script_name(String::cast(script->name()));
+ Handle<String> script_name(String::cast(script->name()), isolate_);
if (line_num > 0) {
CALL_CODE_EVENT_HANDLER(
CodeCreateEvent(Logger::ToNativeByScript(tag, *script), *code,
@@ -2162,7 +2229,7 @@ void ExistingCodeLogger::LogExistingFunction(
} else {
CALL_CODE_EVENT_HANDLER(CodeCreateEvent(
Logger::ToNativeByScript(tag, *script), *code, *shared,
- isolate_->heap()->empty_string(), line_num, column_num))
+ ReadOnlyRoots(isolate_).empty_string(), line_num, column_num))
}
} else if (shared->IsApiFunction()) {
// API function.
@@ -2178,8 +2245,8 @@ void ExistingCodeLogger::LogExistingFunction(
CALL_CODE_EVENT_HANDLER(CallbackEvent(shared->DebugName(), entry_point))
}
} else {
- CALL_CODE_EVENT_HANDLER(
- CodeCreateEvent(tag, *code, *shared, isolate_->heap()->empty_string()))
+ CALL_CODE_EVENT_HANDLER(CodeCreateEvent(
+ tag, *code, *shared, ReadOnlyRoots(isolate_).empty_string()))
}
}