diff options
Diffstat (limited to 'deps/v8/src/log.h')
-rw-r--r-- | deps/v8/src/log.h | 260 |
1 files changed, 130 insertions, 130 deletions
diff --git a/deps/v8/src/log.h b/deps/v8/src/log.h index 1a454dad26..fdc50471b4 100644 --- a/deps/v8/src/log.h +++ b/deps/v8/src/log.h @@ -82,63 +82,61 @@ struct TickSample; logger->Call; \ } while (false) - -#define LOG_EVENTS_AND_TAGS_LIST(V) \ - V(CODE_CREATION_EVENT, "code-creation") \ - V(CODE_DISABLE_OPT_EVENT, "code-disable-optimization") \ - V(CODE_MOVE_EVENT, "code-move") \ - V(CODE_DELETE_EVENT, "code-delete") \ - V(CODE_MOVING_GC, "code-moving-gc") \ - V(SHARED_FUNC_MOVE_EVENT, "sfi-move") \ - V(SNAPSHOT_POSITION_EVENT, "snapshot-pos") \ - V(SNAPSHOT_CODE_NAME_EVENT, "snapshot-code-name") \ - V(TICK_EVENT, "tick") \ - V(REPEAT_META_EVENT, "repeat") \ - V(BUILTIN_TAG, "Builtin") \ - V(CALL_DEBUG_BREAK_TAG, "CallDebugBreak") \ - V(CALL_DEBUG_PREPARE_STEP_IN_TAG, "CallDebugPrepareStepIn") \ - V(CALL_INITIALIZE_TAG, "CallInitialize") \ - V(CALL_MEGAMORPHIC_TAG, "CallMegamorphic") \ - V(CALL_MISS_TAG, "CallMiss") \ - V(CALL_NORMAL_TAG, "CallNormal") \ - V(CALL_PRE_MONOMORPHIC_TAG, "CallPreMonomorphic") \ - V(LOAD_INITIALIZE_TAG, "LoadInitialize") \ - V(LOAD_PREMONOMORPHIC_TAG, "LoadPreMonomorphic") \ - V(LOAD_MEGAMORPHIC_TAG, "LoadMegamorphic") \ - V(STORE_INITIALIZE_TAG, "StoreInitialize") \ - V(STORE_PREMONOMORPHIC_TAG, "StorePreMonomorphic") \ - V(STORE_GENERIC_TAG, "StoreGeneric") \ - V(STORE_MEGAMORPHIC_TAG, "StoreMegamorphic") \ - V(KEYED_CALL_DEBUG_BREAK_TAG, "KeyedCallDebugBreak") \ - V(KEYED_CALL_DEBUG_PREPARE_STEP_IN_TAG, \ - "KeyedCallDebugPrepareStepIn") \ - V(KEYED_CALL_INITIALIZE_TAG, "KeyedCallInitialize") \ - V(KEYED_CALL_MEGAMORPHIC_TAG, "KeyedCallMegamorphic") \ - V(KEYED_CALL_MISS_TAG, "KeyedCallMiss") \ - V(KEYED_CALL_NORMAL_TAG, "KeyedCallNormal") \ - V(KEYED_CALL_PRE_MONOMORPHIC_TAG, "KeyedCallPreMonomorphic") \ - V(CALLBACK_TAG, "Callback") \ - V(EVAL_TAG, "Eval") \ - V(FUNCTION_TAG, "Function") \ - V(HANDLER_TAG, "Handler") \ - V(KEYED_LOAD_IC_TAG, "KeyedLoadIC") \ - V(KEYED_LOAD_POLYMORPHIC_IC_TAG, "KeyedLoadPolymorphicIC") \ - V(KEYED_EXTERNAL_ARRAY_LOAD_IC_TAG, "KeyedExternalArrayLoadIC") \ - V(KEYED_STORE_IC_TAG, "KeyedStoreIC") \ - V(KEYED_STORE_POLYMORPHIC_IC_TAG, "KeyedStorePolymorphicIC") \ - V(KEYED_EXTERNAL_ARRAY_STORE_IC_TAG, "KeyedExternalArrayStoreIC") \ - V(LAZY_COMPILE_TAG, "LazyCompile") \ - V(CALL_IC_TAG, "CallIC") \ - V(LOAD_IC_TAG, "LoadIC") \ - V(LOAD_POLYMORPHIC_IC_TAG, "LoadPolymorphicIC") \ - V(REG_EXP_TAG, "RegExp") \ - V(SCRIPT_TAG, "Script") \ - V(STORE_IC_TAG, "StoreIC") \ - V(STORE_POLYMORPHIC_IC_TAG, "StorePolymorphicIC") \ - V(STUB_TAG, "Stub") \ - V(NATIVE_FUNCTION_TAG, "Function") \ - V(NATIVE_LAZY_COMPILE_TAG, "LazyCompile") \ - V(NATIVE_SCRIPT_TAG, "Script") +#define LOG_EVENTS_AND_TAGS_LIST(V) \ + V(CODE_CREATION_EVENT, "code-creation") \ + V(CODE_DISABLE_OPT_EVENT, "code-disable-optimization") \ + V(CODE_MOVE_EVENT, "code-move") \ + V(CODE_DELETE_EVENT, "code-delete") \ + V(CODE_MOVING_GC, "code-moving-gc") \ + V(SHARED_FUNC_MOVE_EVENT, "sfi-move") \ + V(SNAPSHOT_CODE_NAME_EVENT, "snapshot-code-name") \ + V(TICK_EVENT, "tick") \ + V(REPEAT_META_EVENT, "repeat") \ + V(BUILTIN_TAG, "Builtin") \ + V(CALL_DEBUG_BREAK_TAG, "CallDebugBreak") \ + V(CALL_DEBUG_PREPARE_STEP_IN_TAG, "CallDebugPrepareStepIn") \ + V(CALL_INITIALIZE_TAG, "CallInitialize") \ + V(CALL_MEGAMORPHIC_TAG, "CallMegamorphic") \ + V(CALL_MISS_TAG, "CallMiss") \ + V(CALL_NORMAL_TAG, "CallNormal") \ + V(CALL_PRE_MONOMORPHIC_TAG, "CallPreMonomorphic") \ + V(LOAD_INITIALIZE_TAG, "LoadInitialize") \ + V(LOAD_PREMONOMORPHIC_TAG, "LoadPreMonomorphic") \ + V(LOAD_MEGAMORPHIC_TAG, "LoadMegamorphic") \ + V(STORE_INITIALIZE_TAG, "StoreInitialize") \ + V(STORE_PREMONOMORPHIC_TAG, "StorePreMonomorphic") \ + V(STORE_GENERIC_TAG, "StoreGeneric") \ + V(STORE_MEGAMORPHIC_TAG, "StoreMegamorphic") \ + V(KEYED_CALL_DEBUG_BREAK_TAG, "KeyedCallDebugBreak") \ + V(KEYED_CALL_DEBUG_PREPARE_STEP_IN_TAG, "KeyedCallDebugPrepareStepIn") \ + V(KEYED_CALL_INITIALIZE_TAG, "KeyedCallInitialize") \ + V(KEYED_CALL_MEGAMORPHIC_TAG, "KeyedCallMegamorphic") \ + V(KEYED_CALL_MISS_TAG, "KeyedCallMiss") \ + V(KEYED_CALL_NORMAL_TAG, "KeyedCallNormal") \ + V(KEYED_CALL_PRE_MONOMORPHIC_TAG, "KeyedCallPreMonomorphic") \ + V(CALLBACK_TAG, "Callback") \ + V(EVAL_TAG, "Eval") \ + V(FUNCTION_TAG, "Function") \ + V(HANDLER_TAG, "Handler") \ + V(BYTECODE_HANDLER_TAG, "BytecodeHandler") \ + V(KEYED_LOAD_IC_TAG, "KeyedLoadIC") \ + V(KEYED_LOAD_POLYMORPHIC_IC_TAG, "KeyedLoadPolymorphicIC") \ + V(KEYED_EXTERNAL_ARRAY_LOAD_IC_TAG, "KeyedExternalArrayLoadIC") \ + V(KEYED_STORE_IC_TAG, "KeyedStoreIC") \ + V(KEYED_STORE_POLYMORPHIC_IC_TAG, "KeyedStorePolymorphicIC") \ + V(KEYED_EXTERNAL_ARRAY_STORE_IC_TAG, "KeyedExternalArrayStoreIC") \ + V(LAZY_COMPILE_TAG, "LazyCompile") \ + V(CALL_IC_TAG, "CallIC") \ + V(LOAD_IC_TAG, "LoadIC") \ + V(LOAD_POLYMORPHIC_IC_TAG, "LoadPolymorphicIC") \ + V(REG_EXP_TAG, "RegExp") \ + V(SCRIPT_TAG, "Script") \ + V(STORE_IC_TAG, "StoreIC") \ + V(STORE_POLYMORPHIC_IC_TAG, "StorePolymorphicIC") \ + V(STUB_TAG, "Stub") \ + V(NATIVE_FUNCTION_TAG, "Function") \ + V(NATIVE_LAZY_COMPILE_TAG, "LazyCompile") \ + V(NATIVE_SCRIPT_TAG, "Script") // Note that 'NATIVE_' cases for functions and scripts are mapped onto // original tags when writing to the log. @@ -146,6 +144,7 @@ struct TickSample; class JitLogger; class PerfBasicLogger; class LowLevelLogger; +class PerfJitLogger; class Sampler; class Logger { @@ -224,30 +223,24 @@ class Logger { void GetterCallbackEvent(Name* name, Address entry_point); void SetterCallbackEvent(Name* name, Address entry_point); // Emits a code create event. - void CodeCreateEvent(LogEventsAndTags tag, - Code* code, const char* source); - void CodeCreateEvent(LogEventsAndTags tag, - Code* code, Name* name); - void CodeCreateEvent(LogEventsAndTags tag, - Code* code, - SharedFunctionInfo* shared, - CompilationInfo* info, + void CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code, + const char* source); + void CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code, Name* name); + void CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code, + SharedFunctionInfo* shared, CompilationInfo* info, Name* name); - void CodeCreateEvent(LogEventsAndTags tag, - Code* code, - SharedFunctionInfo* shared, - CompilationInfo* info, + void CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code, + SharedFunctionInfo* shared, CompilationInfo* info, Name* source, int line, int column); - void CodeCreateEvent(LogEventsAndTags tag, Code* code, int args_count); + void CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code, + int args_count); // Emits a code deoptimization event. - void CodeDisableOptEvent(Code* code, SharedFunctionInfo* shared); + void CodeDisableOptEvent(AbstractCode* code, SharedFunctionInfo* shared); void CodeMovingGCEvent(); // Emits a code create event for a RegExp. - void RegExpCodeCreateEvent(Code* code, String* source); + void RegExpCodeCreateEvent(AbstractCode* code, String* source); // Emits a code move event. - void CodeMoveEvent(Address from, Address to); - // Emits a code delete event. - void CodeDeleteEvent(Address from); + void CodeMoveEvent(AbstractCode* from, Address to); // Emits a code line info add event with Postion type. void CodeLinePosInfoAddPositionEvent(void* jit_handler_data, int pc_offset, @@ -260,12 +253,12 @@ class Logger { void CodeStartLinePosInfoRecordEvent(PositionsRecorder* pos_recorder); // Emits a code line info finish record event. // It's the callee's responsibility to dispose the parameter jit_handler_data. - void CodeEndLinePosInfoRecordEvent(Code* code, void* jit_handler_data); + void CodeEndLinePosInfoRecordEvent(AbstractCode* code, + void* jit_handler_data); void SharedFunctionInfoMoveEvent(Address from, Address to); void CodeNameEvent(Address addr, int pos, const char* code_name); - void SnapshotPositionEvent(Address addr, int pos); // ==== Events logged by --log-gc. ==== // Heap sampling events: start, end, and individual types. @@ -316,13 +309,15 @@ class Logger { void StopProfiler(); void LogExistingFunction(Handle<SharedFunctionInfo> shared, - Handle<Code> code); + Handle<AbstractCode> code); // Logs all compiled functions found in the heap. void LogCompiledFunctions(); // Logs all accessor callbacks found in the heap. void LogAccessorCallbacks(); // Used for logging stubs found in the snapshot. void LogCodeObjects(); + // Used for logging bytecode handlers found in the snapshot. + void LogBytecodeHandlers(); // Converts tag to a corresponding NATIVE_... if the script is native. INLINE(static LogEventsAndTags ToNativeByScript(LogEventsAndTags, Script*)); @@ -397,6 +392,7 @@ class Logger { bool is_logging_; Log* log_; PerfBasicLogger* perf_basic_logger_; + PerfJitLogger* perf_jit_logger_; LowLevelLogger* ll_logger_; JitLogger* jit_logger_; List<CodeEventListener*> listeners_; @@ -413,6 +409,7 @@ class Logger { #define TIMER_EVENTS_LIST(V) \ V(RecompileSynchronous, true) \ V(RecompileConcurrent, true) \ + V(CompileIgnition, true) \ V(CompileFullCode, true) \ V(OptimizeCode, true) \ V(CompileCode, true) \ @@ -446,83 +443,86 @@ class TimerEventScope { Isolate* isolate_; }; +class PositionsRecorder BASE_EMBEDDED { + public: + PositionsRecorder() { jit_handler_data_ = NULL; } + + void AttachJITHandlerData(void* user_data) { jit_handler_data_ = user_data; } + + void* DetachJITHandlerData() { + void* old_data = jit_handler_data_; + jit_handler_data_ = NULL; + return old_data; + } + + protected: + // Currently jit_handler_data_ is used to store JITHandler-specific data + // over the lifetime of a PositionsRecorder + void* jit_handler_data_; + + private: + DISALLOW_COPY_AND_ASSIGN(PositionsRecorder); +}; class CodeEventListener { public: virtual ~CodeEventListener() {} - virtual void CodeCreateEvent(Logger::LogEventsAndTags tag, - Code* code, + virtual void CodeCreateEvent(Logger::LogEventsAndTags tag, AbstractCode* code, const char* comment) = 0; - virtual void CodeCreateEvent(Logger::LogEventsAndTags tag, - Code* code, + virtual void CodeCreateEvent(Logger::LogEventsAndTags tag, AbstractCode* code, Name* name) = 0; - virtual void CodeCreateEvent(Logger::LogEventsAndTags tag, - Code* code, + virtual void CodeCreateEvent(Logger::LogEventsAndTags tag, AbstractCode* code, SharedFunctionInfo* shared, - CompilationInfo* info, - Name* name) = 0; - virtual void CodeCreateEvent(Logger::LogEventsAndTags tag, - Code* code, + CompilationInfo* info, Name* name) = 0; + virtual void CodeCreateEvent(Logger::LogEventsAndTags tag, AbstractCode* code, SharedFunctionInfo* shared, - CompilationInfo* info, - Name* source, - int line, int column) = 0; - virtual void CodeCreateEvent(Logger::LogEventsAndTags tag, - Code* code, + CompilationInfo* info, Name* source, int line, + int column) = 0; + virtual void CodeCreateEvent(Logger::LogEventsAndTags tag, AbstractCode* code, int args_count) = 0; virtual void CallbackEvent(Name* name, Address entry_point) = 0; virtual void GetterCallbackEvent(Name* name, Address entry_point) = 0; virtual void SetterCallbackEvent(Name* name, Address entry_point) = 0; - virtual void RegExpCodeCreateEvent(Code* code, String* source) = 0; - virtual void CodeMoveEvent(Address from, Address to) = 0; - virtual void CodeDeleteEvent(Address from) = 0; + virtual void RegExpCodeCreateEvent(AbstractCode* code, String* source) = 0; + virtual void CodeMoveEvent(AbstractCode* from, Address to) = 0; virtual void SharedFunctionInfoMoveEvent(Address from, Address to) = 0; virtual void CodeMovingGCEvent() = 0; - virtual void CodeDisableOptEvent(Code* code, SharedFunctionInfo* shared) = 0; + virtual void CodeDisableOptEvent(AbstractCode* code, + SharedFunctionInfo* shared) = 0; }; class CodeEventLogger : public CodeEventListener { public: CodeEventLogger(); - virtual ~CodeEventLogger(); - - virtual void CodeCreateEvent(Logger::LogEventsAndTags tag, - Code* code, - const char* comment); - virtual void CodeCreateEvent(Logger::LogEventsAndTags tag, - Code* code, - Name* name); - virtual void CodeCreateEvent(Logger::LogEventsAndTags tag, - Code* code, - int args_count); - virtual void CodeCreateEvent(Logger::LogEventsAndTags tag, - Code* code, - SharedFunctionInfo* shared, - CompilationInfo* info, - Name* name); - virtual void CodeCreateEvent(Logger::LogEventsAndTags tag, - Code* code, - SharedFunctionInfo* shared, - CompilationInfo* info, - Name* source, - int line, int column); - virtual void RegExpCodeCreateEvent(Code* code, String* source); - - virtual void CallbackEvent(Name* name, Address entry_point) { } - virtual void GetterCallbackEvent(Name* name, Address entry_point) { } - virtual void SetterCallbackEvent(Name* name, Address entry_point) { } - virtual void SharedFunctionInfoMoveEvent(Address from, Address to) { } - virtual void CodeMovingGCEvent() { } + ~CodeEventLogger() override; + + void CodeCreateEvent(Logger::LogEventsAndTags tag, AbstractCode* code, + const char* comment) override; + void CodeCreateEvent(Logger::LogEventsAndTags tag, AbstractCode* code, + Name* name) override; + void CodeCreateEvent(Logger::LogEventsAndTags tag, AbstractCode* code, + int args_count) override; + void CodeCreateEvent(Logger::LogEventsAndTags tag, AbstractCode* code, + SharedFunctionInfo* shared, CompilationInfo* info, + Name* name) override; + void CodeCreateEvent(Logger::LogEventsAndTags tag, AbstractCode* code, + SharedFunctionInfo* shared, CompilationInfo* info, + Name* source, int line, int column) override; + void RegExpCodeCreateEvent(AbstractCode* code, String* source) override; + + void CallbackEvent(Name* name, Address entry_point) override {} + void GetterCallbackEvent(Name* name, Address entry_point) override {} + void SetterCallbackEvent(Name* name, Address entry_point) override {} + void SharedFunctionInfoMoveEvent(Address from, Address to) override {} + void CodeMovingGCEvent() override {} private: class NameBuffer; - virtual void LogRecordedBuffer(Code* code, - SharedFunctionInfo* shared, - const char* name, - int length) = 0; + virtual void LogRecordedBuffer(AbstractCode* code, SharedFunctionInfo* shared, + const char* name, int length) = 0; NameBuffer* name_buffer_; }; |