summaryrefslogtreecommitdiff
path: root/src/tracing
diff options
context:
space:
mode:
authorMatt Loring <mattloring@google.com>2017-06-29 10:55:38 +0200
committerAnna Henningsen <anna@addaleax.net>2017-08-17 20:26:49 +0200
commit5e5a52fc937d53b5bcf5c2c09c898d8311db2bca (patch)
tree9af454a4b67af717e84dfa57dab11db76cd1acd9 /src/tracing
parentfabe1b4e19011b94b20572a40300161b1160f8fd (diff)
downloadandroid-node-v8-5e5a52fc937d53b5bcf5c2c09c898d8311db2bca.tar.gz
android-node-v8-5e5a52fc937d53b5bcf5c2c09c898d8311db2bca.tar.bz2
android-node-v8-5e5a52fc937d53b5bcf5c2c09c898d8311db2bca.zip
tracing: Update to use new Platform tracing apis
V8 modified the platform API to accept a tracing controller at platform creation time that is required to be present for the lifetime of the platform if tracing will every be enabled. This will simplify the implementation of a v8::Platform subclass for node. PR-URL: https://github.com/nodejs/node/pull/14001 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Tobias Nießen <tniessen@tnie.de>
Diffstat (limited to 'src/tracing')
-rw-r--r--src/tracing/agent.cc20
-rw-r--r--src/tracing/agent.h7
-rw-r--r--src/tracing/trace_event.cc10
-rw-r--r--src/tracing/trace_event.h18
4 files changed, 26 insertions, 29 deletions
diff --git a/src/tracing/agent.cc b/src/tracing/agent.cc
index 669bae130c..38e651ebb2 100644
--- a/src/tracing/agent.cc
+++ b/src/tracing/agent.cc
@@ -12,20 +12,18 @@ namespace tracing {
using v8::platform::tracing::TraceConfig;
using std::string;
-Agent::Agent() {}
-
-void Agent::Start(v8::Platform* platform, const string& enabled_categories) {
- platform_ = platform;
-
+Agent::Agent() {
int err = uv_loop_init(&tracing_loop_);
CHECK_EQ(err, 0);
NodeTraceWriter* trace_writer = new NodeTraceWriter(&tracing_loop_);
TraceBuffer* trace_buffer = new NodeTraceBuffer(
NodeTraceBuffer::kBufferChunks, trace_writer, &tracing_loop_);
-
tracing_controller_ = new TracingController();
+ tracing_controller_->Initialize(trace_buffer);
+}
+void Agent::Start(const string& enabled_categories) {
TraceConfig* trace_config = new TraceConfig();
if (!enabled_categories.empty()) {
std::stringstream category_list(enabled_categories);
@@ -42,27 +40,25 @@ void Agent::Start(v8::Platform* platform, const string& enabled_categories) {
// This thread should be created *after* async handles are created
// (within NodeTraceWriter and NodeTraceBuffer constructors).
// Otherwise the thread could shut down prematurely.
- err = uv_thread_create(&thread_, ThreadCb, this);
+ int err = uv_thread_create(&thread_, ThreadCb, this);
CHECK_EQ(err, 0);
- tracing_controller_->Initialize(trace_buffer);
tracing_controller_->StartTracing(trace_config);
- v8::platform::SetTracingController(platform, tracing_controller_);
+ started_ = true;
}
void Agent::Stop() {
- if (!IsStarted()) {
+ if (!started_) {
return;
}
// Perform final Flush on TraceBuffer. We don't want the tracing controller
// to flush the buffer again on destruction of the V8::Platform.
tracing_controller_->StopTracing();
tracing_controller_->Initialize(nullptr);
- tracing_controller_ = nullptr;
+ started_ = false;
// Thread should finish when the tracing loop is stopped.
uv_thread_join(&thread_);
- v8::platform::SetTracingController(platform_, nullptr);
}
// static
diff --git a/src/tracing/agent.h b/src/tracing/agent.h
index 6966c2e43b..cc00c53144 100644
--- a/src/tracing/agent.h
+++ b/src/tracing/agent.h
@@ -12,16 +12,17 @@ namespace tracing {
class Agent {
public:
Agent();
- void Start(v8::Platform* platform, const std::string& enabled_categories);
+ void Start(const std::string& enabled_categories);
void Stop();
+ TracingController* GetTracingController() { return tracing_controller_; }
+
private:
- bool IsStarted() { return platform_ != nullptr; }
static void ThreadCb(void* arg);
uv_thread_t thread_;
uv_loop_t tracing_loop_;
- v8::Platform* platform_ = nullptr;
+ bool started_ = false;
TracingController* tracing_controller_ = nullptr;
};
diff --git a/src/tracing/trace_event.cc b/src/tracing/trace_event.cc
index b83cae6e05..856b344e9d 100644
--- a/src/tracing/trace_event.cc
+++ b/src/tracing/trace_event.cc
@@ -3,14 +3,14 @@
namespace node {
namespace tracing {
-v8::Platform* platform_ = nullptr;
+v8::TracingController* controller_ = nullptr;
-void TraceEventHelper::SetCurrentPlatform(v8::Platform* platform) {
- platform_ = platform;
+void TraceEventHelper::SetTracingController(v8::TracingController* controller) {
+ controller_ = controller;
}
-v8::Platform* TraceEventHelper::GetCurrentPlatform() {
- return platform_;
+v8::TracingController* TraceEventHelper::GetTracingController() {
+ return controller_;
}
} // namespace tracing
diff --git a/src/tracing/trace_event.h b/src/tracing/trace_event.h
index ac0c1f7578..24806d375f 100644
--- a/src/tracing/trace_event.h
+++ b/src/tracing/trace_event.h
@@ -70,7 +70,7 @@ enum CategoryGroupEnabledFlags {
// const uint8_t*
// TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED(const char* category_group)
#define TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED \
- node::tracing::TraceEventHelper::GetCurrentPlatform() \
+ node::tracing::TraceEventHelper::GetTracingController() \
->GetCategoryGroupEnabled
// Get the number of times traces have been recorded. This is used to implement
@@ -99,7 +99,7 @@ enum CategoryGroupEnabledFlags {
// const char* name,
// uint64_t id)
#define TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION \
- node::tracing::TraceEventHelper::GetCurrentPlatform() \
+ node::tracing::TraceEventHelper::GetTracingController() \
->UpdateTraceEventDuration
// Defines atomic operations used internally by the tracing system.
@@ -258,8 +258,8 @@ extern intptr_t kRuntimeCallStatsTracingEnabled;
class TraceEventHelper {
public:
- static v8::Platform* GetCurrentPlatform();
- static void SetCurrentPlatform(v8::Platform* platform);
+ static v8::TracingController* GetTracingController();
+ static void SetTracingController(v8::TracingController* controller);
};
// TraceID encapsulates an ID that can either be an integer or pointer. Pointers
@@ -406,11 +406,11 @@ static inline uint64_t AddTraceEventImpl(
static_cast<intptr_t>(arg_values[1])));
}
// DCHECK(num_args <= 2);
- v8::Platform* platform =
- node::tracing::TraceEventHelper::GetCurrentPlatform();
- return platform->AddTraceEvent(phase, category_group_enabled, name, scope, id,
- bind_id, num_args, arg_names, arg_types,
- arg_values, arg_convertibles, flags);
+ v8::TracingController* controller =
+ node::tracing::TraceEventHelper::GetTracingController();
+ return controller->AddTraceEvent(phase, category_group_enabled, name, scope, id,
+ bind_id, num_args, arg_names, arg_types,
+ arg_values, arg_convertibles, flags);
}
// Define SetTraceValue for each allowed type. It stores the type and