| Index: src/log.h
|
| diff --git a/src/log.h b/src/log.h
|
| index 2e222d4ebf07b82636d41060384433914f2420ba..91331f04fc068c0ad3b16149a70bc85971896a14 100644
|
| --- a/src/log.h
|
| +++ b/src/log.h
|
| @@ -11,6 +11,8 @@
|
| #include "src/base/compiler-specific.h"
|
| #include "src/base/platform/elapsed-timer.h"
|
| #include "src/base/platform/platform.h"
|
| +#include "src/code-events.h"
|
| +#include "src/isolate.h"
|
| #include "src/objects.h"
|
|
|
| namespace v8 {
|
| @@ -71,93 +73,27 @@ struct TickSample;
|
| class RuntimeCallTimer;
|
|
|
| #undef LOG
|
| -#define LOG(isolate, Call) \
|
| - do { \
|
| - v8::internal::Logger* logger = \
|
| - (isolate)->logger(); \
|
| - if (logger->is_logging()) \
|
| - logger->Call; \
|
| +#define LOG(isolate, Call) \
|
| + do { \
|
| + v8::internal::Logger* logger = (isolate)->logger(); \
|
| + if (logger->is_logging()) logger->Call; \
|
| } while (false)
|
|
|
| -#define LOG_CODE_EVENT(isolate, Call) \
|
| - do { \
|
| - v8::internal::Logger* logger = \
|
| - (isolate)->logger(); \
|
| - if (logger->is_logging_code_events()) \
|
| - logger->Call; \
|
| +#define LOG_CODE_EVENT(isolate, Call) \
|
| + do { \
|
| + v8::internal::Logger* logger = (isolate)->logger(); \
|
| + if (logger->is_logging_code_events()) 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_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(LOAD_INITIALIZE_TAG, "LoadInitialize") \
|
| - V(LOAD_MEGAMORPHIC_TAG, "LoadMegamorphic") \
|
| - V(STORE_INITIALIZE_TAG, "StoreInitialize") \
|
| - 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(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.
|
| -
|
| -
|
| class JitLogger;
|
| class PerfBasicLogger;
|
| class LowLevelLogger;
|
| class PerfJitLogger;
|
|
|
| -class Logger {
|
| +class Logger : public CodeEventListener {
|
| public:
|
| enum StartEnd { START = 0, END = 1 };
|
|
|
| -#define DECLARE_ENUM(enum_item, ignore) enum_item,
|
| - enum LogEventsAndTags {
|
| - LOG_EVENTS_AND_TAGS_LIST(DECLARE_ENUM)
|
| - NUMBER_OF_LOG_EVENTS
|
| - };
|
| -#undef DECLARE_ENUM
|
| -
|
| // Acquires resources for logging if the right flags are set.
|
| bool SetUp(Isolate* isolate);
|
|
|
| @@ -211,28 +147,27 @@ class Logger {
|
| void ApiObjectAccess(const char* tag, JSObject* obj);
|
| void ApiEntryCall(const char* name);
|
|
|
| -
|
| // ==== Events logged by --log-code. ====
|
| void addCodeEventListener(CodeEventListener* listener);
|
| void removeCodeEventListener(CodeEventListener* listener);
|
| - bool hasCodeEventListener(CodeEventListener* listener);
|
| -
|
|
|
| // Emits a code event for a callback function.
|
| void CallbackEvent(Name* name, Address entry_point);
|
| void GetterCallbackEvent(Name* name, Address entry_point);
|
| void SetterCallbackEvent(Name* name, Address entry_point);
|
| // Emits a code create event.
|
| - 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, Name* name);
|
| - void CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
|
| - SharedFunctionInfo* shared, Name* source, int line,
|
| - int column);
|
| - void CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
|
| - int args_count);
|
| + void CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
|
| + AbstractCode* code, const char* source);
|
| + void CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
|
| + AbstractCode* code, Name* name);
|
| + void CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
|
| + AbstractCode* code, SharedFunctionInfo* shared,
|
| + Name* name);
|
| + void CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
|
| + AbstractCode* code, SharedFunctionInfo* shared,
|
| + Name* source, int line, int column);
|
| + void CodeCreateEvent(CodeEventListener::LogEventsAndTags tag,
|
| + AbstractCode* code, int args_count);
|
| // Emits a code deoptimization event.
|
| void CodeDisableOptEvent(AbstractCode* code, SharedFunctionInfo* shared);
|
| void CodeMovingGCEvent();
|
| @@ -259,6 +194,8 @@ class Logger {
|
|
|
| void CodeNameEvent(Address addr, int pos, const char* code_name);
|
|
|
| + void CodeDeoptEvent(Code* code, Address pc, int fp_to_sp_delta);
|
| +
|
| // ==== Events logged by --log-gc. ====
|
| // Heap sampling events: start, end, and individual types.
|
| void HeapSampleBeginEvent(const char* space, const char* kind);
|
| @@ -276,7 +213,6 @@ class Logger {
|
| void SharedLibraryEvent(const std::string& library_path, uintptr_t start,
|
| uintptr_t end, intptr_t aslr_slide);
|
|
|
| - void CodeDeoptEvent(Code* code, Address pc, int fp_to_sp_delta);
|
| void CurrentTimeEvent();
|
|
|
| void TimerEvent(StartEnd se, const char* name);
|
| @@ -318,7 +254,8 @@ class Logger {
|
| void LogBytecodeHandlers();
|
|
|
| // Converts tag to a corresponding NATIVE_... if the script is native.
|
| - INLINE(static LogEventsAndTags ToNativeByScript(LogEventsAndTags, Script*));
|
| + INLINE(static CodeEventListener::LogEventsAndTags ToNativeByScript(
|
| + CodeEventListener::LogEventsAndTags, Script*));
|
|
|
| // Profiler's sampling interval (in milliseconds).
|
| #if defined(ANDROID)
|
| @@ -345,13 +282,14 @@ class Logger {
|
| Address entry_point);
|
|
|
| // Internal configurable move event.
|
| - void MoveEventInternal(LogEventsAndTags event, Address from, Address to);
|
| + void MoveEventInternal(CodeEventListener::LogEventsAndTags event,
|
| + Address from, Address to);
|
|
|
| // Used for logging stubs found in the snapshot.
|
| void LogCodeObject(Object* code_object);
|
|
|
| // Helper method. It resets name_buffer_ and add tag name into it.
|
| - void InitNameBuffer(LogEventsAndTags tag);
|
| + void InitNameBuffer(CodeEventListener::LogEventsAndTags tag);
|
|
|
| // Emits a profiler tick event. Used by the profiler thread.
|
| void TickEvent(TickSample* sample, bool overflow);
|
| @@ -463,47 +401,20 @@ class PositionsRecorder BASE_EMBEDDED {
|
| DISALLOW_COPY_AND_ASSIGN(PositionsRecorder);
|
| };
|
|
|
| -class CodeEventListener {
|
| - public:
|
| - virtual ~CodeEventListener() {}
|
| -
|
| - virtual void CodeCreateEvent(Logger::LogEventsAndTags tag, AbstractCode* code,
|
| - const char* comment) = 0;
|
| - virtual void CodeCreateEvent(Logger::LogEventsAndTags tag, AbstractCode* code,
|
| - Name* name) = 0;
|
| - virtual void CodeCreateEvent(Logger::LogEventsAndTags tag, AbstractCode* code,
|
| - SharedFunctionInfo* shared, Name* name) = 0;
|
| - virtual void CodeCreateEvent(Logger::LogEventsAndTags tag, AbstractCode* code,
|
| - SharedFunctionInfo* shared, 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(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(AbstractCode* code,
|
| - SharedFunctionInfo* shared) = 0;
|
| -};
|
| -
|
| -
|
| class CodeEventLogger : public CodeEventListener {
|
| public:
|
| CodeEventLogger();
|
| ~CodeEventLogger() override;
|
|
|
| - void CodeCreateEvent(Logger::LogEventsAndTags tag, AbstractCode* code,
|
| + void CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
|
| const char* comment) override;
|
| - void CodeCreateEvent(Logger::LogEventsAndTags tag, AbstractCode* code,
|
| + void CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
|
| Name* name) override;
|
| - void CodeCreateEvent(Logger::LogEventsAndTags tag, AbstractCode* code,
|
| + void CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
|
| int args_count) override;
|
| - void CodeCreateEvent(Logger::LogEventsAndTags tag, AbstractCode* code,
|
| + void CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
|
| SharedFunctionInfo* shared, Name* name) override;
|
| - void CodeCreateEvent(Logger::LogEventsAndTags tag, AbstractCode* code,
|
| + void CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
|
| SharedFunctionInfo* shared, Name* source, int line,
|
| int column) override;
|
| void RegExpCodeCreateEvent(AbstractCode* code, String* source) override;
|
| @@ -513,6 +424,7 @@ class CodeEventLogger : public CodeEventListener {
|
| void SetterCallbackEvent(Name* name, Address entry_point) override {}
|
| void SharedFunctionInfoMoveEvent(Address from, Address to) override {}
|
| void CodeMovingGCEvent() override {}
|
| + void CodeDeoptEvent(Code* code, Address pc, int fp_to_sp_delta) override {}
|
|
|
| private:
|
| class NameBuffer;
|
|
|