From 4d352f6f73912b7ccb34a48433d6ec8cd2443448 Mon Sep 17 00:00:00 2001 From: Ali Ijaz Sheikh Date: Tue, 11 Sep 2018 15:40:28 -0700 Subject: [PATCH 1/2] deps: cherry-pick 2363cdf from upstream V8 Original commit message: [tracing] do not add traces when disabled https://github.com/nodejs/node/issues/21038 Change-Id: Ic4c9f403b5e54a97d3170b2311dd5aab8c8357c8 Reviewed-on: https://chromium-review.googlesource.com/1217726 Commit-Queue: Ali Ijaz Sheikh Reviewed-by: Yang Guo Cr-Commit-Position: refs/heads/master@{#55809} Refs: https://github.com/v8/v8/commit/2363cdfefeb643285cbe8593b7c17d80e5d06cd9 --- common.gypi | 2 +- .../libplatform/tracing/tracing-controller.cc | 32 +++++++++++-------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/common.gypi b/common.gypi index 9864e8374e74da..21fa89c4dd3225 100644 --- a/common.gypi +++ b/common.gypi @@ -29,7 +29,7 @@ # Reset this number to 0 on major V8 upgrades. # Increment by one for each non-official patch applied to deps/v8. - 'v8_embedder_string': '-node.9', + 'v8_embedder_string': '-node.10', # Enable disassembler for `--print-code` v8 options 'v8_enable_disassembler': 1, diff --git a/deps/v8/src/libplatform/tracing/tracing-controller.cc b/deps/v8/src/libplatform/tracing/tracing-controller.cc index b4aa7baf724d4f..e0a6a1234c5970 100644 --- a/deps/v8/src/libplatform/tracing/tracing-controller.cc +++ b/deps/v8/src/libplatform/tracing/tracing-controller.cc @@ -63,13 +63,15 @@ uint64_t TracingController::AddTraceEvent( const uint64_t* arg_values, std::unique_ptr* arg_convertables, unsigned int flags) { - uint64_t handle; - TraceObject* trace_object = trace_buffer_->AddTraceEvent(&handle); - if (trace_object) { - trace_object->Initialize( - phase, category_enabled_flag, name, scope, id, bind_id, num_args, - arg_names, arg_types, arg_values, arg_convertables, flags, - CurrentTimestampMicroseconds(), CurrentCpuTimestampMicroseconds()); + uint64_t handle = 0; + if (mode_ != DISABLED) { + TraceObject* trace_object = trace_buffer_->AddTraceEvent(&handle); + if (trace_object) { + trace_object->Initialize( + phase, category_enabled_flag, name, scope, id, bind_id, num_args, + arg_names, arg_types, arg_values, arg_convertables, flags, + CurrentTimestampMicroseconds(), CurrentCpuTimestampMicroseconds()); + } } return handle; } @@ -81,13 +83,15 @@ uint64_t TracingController::AddTraceEventWithTimestamp( const uint64_t* arg_values, std::unique_ptr* arg_convertables, unsigned int flags, int64_t timestamp) { - uint64_t handle; - TraceObject* trace_object = trace_buffer_->AddTraceEvent(&handle); - if (trace_object) { - trace_object->Initialize(phase, category_enabled_flag, name, scope, id, - bind_id, num_args, arg_names, arg_types, - arg_values, arg_convertables, flags, timestamp, - CurrentCpuTimestampMicroseconds()); + uint64_t handle = 0; + if (mode_ != DISABLED) { + TraceObject* trace_object = trace_buffer_->AddTraceEvent(&handle); + if (trace_object) { + trace_object->Initialize(phase, category_enabled_flag, name, scope, id, + bind_id, num_args, arg_names, arg_types, + arg_values, arg_convertables, flags, timestamp, + CurrentCpuTimestampMicroseconds()); + } } return handle; } From ac565801bf5a1e5ff66a14ee1ddd189643586d9c Mon Sep 17 00:00:00 2001 From: Ali Ijaz Sheikh Date: Tue, 11 Sep 2018 17:12:43 -0700 Subject: [PATCH 2/2] tracing: avoid flusing uninitialized traces Fixes: https://github.com/nodejs/node/issues/21038 --- src/tracing/node_trace_buffer.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/tracing/node_trace_buffer.cc b/src/tracing/node_trace_buffer.cc index 70a0ad4b311610..3b7119f6d57f68 100644 --- a/src/tracing/node_trace_buffer.cc +++ b/src/tracing/node_trace_buffer.cc @@ -59,7 +59,13 @@ void InternalTraceBuffer::Flush(bool blocking) { for (size_t i = 0; i < total_chunks_; ++i) { auto& chunk = chunks_[i]; for (size_t j = 0; j < chunk->size(); ++j) { - agent_->AppendTraceEvent(chunk->GetEventAt(j)); + TraceObject* trace_event = chunk->GetEventAt(j); + // Another thread may have added a trace that is yet to be + // initialized. Skip such traces. + // https://github.com/nodejs/node/issues/21038. + if (trace_event->name()) { + agent_->AppendTraceEvent(trace_event); + } } } total_chunks_ = 0;