| Index: src/log.cc
|
| diff --git a/src/log.cc b/src/log.cc
|
| index d23da1476cd9ea532226b54e496265dc86c29b6b..dfcf4ff90789593cb89543920ca77032d367fb74 100644
|
| --- a/src/log.cc
|
| +++ b/src/log.cc
|
| @@ -45,11 +45,13 @@ for (int i = 0; i < listeners_.length(); ++i) { \
|
| } \
|
| } while (false);
|
|
|
| -static const char* ComputeMarker(SharedFunctionInfo* shared, Code* code) {
|
| +static const char* ComputeMarker(SharedFunctionInfo* shared,
|
| + AbstractCode* code) {
|
| switch (code->kind()) {
|
| - case Code::FUNCTION:
|
| + case AbstractCode::FUNCTION:
|
| + case AbstractCode::INTERPRETED_FUNCTION:
|
| return shared->optimization_disabled() ? "" : "~";
|
| - case Code::OPTIMIZED_FUNCTION:
|
| + case AbstractCode::OPTIMIZED_FUNCTION:
|
| return "*";
|
| default:
|
| return "";
|
| @@ -159,42 +161,35 @@ CodeEventLogger::CodeEventLogger() : name_buffer_(new NameBuffer) { }
|
|
|
| CodeEventLogger::~CodeEventLogger() { delete name_buffer_; }
|
|
|
| -
|
| void CodeEventLogger::CodeCreateEvent(Logger::LogEventsAndTags tag,
|
| - Code* code,
|
| - const char* comment) {
|
| + 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,
|
| - Code* code,
|
| - Name* name) {
|
| + 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,
|
| - Code* code,
|
| + AbstractCode* code,
|
| SharedFunctionInfo* shared,
|
| - CompilationInfo* info,
|
| - Name* name) {
|
| + CompilationInfo* info, Name* name) {
|
| name_buffer_->Init(tag);
|
| name_buffer_->AppendBytes(ComputeMarker(shared, code));
|
| name_buffer_->AppendName(name);
|
| LogRecordedBuffer(code, shared, name_buffer_->get(), name_buffer_->size());
|
| }
|
|
|
| -
|
| void CodeEventLogger::CodeCreateEvent(Logger::LogEventsAndTags tag,
|
| - Code* code,
|
| + AbstractCode* code,
|
| SharedFunctionInfo* shared,
|
| - CompilationInfo* info,
|
| - Name* source, int line, int column) {
|
| + CompilationInfo* info, Name* source,
|
| + int line, int column) {
|
| name_buffer_->Init(tag);
|
| name_buffer_->AppendBytes(ComputeMarker(shared, code));
|
| name_buffer_->AppendString(shared->DebugName());
|
| @@ -211,17 +206,15 @@ void CodeEventLogger::CodeCreateEvent(Logger::LogEventsAndTags tag,
|
| LogRecordedBuffer(code, shared, name_buffer_->get(), name_buffer_->size());
|
| }
|
|
|
| -
|
| void CodeEventLogger::CodeCreateEvent(Logger::LogEventsAndTags tag,
|
| - Code* code,
|
| - int args_count) {
|
| + AbstractCode* code, int args_count) {
|
| name_buffer_->Init(tag);
|
| name_buffer_->AppendInt(args_count);
|
| LogRecordedBuffer(code, NULL, name_buffer_->get(), name_buffer_->size());
|
| }
|
|
|
| -
|
| -void CodeEventLogger::RegExpCodeCreateEvent(Code* code, String* source) {
|
| +void CodeEventLogger::RegExpCodeCreateEvent(AbstractCode* code,
|
| + String* source) {
|
| name_buffer_->Init(Logger::REG_EXP_TAG);
|
| name_buffer_->AppendString(source);
|
| LogRecordedBuffer(code, NULL, name_buffer_->get(), name_buffer_->size());
|
| @@ -232,17 +225,15 @@ void CodeEventLogger::RegExpCodeCreateEvent(Code* code, String* source) {
|
| class PerfBasicLogger : public CodeEventLogger {
|
| public:
|
| PerfBasicLogger();
|
| - virtual ~PerfBasicLogger();
|
| + ~PerfBasicLogger() override;
|
|
|
| - virtual void CodeMoveEvent(Address from, Address to) { }
|
| - virtual void CodeDisableOptEvent(Code* code, SharedFunctionInfo* shared) { }
|
| - virtual void CodeDeleteEvent(Address from) { }
|
| + void CodeMoveEvent(AbstractCode* from, Address to) override {}
|
| + void CodeDisableOptEvent(AbstractCode* code,
|
| + SharedFunctionInfo* shared) override {}
|
|
|
| private:
|
| - virtual void LogRecordedBuffer(Code* code,
|
| - SharedFunctionInfo* shared,
|
| - const char* name,
|
| - int length);
|
| + void LogRecordedBuffer(AbstractCode* code, SharedFunctionInfo* shared,
|
| + const char* name, int length) override;
|
|
|
| // Extension added to V8 log file name to get the low-level log name.
|
| static const char kFilenameFormatString[];
|
| @@ -281,16 +272,12 @@ PerfBasicLogger::~PerfBasicLogger() {
|
| perf_output_handle_ = NULL;
|
| }
|
|
|
| -
|
| -void PerfBasicLogger::LogRecordedBuffer(Code* code,
|
| - SharedFunctionInfo*,
|
| - const char* name,
|
| - int length) {
|
| - DCHECK(code->instruction_start() == code->address() + Code::kHeaderSize);
|
| -
|
| +void PerfBasicLogger::LogRecordedBuffer(AbstractCode* code, SharedFunctionInfo*,
|
| + const char* name, int length) {
|
| if (FLAG_perf_basic_prof_only_functions &&
|
| - (code->kind() != Code::FUNCTION &&
|
| - code->kind() != Code::OPTIMIZED_FUNCTION)) {
|
| + (code->kind() != AbstractCode::FUNCTION &&
|
| + code->kind() != AbstractCode::INTERPRETED_FUNCTION &&
|
| + code->kind() != AbstractCode::OPTIMIZED_FUNCTION)) {
|
| return;
|
| }
|
|
|
| @@ -306,19 +293,17 @@ void PerfBasicLogger::LogRecordedBuffer(Code* code,
|
| class LowLevelLogger : public CodeEventLogger {
|
| public:
|
| explicit LowLevelLogger(const char* file_name);
|
| - virtual ~LowLevelLogger();
|
| + ~LowLevelLogger() override;
|
|
|
| - virtual void CodeMoveEvent(Address from, Address to);
|
| - virtual void CodeDisableOptEvent(Code* code, SharedFunctionInfo* shared) { }
|
| - virtual void CodeDeleteEvent(Address from);
|
| - virtual void SnapshotPositionEvent(Address addr, int pos);
|
| - virtual void CodeMovingGCEvent();
|
| + void CodeMoveEvent(AbstractCode* from, Address to) override;
|
| + void CodeDisableOptEvent(AbstractCode* code,
|
| + SharedFunctionInfo* shared) override {}
|
| + void SnapshotPositionEvent(Address addr, int pos);
|
| + void CodeMovingGCEvent() override;
|
|
|
| private:
|
| - virtual void LogRecordedBuffer(Code* code,
|
| - SharedFunctionInfo* shared,
|
| - const char* name,
|
| - int length);
|
| + void LogRecordedBuffer(AbstractCode* code, SharedFunctionInfo* shared,
|
| + const char* name, int length) override;
|
|
|
| // Low-level profiling event structures.
|
| struct CodeCreateStruct {
|
| @@ -338,13 +323,6 @@ class LowLevelLogger : public CodeEventLogger {
|
| };
|
|
|
|
|
| - struct CodeDeleteStruct {
|
| - static const char kTag = 'D';
|
| -
|
| - Address address;
|
| - };
|
| -
|
| -
|
| struct SnapshotPositionStruct {
|
| static const char kTag = 'P';
|
|
|
| @@ -422,15 +400,11 @@ void LowLevelLogger::LogCodeInfo() {
|
| LogWriteBytes(arch, sizeof(arch));
|
| }
|
|
|
| -
|
| -void LowLevelLogger::LogRecordedBuffer(Code* code,
|
| - SharedFunctionInfo*,
|
| - const char* name,
|
| - int length) {
|
| +void LowLevelLogger::LogRecordedBuffer(AbstractCode* code, SharedFunctionInfo*,
|
| + const char* name, int length) {
|
| CodeCreateStruct event;
|
| event.name_size = length;
|
| event.code_address = code->instruction_start();
|
| - DCHECK(event.code_address == code->address() + Code::kHeaderSize);
|
| event.code_size = code->instruction_size();
|
| LogWriteStruct(event);
|
| LogWriteBytes(name, length);
|
| @@ -439,27 +413,23 @@ void LowLevelLogger::LogRecordedBuffer(Code* code,
|
| code->instruction_size());
|
| }
|
|
|
| -
|
| -void LowLevelLogger::CodeMoveEvent(Address from, Address to) {
|
| +void LowLevelLogger::CodeMoveEvent(AbstractCode* from, Address to) {
|
| CodeMoveStruct event;
|
| - event.from_address = from + Code::kHeaderSize;
|
| - event.to_address = to + Code::kHeaderSize;
|
| + event.from_address = from->instruction_start();
|
| + size_t header_size = from->instruction_start() - from->address();
|
| + event.to_address = to + header_size;
|
| LogWriteStruct(event);
|
| }
|
|
|
| -
|
| -void LowLevelLogger::CodeDeleteEvent(Address from) {
|
| - CodeDeleteStruct event;
|
| - event.address = from + Code::kHeaderSize;
|
| - LogWriteStruct(event);
|
| -}
|
| -
|
| -
|
| void LowLevelLogger::SnapshotPositionEvent(Address addr, int pos) {
|
| - SnapshotPositionStruct event;
|
| - event.address = addr + Code::kHeaderSize;
|
| - event.position = pos;
|
| - LogWriteStruct(event);
|
| + HeapObject* obj = HeapObject::FromAddress(addr);
|
| + if (obj->IsAbstractCode()) {
|
| + SnapshotPositionStruct event;
|
| + event.address =
|
| + addr + (obj->IsCode() ? Code::kHeaderSize : BytecodeArray::kHeaderSize);
|
| + event.position = pos;
|
| + LogWriteStruct(event);
|
| + }
|
| }
|
|
|
|
|
| @@ -484,23 +454,19 @@ class JitLogger : public CodeEventLogger {
|
| public:
|
| explicit JitLogger(JitCodeEventHandler code_event_handler);
|
|
|
| - virtual void CodeMoveEvent(Address from, Address to);
|
| - virtual void CodeDisableOptEvent(Code* code, SharedFunctionInfo* shared) { }
|
| - virtual void CodeDeleteEvent(Address from);
|
| - virtual void AddCodeLinePosInfoEvent(
|
| - void* jit_handler_data,
|
| - int pc_offset,
|
| - int position,
|
| - JitCodeEvent::PositionType position_type);
|
| + void CodeMoveEvent(AbstractCode* from, Address to) override;
|
| + void CodeDisableOptEvent(AbstractCode* code,
|
| + SharedFunctionInfo* shared) override {}
|
| + void AddCodeLinePosInfoEvent(void* jit_handler_data, int pc_offset,
|
| + int position,
|
| + JitCodeEvent::PositionType position_type);
|
|
|
| void* StartCodePosInfoEvent();
|
| - void EndCodePosInfoEvent(Code* code, void* jit_handler_data);
|
| + void EndCodePosInfoEvent(AbstractCode* code, void* jit_handler_data);
|
|
|
| private:
|
| - virtual void LogRecordedBuffer(Code* code,
|
| - SharedFunctionInfo* shared,
|
| - const char* name,
|
| - int length);
|
| + void LogRecordedBuffer(AbstractCode* code, SharedFunctionInfo* shared,
|
| + const char* name, int length) override;
|
|
|
| JitCodeEventHandler code_event_handler_;
|
| base::Mutex logger_mutex_;
|
| @@ -511,10 +477,8 @@ JitLogger::JitLogger(JitCodeEventHandler code_event_handler)
|
| : code_event_handler_(code_event_handler) {
|
| }
|
|
|
| -
|
| -void JitLogger::LogRecordedBuffer(Code* code,
|
| - SharedFunctionInfo* shared,
|
| - const char* name,
|
| +void JitLogger::LogRecordedBuffer(AbstractCode* code,
|
| + SharedFunctionInfo* shared, const char* name,
|
| int length) {
|
| JitCodeEvent event;
|
| memset(&event, 0, sizeof(event));
|
| @@ -531,35 +495,19 @@ void JitLogger::LogRecordedBuffer(Code* code,
|
| code_event_handler_(&event);
|
| }
|
|
|
| -
|
| -void JitLogger::CodeMoveEvent(Address from, Address to) {
|
| +void JitLogger::CodeMoveEvent(AbstractCode* from, Address to) {
|
| base::LockGuard<base::Mutex> guard(&logger_mutex_);
|
| - Code* from_code = Code::cast(HeapObject::FromAddress(from));
|
|
|
| JitCodeEvent event;
|
| event.type = JitCodeEvent::CODE_MOVED;
|
| - event.code_start = from_code->instruction_start();
|
| - event.code_len = from_code->instruction_size();
|
| + event.code_start = from->instruction_start();
|
| + event.code_len = from->instruction_size();
|
|
|
| // Calculate the header size.
|
| - const size_t header_size =
|
| - from_code->instruction_start() - reinterpret_cast<byte*>(from_code);
|
| + const size_t header_size = from->instruction_start() - from->address();
|
|
|
| // Calculate the new start address of the instructions.
|
| - event.new_code_start =
|
| - reinterpret_cast<byte*>(HeapObject::FromAddress(to)) + header_size;
|
| -
|
| - code_event_handler_(&event);
|
| -}
|
| -
|
| -
|
| -void JitLogger::CodeDeleteEvent(Address from) {
|
| - Code* from_code = Code::cast(HeapObject::FromAddress(from));
|
| -
|
| - JitCodeEvent event;
|
| - event.type = JitCodeEvent::CODE_REMOVED;
|
| - event.code_start = from_code->instruction_start();
|
| - event.code_len = from_code->instruction_size();
|
| + event.new_code_start = to + header_size;
|
|
|
| code_event_handler_(&event);
|
| }
|
| @@ -590,8 +538,8 @@ void* JitLogger::StartCodePosInfoEvent() {
|
| return event.user_data;
|
| }
|
|
|
| -
|
| -void JitLogger::EndCodePosInfoEvent(Code* code, void* jit_handler_data) {
|
| +void JitLogger::EndCodePosInfoEvent(AbstractCode* code,
|
| + void* jit_handler_data) {
|
| JitCodeEvent event;
|
| memset(&event, 0, sizeof(event));
|
| event.type = JitCodeEvent::CODE_END_LINE_INFO_RECORDING;
|
| @@ -1136,10 +1084,9 @@ void Logger::SetterCallbackEvent(Name* name, Address entry_point) {
|
| CallbackEventInternal("set ", name, entry_point);
|
| }
|
|
|
| -
|
| static void AppendCodeCreateHeader(Log::MessageBuilder* msg,
|
| Logger::LogEventsAndTags tag,
|
| - Code* code) {
|
| + AbstractCode* code) {
|
| DCHECK(msg);
|
| msg->Append("%s,%s,%d,",
|
| kLogEventsNames[Logger::CODE_CREATION_EVENT],
|
| @@ -1149,9 +1096,7 @@ static void AppendCodeCreateHeader(Log::MessageBuilder* msg,
|
| msg->Append(",%d,", code->ExecutableSize());
|
| }
|
|
|
| -
|
| -void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
| - Code* code,
|
| +void Logger::CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
|
| const char* comment) {
|
| PROFILER_LOG(CodeCreateEvent(tag, code, comment));
|
|
|
| @@ -1165,9 +1110,7 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
| msg.WriteToLogFile();
|
| }
|
|
|
| -
|
| -void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
| - Code* code,
|
| +void Logger::CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
|
| Name* name) {
|
| PROFILER_LOG(CodeCreateEvent(tag, code, name));
|
|
|
| @@ -1187,11 +1130,8 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
| msg.WriteToLogFile();
|
| }
|
|
|
| -
|
| -void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
| - Code* code,
|
| - SharedFunctionInfo* shared,
|
| - CompilationInfo* info,
|
| +void Logger::CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
|
| + SharedFunctionInfo* shared, CompilationInfo* info,
|
| Name* name) {
|
| PROFILER_LOG(CodeCreateEvent(tag, code, shared, info, name));
|
|
|
| @@ -1199,7 +1139,10 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
| CALL_LISTENERS(CodeCreateEvent(tag, code, shared, info, name));
|
|
|
| if (!FLAG_log_code || !log_->IsEnabled()) return;
|
| - if (code == isolate_->builtins()->builtin(Builtins::kCompileLazy)) return;
|
| + if (code == AbstractCode::cast(
|
| + isolate_->builtins()->builtin(Builtins::kCompileLazy))) {
|
| + return;
|
| + }
|
|
|
| Log::MessageBuilder msg(log_);
|
| AppendCodeCreateHeader(&msg, tag, code);
|
| @@ -1220,10 +1163,8 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
| // 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,
|
| - Code* code,
|
| - SharedFunctionInfo* shared,
|
| - CompilationInfo* info,
|
| +void Logger::CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
|
| + SharedFunctionInfo* shared, CompilationInfo* info,
|
| Name* source, int line, int column) {
|
| PROFILER_LOG(CodeCreateEvent(tag, code, shared, info, source, line, column));
|
|
|
| @@ -1250,9 +1191,7 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
| msg.WriteToLogFile();
|
| }
|
|
|
| -
|
| -void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
| - Code* code,
|
| +void Logger::CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
|
| int args_count) {
|
| PROFILER_LOG(CodeCreateEvent(tag, code, args_count));
|
|
|
| @@ -1266,8 +1205,7 @@ void Logger::CodeCreateEvent(LogEventsAndTags tag,
|
| msg.WriteToLogFile();
|
| }
|
|
|
| -
|
| -void Logger::CodeDisableOptEvent(Code* code,
|
| +void Logger::CodeDisableOptEvent(AbstractCode* code,
|
| SharedFunctionInfo* shared) {
|
| PROFILER_LOG(CodeDisableOptEvent(code, shared));
|
|
|
| @@ -1294,8 +1232,7 @@ void Logger::CodeMovingGCEvent() {
|
| base::OS::SignalCodeMovingGC();
|
| }
|
|
|
| -
|
| -void Logger::RegExpCodeCreateEvent(Code* code, String* source) {
|
| +void Logger::RegExpCodeCreateEvent(AbstractCode* code, String* source) {
|
| PROFILER_LOG(RegExpCodeCreateEvent(code, source));
|
|
|
| if (!is_logging_code_events()) return;
|
| @@ -1310,33 +1247,16 @@ void Logger::RegExpCodeCreateEvent(Code* code, String* source) {
|
| msg.WriteToLogFile();
|
| }
|
|
|
| -
|
| -void Logger::CodeMoveEvent(Address from, Address to) {
|
| +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, to);
|
| -}
|
| -
|
| -
|
| -void Logger::CodeDeleteEvent(Address from) {
|
| - PROFILER_LOG(CodeDeleteEvent(from));
|
| -
|
| - if (!is_logging_code_events()) return;
|
| - CALL_LISTENERS(CodeDeleteEvent(from));
|
| -
|
| - if (!FLAG_log_code || !log_->IsEnabled()) return;
|
| - Log::MessageBuilder msg(log_);
|
| - msg.Append("%s,", kLogEventsNames[CODE_DELETE_EVENT]);
|
| - msg.AppendAddress(from);
|
| - msg.WriteToLogFile();
|
| + MoveEventInternal(CODE_MOVE_EVENT, from->address(), to);
|
| }
|
|
|
| -
|
| void Logger::CodeLinePosInfoAddPositionEvent(void* jit_handler_data,
|
| - int pc_offset,
|
| - int position) {
|
| + int pc_offset, int position) {
|
| JIT_LOG(AddCodeLinePosInfoEvent(jit_handler_data,
|
| pc_offset,
|
| position,
|
| @@ -1360,8 +1280,7 @@ void Logger::CodeStartLinePosInfoRecordEvent(PositionsRecorder* pos_recorder) {
|
| }
|
| }
|
|
|
| -
|
| -void Logger::CodeEndLinePosInfoRecordEvent(Code* code,
|
| +void Logger::CodeEndLinePosInfoRecordEvent(AbstractCode* code,
|
| void* jit_handler_data) {
|
| JIT_LOG(EndCodePosInfoEvent(code, jit_handler_data));
|
| }
|
| @@ -1539,9 +1458,9 @@ void Logger::LogFailure() {
|
| class EnumerateOptimizedFunctionsVisitor: public OptimizedFunctionVisitor {
|
| public:
|
| EnumerateOptimizedFunctionsVisitor(Handle<SharedFunctionInfo>* sfis,
|
| - Handle<Code>* code_objects,
|
| + Handle<AbstractCode>* code_objects,
|
| int* count)
|
| - : sfis_(sfis), code_objects_(code_objects), count_(count) { }
|
| + : sfis_(sfis), code_objects_(code_objects), count_(count) {}
|
|
|
| virtual void EnterContext(Context* context) {}
|
| virtual void LeaveContext(Context* context) {}
|
| @@ -1555,22 +1474,22 @@ class EnumerateOptimizedFunctionsVisitor: public OptimizedFunctionVisitor {
|
| sfis_[*count_] = Handle<SharedFunctionInfo>(sfi);
|
| }
|
| if (code_objects_ != NULL) {
|
| - DCHECK(function->code()->kind() == Code::OPTIMIZED_FUNCTION);
|
| - code_objects_[*count_] = Handle<Code>(function->code());
|
| + DCHECK(function->abstract_code()->kind() ==
|
| + AbstractCode::OPTIMIZED_FUNCTION);
|
| + code_objects_[*count_] = Handle<AbstractCode>(function->abstract_code());
|
| }
|
| *count_ = *count_ + 1;
|
| }
|
|
|
| private:
|
| Handle<SharedFunctionInfo>* sfis_;
|
| - Handle<Code>* code_objects_;
|
| + Handle<AbstractCode>* code_objects_;
|
| int* count_;
|
| };
|
|
|
| -
|
| static int EnumerateCompiledFunctions(Heap* heap,
|
| Handle<SharedFunctionInfo>* sfis,
|
| - Handle<Code>* code_objects) {
|
| + Handle<AbstractCode>* code_objects) {
|
| HeapIterator iterator(heap);
|
| DisallowHeapAllocation no_gc;
|
| int compiled_funcs_count = 0;
|
| @@ -1587,7 +1506,8 @@ static int EnumerateCompiledFunctions(Heap* heap,
|
| sfis[compiled_funcs_count] = Handle<SharedFunctionInfo>(sfi);
|
| }
|
| if (code_objects != NULL) {
|
| - code_objects[compiled_funcs_count] = Handle<Code>(sfi->code());
|
| + code_objects[compiled_funcs_count] =
|
| + Handle<AbstractCode>(sfi->abstract_code());
|
| }
|
| ++compiled_funcs_count;
|
| }
|
| @@ -1604,61 +1524,63 @@ static int EnumerateCompiledFunctions(Heap* heap,
|
|
|
|
|
| void Logger::LogCodeObject(Object* object) {
|
| - Code* code_object = Code::cast(object);
|
| + AbstractCode* code_object = AbstractCode::cast(object);
|
| LogEventsAndTags tag = Logger::STUB_TAG;
|
| const char* description = "Unknown code from the snapshot";
|
| switch (code_object->kind()) {
|
| - case Code::FUNCTION:
|
| - case Code::OPTIMIZED_FUNCTION:
|
| + case AbstractCode::FUNCTION:
|
| + case AbstractCode::INTERPRETED_FUNCTION:
|
| + case AbstractCode::OPTIMIZED_FUNCTION:
|
| return; // We log this later using LogCompiledFunctions.
|
| - case Code::BINARY_OP_IC:
|
| - case Code::COMPARE_IC: // fall through
|
| - case Code::COMPARE_NIL_IC: // fall through
|
| - case Code::TO_BOOLEAN_IC: // fall through
|
| - case Code::STUB:
|
| - description = CodeStub::MajorName(CodeStub::GetMajorKey(code_object));
|
| + case AbstractCode::BINARY_OP_IC: // fall through
|
| + case AbstractCode::COMPARE_IC: // fall through
|
| + case AbstractCode::COMPARE_NIL_IC: // fall through
|
| + case AbstractCode::TO_BOOLEAN_IC: // fall through
|
| +
|
| + case AbstractCode::STUB:
|
| + description =
|
| + CodeStub::MajorName(CodeStub::GetMajorKey(code_object->GetCode()));
|
| if (description == NULL)
|
| description = "A stub from the snapshot";
|
| tag = Logger::STUB_TAG;
|
| break;
|
| - case Code::REGEXP:
|
| + case AbstractCode::REGEXP:
|
| description = "Regular expression code";
|
| tag = Logger::REG_EXP_TAG;
|
| break;
|
| - case Code::BUILTIN:
|
| - description = isolate_->builtins()->name(code_object->builtin_index());
|
| + case AbstractCode::BUILTIN:
|
| + description =
|
| + isolate_->builtins()->name(code_object->GetCode()->builtin_index());
|
| tag = Logger::BUILTIN_TAG;
|
| break;
|
| - case Code::HANDLER:
|
| + case AbstractCode::HANDLER:
|
| description = "An IC handler from the snapshot";
|
| tag = Logger::HANDLER_TAG;
|
| break;
|
| - case Code::KEYED_LOAD_IC:
|
| + case AbstractCode::KEYED_LOAD_IC:
|
| description = "A keyed load IC from the snapshot";
|
| tag = Logger::KEYED_LOAD_IC_TAG;
|
| break;
|
| - case Code::LOAD_IC:
|
| + case AbstractCode::LOAD_IC:
|
| description = "A load IC from the snapshot";
|
| tag = Logger::LOAD_IC_TAG;
|
| break;
|
| - case Code::CALL_IC:
|
| + case AbstractCode::CALL_IC:
|
| description = "A call IC from the snapshot";
|
| tag = Logger::CALL_IC_TAG;
|
| break;
|
| - case Code::STORE_IC:
|
| + case AbstractCode::STORE_IC:
|
| description = "A store IC from the snapshot";
|
| tag = Logger::STORE_IC_TAG;
|
| break;
|
| - case Code::KEYED_STORE_IC:
|
| + case AbstractCode::KEYED_STORE_IC:
|
| description = "A keyed store IC from the snapshot";
|
| tag = Logger::KEYED_STORE_IC_TAG;
|
| break;
|
| - case Code::WASM_FUNCTION:
|
| + case AbstractCode::WASM_FUNCTION:
|
| description = "A wasm function";
|
| tag = Logger::STUB_TAG;
|
| break;
|
| - case Code::NUMBER_OF_KINDS:
|
| - break;
|
| }
|
| PROFILE(isolate_, CodeCreateEvent(tag, code_object, description));
|
| }
|
| @@ -1672,12 +1594,12 @@ void Logger::LogCodeObjects() {
|
| DisallowHeapAllocation no_gc;
|
| for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) {
|
| if (obj->IsCode()) LogCodeObject(obj);
|
| + if (obj->IsBytecodeArray()) LogCodeObject(obj);
|
| }
|
| }
|
|
|
| -
|
| void Logger::LogExistingFunction(Handle<SharedFunctionInfo> shared,
|
| - Handle<Code> code) {
|
| + Handle<AbstractCode> code) {
|
| Handle<String> func_name(shared->DebugName());
|
| if (shared->script()->IsScript()) {
|
| Handle<Script> script(Script::cast(shared->script()));
|
| @@ -1731,7 +1653,7 @@ void Logger::LogCompiledFunctions() {
|
| HandleScope scope(isolate_);
|
| const int compiled_funcs_count = EnumerateCompiledFunctions(heap, NULL, NULL);
|
| ScopedVector< Handle<SharedFunctionInfo> > sfis(compiled_funcs_count);
|
| - ScopedVector< Handle<Code> > code_objects(compiled_funcs_count);
|
| + ScopedVector<Handle<AbstractCode> > code_objects(compiled_funcs_count);
|
| EnumerateCompiledFunctions(heap, sfis.start(), code_objects.start());
|
|
|
| // During iteration, there can be heap allocation due to
|
|
|