aboutsummaryrefslogtreecommitdiff
path: root/deps/v8/src/libplatform/tracing/tracing-controller.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/libplatform/tracing/tracing-controller.cc')
-rw-r--r--deps/v8/src/libplatform/tracing/tracing-controller.cc49
1 files changed, 45 insertions, 4 deletions
diff --git a/deps/v8/src/libplatform/tracing/tracing-controller.cc b/deps/v8/src/libplatform/tracing/tracing-controller.cc
index e9a21725e2..c1a4057c05 100644
--- a/deps/v8/src/libplatform/tracing/tracing-controller.cc
+++ b/deps/v8/src/libplatform/tracing/tracing-controller.cc
@@ -38,21 +38,28 @@ const int g_num_builtin_categories = 4;
// Skip default categories.
v8::base::AtomicWord g_category_index = g_num_builtin_categories;
+TracingController::TracingController() {}
+
+TracingController::~TracingController() {}
+
void TracingController::Initialize(TraceBuffer* trace_buffer) {
trace_buffer_.reset(trace_buffer);
+ mutex_.reset(new base::Mutex());
}
uint64_t TracingController::AddTraceEvent(
char phase, const uint8_t* category_enabled_flag, const char* name,
const char* scope, uint64_t id, uint64_t bind_id, int num_args,
const char** arg_names, const uint8_t* arg_types,
- const uint64_t* arg_values, unsigned int flags) {
+ const uint64_t* arg_values,
+ std::unique_ptr<v8::ConvertableToTraceFormat>* 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, flags);
+ arg_values, arg_convertables, flags);
}
return handle;
}
@@ -91,13 +98,29 @@ const char* TracingController::GetCategoryGroupName(
void TracingController::StartTracing(TraceConfig* trace_config) {
trace_config_.reset(trace_config);
- mode_ = RECORDING_MODE;
- UpdateCategoryGroupEnabledFlags();
+ std::unordered_set<Platform::TraceStateObserver*> observers_copy;
+ {
+ base::LockGuard<base::Mutex> lock(mutex_.get());
+ mode_ = RECORDING_MODE;
+ UpdateCategoryGroupEnabledFlags();
+ observers_copy = observers_;
+ }
+ for (auto o : observers_copy) {
+ o->OnTraceEnabled();
+ }
}
void TracingController::StopTracing() {
mode_ = DISABLED;
UpdateCategoryGroupEnabledFlags();
+ std::unordered_set<Platform::TraceStateObserver*> observers_copy;
+ {
+ base::LockGuard<base::Mutex> lock(mutex_.get());
+ observers_copy = observers_;
+ }
+ for (auto o : observers_copy) {
+ o->OnTraceDisabled();
+ }
trace_buffer_->Flush();
}
@@ -172,6 +195,24 @@ const uint8_t* TracingController::GetCategoryGroupEnabledInternal(
return category_group_enabled;
}
+void TracingController::AddTraceStateObserver(
+ Platform::TraceStateObserver* observer) {
+ {
+ base::LockGuard<base::Mutex> lock(mutex_.get());
+ observers_.insert(observer);
+ if (mode_ != RECORDING_MODE) return;
+ }
+ // Fire the observer if recording is already in progress.
+ observer->OnTraceEnabled();
+}
+
+void TracingController::RemoveTraceStateObserver(
+ Platform::TraceStateObserver* observer) {
+ base::LockGuard<base::Mutex> lock(mutex_.get());
+ DCHECK(observers_.find(observer) != observers_.end());
+ observers_.erase(observer);
+}
+
} // namespace tracing
} // namespace platform
} // namespace v8