Skip to content

Commit cc59f8b

Browse files
jeisingerCommit Bot
authored andcommitted
Reland "Switch tracing to use v8::TracingController"
Original change's description: > Switch tracing to use v8::TracingController > > BUG=v8:6511 > R=fmeawad@chromium.org > > Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng > Change-Id: I4961e4b61a9ddc98385ed97c3ffcbcaef2d9cba7 > Reviewed-on: https://chromium-review.googlesource.com/543144 > Commit-Queue: Jochen Eisinger <jochen@chromium.org> > Reviewed-by: Fadi Meawad <fmeawad@chromium.org> > Cr-Commit-Position: refs/heads/master@{#46307} BUG=v8:6511 TBR=fmeawad@chromium.org Cq-Include-Trybots: master.tryserver.chromium.linux:linux_chromium_rel_ng;master.tryserver.v8:v8_linux64_tsan_rel Change-Id: Ide32b409248dfd466e7c0bae1d8ae61d6a955d98 Reviewed-on: https://chromium-review.googlesource.com/558865 Commit-Queue: Jochen Eisinger <jochen@chromium.org> Reviewed-by: Jochen Eisinger <jochen@chromium.org> Cr-Commit-Position: refs/heads/master@{#46381}
1 parent c5be0b8 commit cc59f8b

17 files changed

Lines changed: 175 additions & 176 deletions

include/libplatform/libplatform.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ V8_PLATFORM_EXPORT void RunIdleTasks(v8::Platform* platform,
7070
* Attempts to set the tracing controller for the given platform.
7171
*
7272
* The |platform| has to be created using |CreateDefaultPlatform|.
73+
*
74+
* DEPRECATED: Will be removed soon.
7375
*/
7476
V8_PLATFORM_EXPORT void SetTracingController(
7577
v8::Platform* platform,

include/v8-platform.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ class Platform {
206206
/**
207207
* Returns an instance of a v8::TracingController. This must be non-nullptr.
208208
*/
209-
virtual TracingController* GetTracingController() { return nullptr; }
209+
virtual TracingController* GetTracingController() = 0;
210210

211211
// DEPRECATED methods, use TracingController interface instead.
212212

src/d8.cc

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,10 @@ class PredictablePlatform : public Platform {
229229
return synthetic_time_in_sec_ += 0.00001;
230230
}
231231

232+
v8::TracingController* GetTracingController() override {
233+
return platform_->GetTracingController();
234+
}
235+
232236
Platform* platform() const { return platform_.get(); }
233237

234238
private:
@@ -3107,13 +3111,7 @@ int Shell::Main(int argc, char* argv[]) {
31073111
? v8::platform::InProcessStackDumping::kDisabled
31083112
: v8::platform::InProcessStackDumping::kEnabled;
31093113

3110-
g_platform = v8::platform::CreateDefaultPlatform(
3111-
0, v8::platform::IdleTaskSupport::kEnabled, in_process_stack_dumping);
3112-
if (i::FLAG_verify_predictable) {
3113-
g_platform = new PredictablePlatform(std::unique_ptr<Platform>(g_platform));
3114-
}
3115-
3116-
platform::tracing::TracingController* tracing_controller;
3114+
platform::tracing::TracingController* tracing_controller = nullptr;
31173115
if (options.trace_enabled && !i::FLAG_verify_predictable) {
31183116
trace_file.open("v8_trace.json");
31193117
tracing_controller = new platform::tracing::TracingController();
@@ -3122,7 +3120,13 @@ int Shell::Main(int argc, char* argv[]) {
31223120
platform::tracing::TraceBuffer::kRingBufferChunks,
31233121
platform::tracing::TraceWriter::CreateJSONTraceWriter(trace_file));
31243122
tracing_controller->Initialize(trace_buffer);
3125-
platform::SetTracingController(g_platform, tracing_controller);
3123+
}
3124+
3125+
g_platform = v8::platform::CreateDefaultPlatform(
3126+
0, v8::platform::IdleTaskSupport::kEnabled, in_process_stack_dumping,
3127+
tracing_controller);
3128+
if (i::FLAG_verify_predictable) {
3129+
g_platform = new PredictablePlatform(std::unique_ptr<Platform>(g_platform));
31263130
}
31273131

31283132
v8::V8::InitializePlatform(g_platform);

src/libplatform/default-platform.cc

Lines changed: 16 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,10 @@ v8::Platform* CreateDefaultPlatform(
3636
if (in_process_stack_dumping == InProcessStackDumping::kEnabled) {
3737
v8::base::debug::EnableInProcessStackDumping();
3838
}
39-
DefaultPlatform* platform = new DefaultPlatform(idle_task_support);
39+
DefaultPlatform* platform =
40+
new DefaultPlatform(idle_task_support, tracing_controller);
4041
platform->SetThreadPoolSize(thread_pool_size);
4142
platform->EnsureInitialized();
42-
if (tracing_controller != nullptr)
43-
platform->SetTracingController(tracing_controller);
4443
return platform;
4544
}
4645

@@ -64,16 +63,25 @@ void RunIdleTasks(v8::Platform* platform, v8::Isolate* isolate,
6463
void SetTracingController(
6564
v8::Platform* platform,
6665
v8::platform::tracing::TracingController* tracing_controller) {
67-
return static_cast<DefaultPlatform*>(platform)->SetTracingController(
66+
static_cast<DefaultPlatform*>(platform)->SetTracingController(
6867
tracing_controller);
6968
}
7069

7170
const int DefaultPlatform::kMaxThreadPoolSize = 8;
7271

73-
DefaultPlatform::DefaultPlatform(IdleTaskSupport idle_task_support)
72+
DefaultPlatform::DefaultPlatform(IdleTaskSupport idle_task_support,
73+
v8::TracingController* tracing_controller)
7474
: initialized_(false),
7575
thread_pool_size_(0),
76-
idle_task_support_(idle_task_support) {}
76+
idle_task_support_(idle_task_support) {
77+
if (tracing_controller) {
78+
tracing_controller_.reset(tracing_controller);
79+
} else {
80+
tracing::TracingController* controller = new tracing::TracingController();
81+
controller->Initialize(nullptr);
82+
tracing_controller_.reset(controller);
83+
}
84+
}
7785

7886
DefaultPlatform::~DefaultPlatform() {
7987
base::LockGuard<base::Mutex> guard(&lock_);
@@ -274,64 +282,16 @@ TracingController* DefaultPlatform::GetTracingController() {
274282
return tracing_controller_.get();
275283
}
276284

277-
uint64_t DefaultPlatform::AddTraceEvent(
278-
char phase, const uint8_t* category_enabled_flag, const char* name,
279-
const char* scope, uint64_t id, uint64_t bind_id, int num_args,
280-
const char** arg_names, const uint8_t* arg_types,
281-
const uint64_t* arg_values,
282-
std::unique_ptr<v8::ConvertableToTraceFormat>* arg_convertables,
283-
unsigned int flags) {
284-
if (tracing_controller_) {
285-
return tracing_controller_->AddTraceEvent(
286-
phase, category_enabled_flag, name, scope, id, bind_id, num_args,
287-
arg_names, arg_types, arg_values, arg_convertables, flags);
288-
}
289-
290-
return 0;
291-
}
292-
293-
void DefaultPlatform::UpdateTraceEventDuration(
294-
const uint8_t* category_enabled_flag, const char* name, uint64_t handle) {
295-
if (tracing_controller_) {
296-
tracing_controller_->UpdateTraceEventDuration(category_enabled_flag, name,
297-
handle);
298-
}
299-
}
300-
301-
const uint8_t* DefaultPlatform::GetCategoryGroupEnabled(const char* name) {
302-
if (tracing_controller_) {
303-
return tracing_controller_->GetCategoryGroupEnabled(name);
304-
}
305-
static uint8_t no = 0;
306-
return &no;
307-
}
308-
309-
310-
const char* DefaultPlatform::GetCategoryGroupName(
311-
const uint8_t* category_enabled_flag) {
312-
static const char dummy[] = "dummy";
313-
return dummy;
314-
}
315-
316285
void DefaultPlatform::SetTracingController(
317-
TracingController* tracing_controller) {
286+
v8::TracingController* tracing_controller) {
287+
DCHECK_NOT_NULL(tracing_controller);
318288
tracing_controller_.reset(tracing_controller);
319289
}
320290

321291
size_t DefaultPlatform::NumberOfAvailableBackgroundThreads() {
322292
return static_cast<size_t>(thread_pool_size_);
323293
}
324294

325-
void DefaultPlatform::AddTraceStateObserver(TraceStateObserver* observer) {
326-
if (!tracing_controller_) return;
327-
tracing_controller_->AddTraceStateObserver(observer);
328-
}
329-
330-
void DefaultPlatform::RemoveTraceStateObserver(TraceStateObserver* observer) {
331-
if (!tracing_controller_) return;
332-
tracing_controller_->RemoveTraceStateObserver(observer);
333-
}
334-
335295
Platform::StackTracePrinter DefaultPlatform::GetStackTracePrinter() {
336296
return PrintStackTrace;
337297
}

src/libplatform/default-platform.h

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ class WorkerThread;
3030
class V8_PLATFORM_EXPORT DefaultPlatform : public NON_EXPORTED_BASE(Platform) {
3131
public:
3232
explicit DefaultPlatform(
33-
IdleTaskSupport idle_task_support = IdleTaskSupport::kDisabled);
33+
IdleTaskSupport idle_task_support = IdleTaskSupport::kDisabled,
34+
v8::TracingController* tracing_controller = nullptr);
3435
virtual ~DefaultPlatform();
3536

3637
void SetThreadPoolSize(int thread_pool_size);
@@ -44,6 +45,8 @@ class V8_PLATFORM_EXPORT DefaultPlatform : public NON_EXPORTED_BASE(Platform) {
4445

4546
void RunIdleTasks(v8::Isolate* isolate, double idle_time_in_seconds);
4647

48+
void SetTracingController(v8::TracingController* tracing_controller);
49+
4750
// v8::Platform implementation.
4851
size_t NumberOfAvailableBackgroundThreads() override;
4952
void CallOnBackgroundThread(Task* task,
@@ -54,24 +57,7 @@ class V8_PLATFORM_EXPORT DefaultPlatform : public NON_EXPORTED_BASE(Platform) {
5457
void CallIdleOnForegroundThread(Isolate* isolate, IdleTask* task) override;
5558
bool IdleTasksEnabled(Isolate* isolate) override;
5659
double MonotonicallyIncreasingTime() override;
57-
TracingController* GetTracingController() override;
58-
const uint8_t* GetCategoryGroupEnabled(const char* name) override;
59-
const char* GetCategoryGroupName(
60-
const uint8_t* category_enabled_flag) override;
61-
using Platform::AddTraceEvent;
62-
uint64_t AddTraceEvent(
63-
char phase, const uint8_t* category_enabled_flag, const char* name,
64-
const char* scope, uint64_t id, uint64_t bind_id, int32_t num_args,
65-
const char** arg_names, const uint8_t* arg_types,
66-
const uint64_t* arg_values,
67-
std::unique_ptr<v8::ConvertableToTraceFormat>* arg_convertables,
68-
unsigned int flags) override;
69-
void UpdateTraceEventDuration(const uint8_t* category_enabled_flag,
70-
const char* name, uint64_t handle) override;
71-
void SetTracingController(TracingController* tracing_controller);
72-
73-
void AddTraceStateObserver(TraceStateObserver* observer) override;
74-
void RemoveTraceStateObserver(TraceStateObserver* observer) override;
60+
v8::TracingController* GetTracingController() override;
7561
StackTracePrinter GetStackTracePrinter() override;
7662

7763
private:

src/libplatform/tracing/tracing-controller.cc

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#include "include/libplatform/v8-tracing.h"
99

10+
#include "src/base/atomicops.h"
1011
#include "src/base/platform/mutex.h"
1112

1213
namespace v8 {
@@ -40,7 +41,7 @@ v8::base::AtomicWord g_category_index = g_num_builtin_categories;
4041

4142
TracingController::TracingController() {}
4243

43-
TracingController::~TracingController() {}
44+
TracingController::~TracingController() { StopTracing(); }
4445

4546
void TracingController::Initialize(TraceBuffer* trace_buffer) {
4647
trace_buffer_.reset(trace_buffer);
@@ -111,6 +112,10 @@ void TracingController::StartTracing(TraceConfig* trace_config) {
111112
}
112113

113114
void TracingController::StopTracing() {
115+
if (mode_ == DISABLED) {
116+
return;
117+
}
118+
DCHECK(trace_buffer_);
114119
mode_ = DISABLED;
115120
UpdateCategoryGroupEnabledFlags();
116121
std::unordered_set<v8::TracingController::TraceStateObserver*> observers_copy;
@@ -140,7 +145,9 @@ void TracingController::UpdateCategoryGroupEnabledFlag(size_t category_index) {
140145
enabled_flag |= ENABLED_FOR_RECORDING;
141146
}
142147

143-
g_category_group_enabled[category_index] = enabled_flag;
148+
base::Relaxed_Store(reinterpret_cast<base::Atomic8*>(
149+
g_category_group_enabled + category_index),
150+
enabled_flag);
144151
}
145152

146153
void TracingController::UpdateCategoryGroupEnabledFlags() {

src/profiler/tracing-cpu-profiler.cc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,13 @@ TracingCpuProfilerImpl::TracingCpuProfilerImpl(Isolate* isolate)
2525
TRACE_EVENT_WARMUP_CATEGORY(TRACE_DISABLED_BY_DEFAULT("v8.cpu_profiler"));
2626
TRACE_EVENT_WARMUP_CATEGORY(
2727
TRACE_DISABLED_BY_DEFAULT("v8.cpu_profiler.hires"));
28-
V8::GetCurrentPlatform()->AddTraceStateObserver(this);
28+
V8::GetCurrentPlatform()->GetTracingController()->AddTraceStateObserver(this);
2929
}
3030

3131
TracingCpuProfilerImpl::~TracingCpuProfilerImpl() {
3232
StopProfiling();
33-
V8::GetCurrentPlatform()->RemoveTraceStateObserver(this);
33+
V8::GetCurrentPlatform()->GetTracingController()->RemoveTraceStateObserver(
34+
this);
3435
}
3536

3637
void TracingCpuProfilerImpl::OnTraceEnabled() {

src/profiler/tracing-cpu-profiler.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,14 @@ namespace internal {
1717
class CpuProfiler;
1818
class Isolate;
1919

20-
class TracingCpuProfilerImpl final : public TracingCpuProfiler,
21-
private v8::Platform::TraceStateObserver {
20+
class TracingCpuProfilerImpl final
21+
: public TracingCpuProfiler,
22+
private v8::TracingController::TraceStateObserver {
2223
public:
2324
explicit TracingCpuProfilerImpl(Isolate*);
2425
~TracingCpuProfilerImpl();
2526

26-
// v8::Platform::TraceStateObserver
27+
// v8::TracingController::TraceStateObserver
2728
void OnTraceEnabled() final;
2829
void OnTraceDisabled() final;
2930

src/tracing/trace-event.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ namespace v8 {
1515
namespace internal {
1616
namespace tracing {
1717

18-
v8::Platform* TraceEventHelper::GetCurrentPlatform() {
19-
return v8::internal::V8::GetCurrentPlatform();
18+
v8::TracingController* TraceEventHelper::GetTracingController() {
19+
return v8::internal::V8::GetCurrentPlatform()->GetTracingController();
2020
}
2121

2222
void CallStatsScopedTracer::AddEndTraceEvent() {

src/tracing/trace-event.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ enum CategoryGroupEnabledFlags {
7272
// for best performance when tracing is disabled.
7373
// const uint8_t*
7474
// TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED(const char* category_group)
75-
#define TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED \
76-
v8::internal::tracing::TraceEventHelper::GetCurrentPlatform() \
75+
#define TRACE_EVENT_API_GET_CATEGORY_GROUP_ENABLED \
76+
v8::internal::tracing::TraceEventHelper::GetTracingController() \
7777
->GetCategoryGroupEnabled
7878

7979
// Get the number of times traces have been recorded. This is used to implement
@@ -101,8 +101,8 @@ enum CategoryGroupEnabledFlags {
101101
// const uint8_t* category_group_enabled,
102102
// const char* name,
103103
// uint64_t id)
104-
#define TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION \
105-
v8::internal::tracing::TraceEventHelper::GetCurrentPlatform() \
104+
#define TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION \
105+
v8::internal::tracing::TraceEventHelper::GetTracingController() \
106106
->UpdateTraceEventDuration
107107

108108
// Defines atomic operations used internally by the tracing system.
@@ -277,7 +277,7 @@ const uint64_t kNoId = 0;
277277

278278
class TraceEventHelper {
279279
public:
280-
static v8::Platform* GetCurrentPlatform();
280+
static v8::TracingController* GetTracingController();
281281
};
282282

283283
// TraceID encapsulates an ID that can either be an integer or pointer. Pointers
@@ -424,11 +424,11 @@ static V8_INLINE uint64_t AddTraceEventImpl(
424424
static_cast<intptr_t>(arg_values[1])));
425425
}
426426
DCHECK(num_args <= 2);
427-
v8::Platform* platform =
428-
v8::internal::tracing::TraceEventHelper::GetCurrentPlatform();
429-
return platform->AddTraceEvent(phase, category_group_enabled, name, scope, id,
430-
bind_id, num_args, arg_names, arg_types,
431-
arg_values, arg_convertables, flags);
427+
v8::TracingController* controller =
428+
v8::internal::tracing::TraceEventHelper::GetTracingController();
429+
return controller->AddTraceEvent(phase, category_group_enabled, name, scope,
430+
id, bind_id, num_args, arg_names, arg_types,
431+
arg_values, arg_convertables, flags);
432432
}
433433

434434
// Define SetTraceValue for each allowed type. It stores the type and

0 commit comments

Comments
 (0)