summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJoyee Cheung <joyeec9h3@gmail.com>2019-02-10 18:39:45 +0800
committerJoyee Cheung <joyeec9h3@gmail.com>2019-02-21 10:47:28 +0800
commitc435f069ebb3b8a1c6fb0d983db7f1b799715627 (patch)
treeb133acb7f191d15e9ef46531220b389938ea2a8c /src
parent435eea6400522189c9e521bde32134b03791a576 (diff)
downloadandroid-node-v8-c435f069ebb3b8a1c6fb0d983db7f1b799715627.tar.gz
android-node-v8-c435f069ebb3b8a1c6fb0d983db7f1b799715627.tar.bz2
android-node-v8-c435f069ebb3b8a1c6fb0d983db7f1b799715627.zip
process: simplify the setup of async hooks trace events
- Remove `trace_category_state` from `Environment` - since this is only accessed in the bootstrap process and later in the trace category update handler, we could just pass the initial values into JS land via the trace_events binding, and pass the dynamic values directly to the handler later, instead of accessing them out-of-band via the AliasedBuffer. - Instead of creating the hooks directly in `trace_events_async_hooks.js`, export the hook factory and create the hooks in trace category state toggle. PR-URL: https://github.com/nodejs/node/pull/26062 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Richard Lau <riclau@uk.ibm.com> Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/env-inl.h5
-rw-r--r--src/env.cc12
-rw-r--r--src/env.h3
-rw-r--r--src/node_trace_events.cc13
4 files changed, 16 insertions, 17 deletions
diff --git a/src/env-inl.h b/src/env-inl.h
index 1f66380cf4..aca8176056 100644
--- a/src/env-inl.h
+++ b/src/env-inl.h
@@ -455,11 +455,6 @@ Environment::should_abort_on_uncaught_toggle() {
return should_abort_on_uncaught_toggle_;
}
-inline AliasedBuffer<uint8_t, v8::Uint8Array>&
-Environment::trace_category_state() {
- return trace_category_state_;
-}
-
inline AliasedBuffer<int32_t, v8::Int32Array>&
Environment::stream_base_state() {
return stream_base_state_;
diff --git a/src/env.cc b/src/env.cc
index d882838ed0..01aee46440 100644
--- a/src/env.cc
+++ b/src/env.cc
@@ -21,6 +21,7 @@
namespace node {
using errors::TryCatchScope;
+using v8::Boolean;
using v8::Context;
using v8::EmbedderGraph;
using v8::External;
@@ -152,9 +153,8 @@ void Environment::TrackingTraceStateObserver::UpdateTraceCategoryState() {
return;
}
- env_->trace_category_state()[0] =
- *TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED(
- TRACING_CATEGORY_NODE1(async_hooks));
+ bool async_hooks_enabled = (*(TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED(
+ TRACING_CATEGORY_NODE1(async_hooks)))) != 0;
Isolate* isolate = env_->isolate();
HandleScope handle_scope(isolate);
@@ -163,8 +163,9 @@ void Environment::TrackingTraceStateObserver::UpdateTraceCategoryState() {
return;
TryCatchScope try_catch(env_);
try_catch.SetVerbose(true);
- cb->Call(env_->context(), Undefined(isolate),
- 0, nullptr).ToLocalChecked();
+ Local<Value> args[] = {Boolean::New(isolate, async_hooks_enabled)};
+ cb->Call(env_->context(), Undefined(isolate), arraysize(args), args)
+ .ToLocalChecked();
}
static std::atomic<uint64_t> next_thread_id{0};
@@ -183,7 +184,6 @@ Environment::Environment(IsolateData* isolate_data,
tick_info_(context->GetIsolate()),
timer_base_(uv_now(isolate_data->event_loop())),
should_abort_on_uncaught_toggle_(isolate_, 1),
- trace_category_state_(isolate_, kTraceCategoryCount),
stream_base_state_(isolate_, StreamBase::kNumStreamBaseStateFields),
flags_(flags),
thread_id_(thread_id == kNoThreadId ? AllocateThreadId() : thread_id),
diff --git a/src/env.h b/src/env.h
index d765c7bf52..5f578dd54a 100644
--- a/src/env.h
+++ b/src/env.h
@@ -707,7 +707,6 @@ class Environment {
inline AliasedBuffer<uint32_t, v8::Uint32Array>&
should_abort_on_uncaught_toggle();
- inline AliasedBuffer<uint8_t, v8::Uint8Array>& trace_category_state();
inline AliasedBuffer<int32_t, v8::Int32Array>& stream_base_state();
// The necessary API for async_hooks.
@@ -1022,8 +1021,6 @@ class Environment {
AliasedBuffer<uint32_t, v8::Uint32Array> should_abort_on_uncaught_toggle_;
int should_not_abort_scope_counter_ = 0;
- // Attached to a Uint8Array that tracks the state of trace category
- AliasedBuffer<uint8_t, v8::Uint8Array> trace_category_state_;
std::unique_ptr<TrackingTraceStateObserver> trace_state_observer_;
AliasedBuffer<int32_t, v8::Int32Array> stream_base_state_;
diff --git a/src/node_trace_events.cc b/src/node_trace_events.cc
index 6a0d4f037a..5e30df41c4 100644
--- a/src/node_trace_events.cc
+++ b/src/node_trace_events.cc
@@ -1,6 +1,7 @@
#include "base_object-inl.h"
#include "env.h"
#include "node.h"
+#include "node_internals.h"
#include "node_v8_platform-inl.h"
#include "tracing/agent.h"
@@ -10,6 +11,7 @@
namespace node {
using v8::Array;
+using v8::Boolean;
using v8::Context;
using v8::Function;
using v8::FunctionCallbackInfo;
@@ -148,9 +150,14 @@ void NodeCategorySet::Initialize(Local<Object> target,
target->Set(context, trace,
binding->Get(context, trace).ToLocalChecked()).FromJust();
- target->Set(context,
- FIXED_ONE_BYTE_STRING(env->isolate(), "traceCategoryState"),
- env->trace_category_state().GetJSArray()).FromJust();
+ // Initial value of async hook trace events
+ bool async_hooks_enabled = (*(TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED(
+ TRACING_CATEGORY_NODE1(async_hooks)))) != 0;
+ target
+ ->Set(context,
+ FIXED_ONE_BYTE_STRING(env->isolate(), "asyncHooksEnabledInitial"),
+ Boolean::New(env->isolate(), async_hooks_enabled))
+ .FromJust();
}
} // namespace node