aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/test/cctest
diff options
context:
space:
mode:
authorMichaël Zasso <targos@protonmail.com>2018-07-05 08:38:02 +0200
committerMichaël Zasso <targos@protonmail.com>2018-07-26 08:33:56 +0200
commit71fae5e81dc96e5501ddb3e89e4a49c427d89398 (patch)
treef88ad0e153839c5f902959ea5163a75a1cf42484 /deps/v8/test/cctest
parent9b5cba9104dd4203ed0eac1153a708803cbb677b (diff)
downloadandroid-node-v8-71fae5e81dc96e5501ddb3e89e4a49c427d89398.tar.gz
android-node-v8-71fae5e81dc96e5501ddb3e89e4a49c427d89398.tar.bz2
android-node-v8-71fae5e81dc96e5501ddb3e89e4a49c427d89398.zip
deps: cherry-pick 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/aa6ce3ee617b2f324bea3a5d8e3263aee4cde6d7 PR-URL: https://github.com/nodejs/node/pull/21079 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Yang Guo <yangguo@chromium.org>
Diffstat (limited to 'deps/v8/test/cctest')
-rw-r--r--deps/v8/test/cctest/test-log.cc75
1 files changed, 75 insertions, 0 deletions
diff --git a/deps/v8/test/cctest/test-log.cc b/deps/v8/test/cctest/test-log.cc
index 27d363d5a4..97071a63f5 100644
--- a/deps/v8/test/cctest/test-log.cc
+++ b/deps/v8/test/cctest/test-log.cc
@@ -35,6 +35,7 @@
#endif // __linux__
#include <unordered_set>
+#include <vector>
#include "src/api.h"
#include "src/log-utils.h"
#include "src/log.h"
@@ -251,6 +252,38 @@ class ScopedLoggerInitializer {
DISALLOW_COPY_AND_ASSIGN(ScopedLoggerInitializer);
};
+class TestCodeEventHandler : public v8::CodeEventHandler {
+ public:
+ explicit TestCodeEventHandler(v8::Isolate* isolate)
+ : v8::CodeEventHandler(isolate) {}
+
+ const char* FindLine(const char* prefix, const char* suffix = nullptr,
+ const char* start = nullptr) {
+ if (!log_.length()) return NULL;
+ const char* c_log = log_.c_str();
+ if (start == nullptr) start = c_log;
+ const char* end = c_log + log_.length();
+ return FindLogLine(start, end, prefix, suffix);
+ }
+
+ void Handle(v8::CodeEvent* code_event) override {
+ const char* code_type =
+ v8::CodeEvent::GetCodeEventTypeName(code_event->GetCodeType());
+ char function_name[1000];
+ strncpy(function_name, code_type, 1000);
+ function_name[strlen(code_type)] = ' ';
+ code_event->GetFunctionName()->WriteUtf8(
+ function_name + strlen(code_type) + 1, 1000);
+ function_name[strlen(function_name) + 1] = '\0';
+ function_name[strlen(function_name)] = '\n';
+
+ log_ += std::string(function_name);
+ }
+
+ private:
+ std::string log_;
+};
+
} // namespace
TEST(FindLogLine) {
@@ -800,6 +833,48 @@ TEST(LogInterpretedFramesNativeStack) {
isolate->Dispose();
}
+TEST(ExternalCodeEventListener) {
+ i::FLAG_log = false;
+ i::FLAG_prof = false;
+
+ v8::Isolate::CreateParams create_params;
+ create_params.array_buffer_allocator = CcTest::array_buffer_allocator();
+ v8::Isolate* isolate = v8::Isolate::New(create_params);
+
+ {
+ v8::HandleScope scope(isolate);
+ v8::Isolate::Scope isolate_scope(isolate);
+ v8::Local<v8::Context> context = v8::Context::New(isolate);
+ context->Enter();
+
+ TestCodeEventHandler code_event_handler(isolate);
+
+ const char* source_text_before_start =
+ "function testCodeEventListenerBeforeStart(a,b) { return a + b };"
+ "testCodeEventListenerBeforeStart('1', 1);";
+ CompileRun(source_text_before_start);
+
+ CHECK_NULL(code_event_handler.FindLine("LazyCompile",
+ "testCodeEventListenerBeforeStart"));
+
+ code_event_handler.Enable();
+
+ CHECK_NOT_NULL(code_event_handler.FindLine(
+ "LazyCompile", "testCodeEventListenerBeforeStart"));
+
+ const char* source_text_after_start =
+ "function testCodeEventListenerAfterStart(a,b) { return a + b };"
+ "testCodeEventListenerAfterStart('1', 1);";
+ CompileRun(source_text_after_start);
+
+ CHECK_NOT_NULL(code_event_handler.FindLine(
+ "LazyCompile", "testCodeEventListenerAfterStart"));
+
+ context->Exit();
+ }
+ isolate->Dispose();
+}
+
TEST(TraceMaps) {
SETUP_FLAGS();
i::FLAG_trace_maps = true;