aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/src/log.h
diff options
context:
space:
mode:
authorMatheus Marchini <matheus@sthima.com>2018-06-04 09:33:17 -0700
committerMatheus Marchini <matheus@sthima.com>2018-06-22 09:42:46 -0700
commitb3627560a94eaf51262cc041aebc9ef150b5fcbc (patch)
tree6f8cdb5e15f0bc7e686b018f952b21556cc6b91b /deps/v8/src/log.h
parent8689c785379293adc04ec2a3d47ed08a580fe521 (diff)
downloadandroid-node-v8-b3627560a94eaf51262cc041aebc9ef150b5fcbc.tar.gz
android-node-v8-b3627560a94eaf51262cc041aebc9ef150b5fcbc.tar.bz2
android-node-v8-b3627560a94eaf51262cc041aebc9ef150b5fcbc.zip
deps: backport aa6ce3e from upstream V8
Original commit message: [log][api] introduce public CodeEventListener API Introduce a new public API called CodeEventListener to allow embedders to better support external profilers and other diagnostic tools without relying on unsupported methods like --perf-basic-prof. Bug: v8:7694 Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng Change-Id: I063cc965394d59401358757634c9ea84c11517e9 Co-authored-by: Daniel Beckert <daniel@sthima.com.br> Reviewed-on: https://chromium-review.googlesource.com/1028770 Commit-Queue: Yang Guo <yangguo@chromium.org> Reviewed-by: Hannes Payer <hpayer@chromium.org> Reviewed-by: Yang Guo <yangguo@chromium.org> Reviewed-by: Andreas Haas <ahaas@chromium.org> Cr-Commit-Position: refs/heads/master@{#53382} Refs: https://github.com/v8/v8/commit/aa6ce3ee617b2f324bea3a5d8e3263aee PR-URL: https://github.com/nodejs/node/pull/21126 Reviewed-By: Michaƫl Zasso <targos@protonmail.com> Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com> Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'deps/v8/src/log.h')
-rw-r--r--deps/v8/src/log.h86
1 files changed, 81 insertions, 5 deletions
diff --git a/deps/v8/src/log.h b/deps/v8/src/log.h
index 6f3e1f244a..fefc4b1a2d 100644
--- a/deps/v8/src/log.h
+++ b/deps/v8/src/log.h
@@ -8,6 +8,7 @@
#include <set>
#include <string>
+#include "include/v8-profiler.h"
#include "src/allocation.h"
#include "src/base/compiler-specific.h"
#include "src/base/platform/elapsed-timer.h"
@@ -87,12 +88,33 @@ class WasmCode;
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_listening_to_code_events()) logger->Call; \
} while (false)
+class ExistingCodeLogger {
+ public:
+ explicit ExistingCodeLogger(Isolate* isolate,
+ CodeEventListener* listener = nullptr)
+ : isolate_(isolate), listener_(listener) {}
+
+ void LogCodeObjects();
+ void LogBytecodeHandlers();
+
+ void LogCompiledFunctions();
+ void LogExistingFunction(Handle<SharedFunctionInfo> shared,
+ Handle<AbstractCode> code);
+ void LogCodeObject(Object* object);
+ void LogBytecodeHandler(interpreter::Bytecode bytecode,
+ interpreter::OperandScale operand_scale, Code* code);
+
+ private:
+ Isolate* isolate_;
+ CodeEventListener* listener_;
+};
+
class Logger : public CodeEventListener {
public:
enum StartEnd { START = 0, END = 1, STAMP = 2 };
@@ -233,7 +255,7 @@ class Logger : public CodeEventListener {
return is_logging_;
}
- bool is_logging_code_events() {
+ bool is_listening_to_code_events() {
return is_logging() || jit_logger_ != nullptr;
}
@@ -332,6 +354,8 @@ class Logger : public CodeEventListener {
// 'true' between SetUp() and TearDown().
bool is_initialized_;
+ ExistingCodeLogger existing_code_logger_;
+
base::ElapsedTimer timer_;
friend class CpuProfiler;
@@ -412,6 +436,58 @@ class CodeEventLogger : public CodeEventListener {
NameBuffer* name_buffer_;
};
+struct CodeEvent {
+ uintptr_t code_start_address;
+ size_t code_size;
+ Handle<String> function_name;
+ Handle<String> script_name;
+ int script_line;
+ int script_column;
+ CodeEventType code_type;
+ const char* comment;
+};
+
+class ExternalCodeEventListener : public CodeEventListener {
+ public:
+ explicit ExternalCodeEventListener(Isolate* isolate);
+ ~ExternalCodeEventListener() override;
+
+ void CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
+ const char* comment) override;
+ void CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
+ Name* name) override;
+ void CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
+ SharedFunctionInfo* shared, Name* name) override;
+ void CodeCreateEvent(LogEventsAndTags tag, AbstractCode* code,
+ SharedFunctionInfo* shared, Name* source, int line,
+ int column) override;
+ void CodeCreateEvent(LogEventsAndTags tag, const wasm::WasmCode* code,
+ wasm::WasmName name) 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 CodeMoveEvent(AbstractCode* from, Address to) override {}
+ void CodeDisableOptEvent(AbstractCode* code,
+ SharedFunctionInfo* shared) override {}
+ void CodeMovingGCEvent() override {}
+ void CodeDeoptEvent(Code* code, DeoptKind kind, Address pc,
+ int fp_to_sp_delta) override {}
+
+ void StartListening(CodeEventHandler* code_event_handler);
+ void StopListening();
+
+ bool is_listening_to_code_events() override { return true; }
+
+ private:
+ void LogExistingCode();
+
+ bool is_listening_;
+ Isolate* isolate_;
+ v8::CodeEventHandler* code_event_handler_;
+};
} // namespace internal
} // namespace v8