summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAli Ijaz Sheikh <ofrobots@google.com>2018-05-16 15:22:56 -0700
committerAli Ijaz Sheikh <ofrobots@google.com>2018-05-21 11:16:44 -0700
commit32873c5f9bc6e13b9cdff220b50bafeb3a1a2dec (patch)
tree21f9c34f010ff5b9d167b0b4c7653d3bce0ce358
parent9c2e67ba97a4af0bb83c621b0c724f84198eac2d (diff)
downloadandroid-node-v8-32873c5f9bc6e13b9cdff220b50bafeb3a1a2dec.tar.gz
android-node-v8-32873c5f9bc6e13b9cdff220b50bafeb3a1a2dec.tar.bz2
android-node-v8-32873c5f9bc6e13b9cdff220b50bafeb3a1a2dec.zip
src: trace_events: background thread events
V8 uses a thread pool provided by the host to schedule background tasks for concurrent GC and compiation. Emit trace events to identify the background threads. Ensure that the tracing infrastructure is started before the thread pool is initialized. PR-URL: https://github.com/nodejs/node/pull/20823 Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
-rw-r--r--src/node.cc10
-rw-r--r--src/node_platform.cc6
-rw-r--r--test/cctest/node_test_fixture.h6
-rw-r--r--test/parallel/test-trace-events-metadata.js3
4 files changed, 14 insertions, 11 deletions
diff --git a/src/node.cc b/src/node.cc
index 5313063578..27fccca6ee 100644
--- a/src/node.cc
+++ b/src/node.cc
@@ -289,11 +289,11 @@ static struct {
#if NODE_USE_V8_PLATFORM
void Initialize(int thread_pool_size) {
tracing_agent_.reset(new tracing::Agent(trace_file_pattern));
- platform_ = new NodePlatform(thread_pool_size,
- tracing_agent_->GetTracingController());
+ auto controller = tracing_agent_->GetTracingController();
+ tracing::TraceEventHelper::SetTracingController(controller);
+ StartTracingAgent();
+ platform_ = new NodePlatform(thread_pool_size, controller);
V8::InitializePlatform(platform_);
- tracing::TraceEventHelper::SetTracingController(
- tracing_agent_->GetTracingController());
}
void Dispose() {
@@ -4406,8 +4406,6 @@ int Start(int argc, char** argv) {
#endif // HAVE_OPENSSL
v8_platform.Initialize(v8_thread_pool_size);
- // Enable tracing when argv has --trace-events-enabled.
- v8_platform.StartTracingAgent();
V8::Initialize();
performance::performance_v8_start = PERFORMANCE_NOW();
v8_initialized = true;
diff --git a/src/node_platform.cc b/src/node_platform.cc
index b8f1344727..2885c72ed7 100644
--- a/src/node_platform.cc
+++ b/src/node_platform.cc
@@ -16,8 +16,10 @@ using v8::Platform;
using v8::Task;
using v8::TracingController;
-static void BackgroundRunner(void* data) {
- TaskQueue<Task>* background_tasks = static_cast<TaskQueue<Task>*>(data);
+static void BackgroundRunner(void *data) {
+ TRACE_EVENT_METADATA1("__metadata", "thread_name", "name",
+ "BackgroundTaskRunner");
+ TaskQueue<Task> *background_tasks = static_cast<TaskQueue<Task> *>(data);
while (std::unique_ptr<Task> task = background_tasks->BlockingPop()) {
task->Run();
background_tasks->NotifyOfCompletion();
diff --git a/test/cctest/node_test_fixture.h b/test/cctest/node_test_fixture.h
index e0740a4709..f43cb56cd3 100644
--- a/test/cctest/node_test_fixture.h
+++ b/test/cctest/node_test_fixture.h
@@ -64,12 +64,12 @@ class NodeTestFixture : public ::testing::Test {
v8::Isolate* isolate_;
static void SetUpTestCase() {
- platform.reset(new node::NodePlatform(4, nullptr));
tracing_controller.reset(new v8::TracingController());
- allocator.reset(v8::ArrayBuffer::Allocator::NewDefaultAllocator());
- params.array_buffer_allocator = allocator.get();
node::tracing::TraceEventHelper::SetTracingController(
tracing_controller.get());
+ platform.reset(new node::NodePlatform(4, nullptr));
+ allocator.reset(v8::ArrayBuffer::Allocator::NewDefaultAllocator());
+ params.array_buffer_allocator = allocator.get();
CHECK_EQ(0, uv_loop_init(&current_loop));
v8::V8::InitializePlatform(platform.get());
v8::V8::Initialize();
diff --git a/test/parallel/test-trace-events-metadata.js b/test/parallel/test-trace-events-metadata.js
index f8fcdcfe5b..eccec1ecf0 100644
--- a/test/parallel/test-trace-events-metadata.js
+++ b/test/parallel/test-trace-events-metadata.js
@@ -22,5 +22,8 @@ proc.once('exit', common.mustCall(() => {
assert(traces.some((trace) =>
trace.cat === '__metadata' && trace.name === 'thread_name' &&
trace.args.name === 'JavaScriptMainThread'));
+ assert(traces.some((trace) =>
+ trace.cat === '__metadata' && trace.name === 'thread_name' &&
+ trace.args.name === 'BackgroundTaskRunner'));
}));
}));