Skip to content

Commit 6e2f622

Browse files
Matt LoringMylesBorins
Matt Loring
authored andcommitted
deps: backport 3d8e87a from upstream V8
Original commit message: Switch tracing to use v8::TracingController BUG=v8:6511 [email protected] 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 <[email protected]> Reviewed-by: Fadi Meawad <[email protected]> Cr-Commit-Position: refs/heads/master@{#46307} PR-URL: #14001 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Ben Noordhuis <[email protected]> Reviewed-By: Tobias Nießen <[email protected]>
1 parent 6cb718b commit 6e2f622

18 files changed

+188
-181
lines changed

deps/v8/include/libplatform/libplatform.h

+2
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,

deps/v8/include/v8-platform.h

+1-1
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

deps/v8/src/d8.cc

+17-15
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,10 @@ class PredictablePlatform : public Platform {
225225
return synthetic_time_in_sec_ += 0.00001;
226226
}
227227

228+
v8::TracingController* GetTracingController() override {
229+
return platform_->GetTracingController();
230+
}
231+
228232
using Platform::AddTraceEvent;
229233
uint64_t AddTraceEvent(char phase, const uint8_t* categoryEnabledFlag,
230234
const char* name, const char* scope, uint64_t id,
@@ -3063,18 +3067,7 @@ int Shell::Main(int argc, char* argv[]) {
30633067
if (!SetOptions(argc, argv)) return 1;
30643068
v8::V8::InitializeICUDefaultLocation(argv[0], options.icu_data_file);
30653069

3066-
v8::platform::InProcessStackDumping in_process_stack_dumping =
3067-
options.disable_in_process_stack_traces
3068-
? v8::platform::InProcessStackDumping::kDisabled
3069-
: v8::platform::InProcessStackDumping::kEnabled;
3070-
3071-
g_platform = i::FLAG_verify_predictable
3072-
? new PredictablePlatform()
3073-
: v8::platform::CreateDefaultPlatform(
3074-
0, v8::platform::IdleTaskSupport::kEnabled,
3075-
in_process_stack_dumping);
3076-
3077-
platform::tracing::TracingController* tracing_controller;
3070+
platform::tracing::TracingController* tracing_controller = nullptr;
30783071
if (options.trace_enabled) {
30793072
trace_file.open("v8_trace.json");
30803073
tracing_controller = new platform::tracing::TracingController();
@@ -3083,11 +3076,20 @@ int Shell::Main(int argc, char* argv[]) {
30833076
platform::tracing::TraceBuffer::kRingBufferChunks,
30843077
platform::tracing::TraceWriter::CreateJSONTraceWriter(trace_file));
30853078
tracing_controller->Initialize(trace_buffer);
3086-
if (!i::FLAG_verify_predictable) {
3087-
platform::SetTracingController(g_platform, tracing_controller);
3088-
}
30893079
}
30903080

3081+
v8::platform::InProcessStackDumping in_process_stack_dumping =
3082+
options.disable_in_process_stack_traces
3083+
? v8::platform::InProcessStackDumping::kDisabled
3084+
: v8::platform::InProcessStackDumping::kEnabled;
3085+
3086+
g_platform = i::FLAG_verify_predictable
3087+
? new PredictablePlatform()
3088+
: v8::platform::CreateDefaultPlatform(
3089+
0, v8::platform::IdleTaskSupport::kEnabled,
3090+
in_process_stack_dumping,
3091+
tracing_controller);
3092+
30913093
v8::V8::InitializePlatform(g_platform);
30923094
v8::V8::Initialize();
30933095
if (options.natives_blob || options.snapshot_blob) {

deps/v8/src/libplatform/default-platform.cc

+20-55
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
#include "src/base/platform/platform.h"
1414
#include "src/base/platform/time.h"
1515
#include "src/base/sys-info.h"
16+
#include "src/libplatform/tracing/trace-buffer.h"
17+
#include "src/libplatform/tracing/trace-writer.h"
1618
#include "src/libplatform/worker-thread.h"
1719

1820
namespace v8 {
@@ -36,11 +38,10 @@ v8::Platform* CreateDefaultPlatform(int thread_pool_size,
3638
if (in_process_stack_dumping == InProcessStackDumping::kEnabled) {
3739
v8::base::debug::EnableInProcessStackDumping();
3840
}
39-
DefaultPlatform* platform = new DefaultPlatform(idle_task_support);
41+
DefaultPlatform* platform =
42+
new DefaultPlatform(idle_task_support, tracing_controller);
4043
platform->SetThreadPoolSize(thread_pool_size);
4144
platform->EnsureInitialized();
42-
if (tracing_controller != nullptr)
43-
platform->SetTracingController(tracing_controller);
4445
return platform;
4546
}
4647

@@ -70,10 +71,22 @@ void SetTracingController(
7071

7172
const int DefaultPlatform::kMaxThreadPoolSize = 8;
7273

73-
DefaultPlatform::DefaultPlatform(IdleTaskSupport idle_task_support)
74+
DefaultPlatform::DefaultPlatform(IdleTaskSupport idle_task_support,
75+
v8::TracingController* tracing_controller)
7476
: initialized_(false),
7577
thread_pool_size_(0),
76-
idle_task_support_(idle_task_support) {}
78+
idle_task_support_(idle_task_support) {
79+
if (tracing_controller) {
80+
tracing_controller_.reset(tracing_controller);
81+
} else {
82+
tracing::TraceWriter* writer = new tracing::NullTraceWriter();
83+
tracing::TraceBuffer* ring_buffer =
84+
new tracing::TraceBufferRingBuffer(1, writer);
85+
tracing::TracingController* controller = new tracing::TracingController();
86+
controller->Initialize(ring_buffer);
87+
tracing_controller_.reset(controller);
88+
}
89+
}
7790

7891
DefaultPlatform::~DefaultPlatform() {
7992
base::LockGuard<base::Mutex> guard(&lock_);
@@ -274,64 +287,16 @@ TracingController* DefaultPlatform::GetTracingController() {
274287
return tracing_controller_.get();
275288
}
276289

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-
316290
void DefaultPlatform::SetTracingController(
317-
TracingController* tracing_controller) {
291+
v8::TracingController* tracing_controller) {
292+
DCHECK_NOT_NULL(tracing_controller);
318293
tracing_controller_.reset(tracing_controller);
319294
}
320295

321296
size_t DefaultPlatform::NumberOfAvailableBackgroundThreads() {
322297
return static_cast<size_t>(thread_pool_size_);
323298
}
324299

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-
335300
Platform::StackTracePrinter DefaultPlatform::GetStackTracePrinter() {
336301
return PrintStackTrace;
337302
}

deps/v8/src/libplatform/default-platform.h

+5-19
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:

deps/v8/src/libplatform/tracing/trace-writer.h

+8
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,14 @@ class JSONTraceWriter : public TraceWriter {
2626
bool append_comma_ = false;
2727
};
2828

29+
class NullTraceWriter : public TraceWriter {
30+
public:
31+
NullTraceWriter() = default;
32+
~NullTraceWriter() = default;
33+
void AppendTraceEvent(TraceObject*) override {}
34+
void Flush() override {}
35+
};
36+
2937
} // namespace tracing
3038
} // namespace platform
3139
} // namespace v8

deps/v8/src/libplatform/tracing/tracing-controller.cc

+5-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ v8::base::AtomicWord g_category_index = g_num_builtin_categories;
4040

4141
TracingController::TracingController() {}
4242

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

4545
void TracingController::Initialize(TraceBuffer* trace_buffer) {
4646
trace_buffer_.reset(trace_buffer);
@@ -111,6 +111,10 @@ void TracingController::StartTracing(TraceConfig* trace_config) {
111111
}
112112

113113
void TracingController::StopTracing() {
114+
if (mode_ == DISABLED) {
115+
return;
116+
}
117+
DCHECK(trace_buffer_);
114118
mode_ = DISABLED;
115119
UpdateCategoryGroupEnabledFlags();
116120
std::unordered_set<v8::TracingController::TraceStateObserver*> observers_copy;

deps/v8/src/profiler/tracing-cpu-profiler.cc

+3-2
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() {

deps/v8/src/profiler/tracing-cpu-profiler.h

+4-3
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

deps/v8/src/tracing/trace-event.cc

+2-2
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() {

deps/v8/src/tracing/trace-event.h

+10-10
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

deps/v8/src/tracing/tracing-category-observer.cc

+6-4
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@ TracingCategoryObserver* TracingCategoryObserver::instance_ = nullptr;
1515

1616
void TracingCategoryObserver::SetUp() {
1717
TracingCategoryObserver::instance_ = new TracingCategoryObserver();
18-
v8::internal::V8::GetCurrentPlatform()->AddTraceStateObserver(
19-
TracingCategoryObserver::instance_);
18+
v8::internal::V8::GetCurrentPlatform()
19+
->GetTracingController()
20+
->AddTraceStateObserver(TracingCategoryObserver::instance_);
2021
TRACE_EVENT_WARMUP_CATEGORY(TRACE_DISABLED_BY_DEFAULT("v8.runtime_stats"));
2122
TRACE_EVENT_WARMUP_CATEGORY(
2223
TRACE_DISABLED_BY_DEFAULT("v8.runtime_stats_sampling"));
@@ -25,8 +26,9 @@ void TracingCategoryObserver::SetUp() {
2526
}
2627

2728
void TracingCategoryObserver::TearDown() {
28-
v8::internal::V8::GetCurrentPlatform()->RemoveTraceStateObserver(
29-
TracingCategoryObserver::instance_);
29+
v8::internal::V8::GetCurrentPlatform()
30+
->GetTracingController()
31+
->RemoveTraceStateObserver(TracingCategoryObserver::instance_);
3032
delete TracingCategoryObserver::instance_;
3133
}
3234

0 commit comments

Comments
 (0)