Commit 2525b057 authored by lpy's avatar lpy Committed by Commit bot

[Tracing] Make TracingCategoryObserver v8 internal.

This patch removes TracingCategoryObserver API and moves the creation of
observer inside platform initialization, by assuming that either
Platform::AddTraceStateObserver is implemented correctly to add observer to
tracing controller that implemented by embedders, or default tracing controller
has already been set up and attached to platform before
v8::V8::InitializePlatform is called.

BUG=v8:5590

Review-Url: https://codereview.chromium.org/2471583004
Cr-Commit-Position: refs/heads/master@{#40739}
parent 2010ac0c
...@@ -852,7 +852,6 @@ v8_source_set("v8_base") { ...@@ -852,7 +852,6 @@ v8_source_set("v8_base") {
"include/v8-platform.h", "include/v8-platform.h",
"include/v8-profiler.h", "include/v8-profiler.h",
"include/v8-testing.h", "include/v8-testing.h",
"include/v8-tracing.h",
"include/v8-util.h", "include/v8-util.h",
"include/v8-version.h", "include/v8-version.h",
"include/v8.h", "include/v8.h",
......
// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef V8_V8_TRACING_H_
#define V8_V8_TRACING_H_
#include "v8.h" // NOLINT(build/include)
namespace v8 {
namespace tracing {
class V8_EXPORT TracingCategoryObserver {
public:
enum Mode {
ENABLED_BY_NATIVE = 1 << 0,
ENABLED_BY_TRACING = 1 << 1,
};
static std::unique_ptr<TracingCategoryObserver> Create();
virtual ~TracingCategoryObserver() = default;
protected:
TracingCategoryObserver() = default;
};
} // namespace tracing
} // namespace v8
#endif // V8_V8_TRACING_H_
...@@ -22,7 +22,6 @@ ...@@ -22,7 +22,6 @@
#include "include/libplatform/libplatform.h" #include "include/libplatform/libplatform.h"
#include "include/libplatform/v8-tracing.h" #include "include/libplatform/v8-tracing.h"
#include "include/v8-tracing.h"
#include "src/api.h" #include "src/api.h"
#include "src/base/cpu.h" #include "src/base/cpu.h"
#include "src/base/debug/stack_trace.h" #include "src/base/debug/stack_trace.h"
...@@ -153,7 +152,6 @@ class PredictablePlatform : public Platform { ...@@ -153,7 +152,6 @@ class PredictablePlatform : public Platform {
v8::Platform* g_platform = NULL; v8::Platform* g_platform = NULL;
std::unique_ptr<tracing::TracingCategoryObserver> g_tracing_category_observer;
static Local<Value> Throw(Isolate* isolate, const char* message) { static Local<Value> Throw(Isolate* isolate, const char* message) {
return isolate->ThrowException( return isolate->ThrowException(
...@@ -2823,6 +2821,21 @@ int Shell::Main(int argc, char* argv[]) { ...@@ -2823,6 +2821,21 @@ int Shell::Main(int argc, char* argv[]) {
? new PredictablePlatform() ? new PredictablePlatform()
: v8::platform::CreateDefaultPlatform(); : v8::platform::CreateDefaultPlatform();
std::unique_ptr<platform::tracing::TracingController> tracing_controller;
if (options.trace_enabled) {
trace_file.open("v8_trace.json");
tracing_controller.reset(new platform::tracing::TracingController());
platform::tracing::TraceBuffer* trace_buffer =
platform::tracing::TraceBuffer::CreateTraceBufferRingBuffer(
platform::tracing::TraceBuffer::kRingBufferChunks,
platform::tracing::TraceWriter::CreateJSONTraceWriter(trace_file));
tracing_controller->Initialize(trace_buffer);
if (!i::FLAG_verify_predictable) {
platform::SetTracingController(g_platform, tracing_controller.get());
tracing_controller.release();
}
}
v8::V8::InitializePlatform(g_platform); v8::V8::InitializePlatform(g_platform);
v8::V8::Initialize(); v8::V8::Initialize();
if (options.natives_blob || options.snapshot_blob) { if (options.natives_blob || options.snapshot_blob) {
...@@ -2857,6 +2870,7 @@ int Shell::Main(int argc, char* argv[]) { ...@@ -2857,6 +2870,7 @@ int Shell::Main(int argc, char* argv[]) {
create_params.create_histogram_callback = CreateHistogram; create_params.create_histogram_callback = CreateHistogram;
create_params.add_histogram_sample_callback = AddHistogramSample; create_params.add_histogram_sample_callback = AddHistogramSample;
} }
Isolate* isolate = Isolate::New(create_params); Isolate* isolate = Isolate::New(create_params);
{ {
Isolate::Scope scope(isolate); Isolate::Scope scope(isolate);
...@@ -2864,14 +2878,6 @@ int Shell::Main(int argc, char* argv[]) { ...@@ -2864,14 +2878,6 @@ int Shell::Main(int argc, char* argv[]) {
PerIsolateData data(isolate); PerIsolateData data(isolate);
if (options.trace_enabled) { if (options.trace_enabled) {
trace_file.open("v8_trace.json");
platform::tracing::TracingController* tracing_controller =
new platform::tracing::TracingController();
platform::tracing::TraceBuffer* trace_buffer =
platform::tracing::TraceBuffer::CreateTraceBufferRingBuffer(
platform::tracing::TraceBuffer::kRingBufferChunks,
platform::tracing::TraceWriter::CreateJSONTraceWriter(
trace_file));
platform::tracing::TraceConfig* trace_config; platform::tracing::TraceConfig* trace_config;
if (options.trace_config) { if (options.trace_config) {
int size = 0; int size = 0;
...@@ -2884,14 +2890,6 @@ int Shell::Main(int argc, char* argv[]) { ...@@ -2884,14 +2890,6 @@ int Shell::Main(int argc, char* argv[]) {
trace_config = trace_config =
platform::tracing::TraceConfig::CreateDefaultTraceConfig(); platform::tracing::TraceConfig::CreateDefaultTraceConfig();
} }
tracing_controller->Initialize(trace_buffer);
if (!i::FLAG_verify_predictable) {
platform::SetTracingController(g_platform, tracing_controller);
}
g_tracing_category_observer = tracing::TracingCategoryObserver::Create();
g_platform->AddTraceStateObserver(
reinterpret_cast<Platform::TraceStateObserver*>(
g_tracing_category_observer.get()));
tracing_controller->StartTracing(trace_config); tracing_controller->StartTracing(trace_config);
} }
...@@ -2953,9 +2951,6 @@ int Shell::Main(int argc, char* argv[]) { ...@@ -2953,9 +2951,6 @@ int Shell::Main(int argc, char* argv[]) {
isolate->Dispose(); isolate->Dispose();
V8::Dispose(); V8::Dispose();
V8::ShutdownPlatform(); V8::ShutdownPlatform();
g_platform->RemoveTraceStateObserver(
reinterpret_cast<Platform::TraceStateObserver*>(
g_tracing_category_observer.get()));
delete g_platform; delete g_platform;
return result; return result;
......
...@@ -4,7 +4,6 @@ ...@@ -4,7 +4,6 @@
#include "src/tracing/tracing-category-observer.h" #include "src/tracing/tracing-category-observer.h"
#include "include/v8.h"
#include "src/flags.h" #include "src/flags.h"
#include "src/tracing/trace-event.h" #include "src/tracing/trace-event.h"
#include "src/v8.h" #include "src/v8.h"
...@@ -12,18 +11,21 @@ ...@@ -12,18 +11,21 @@
namespace v8 { namespace v8 {
namespace tracing { namespace tracing {
std::unique_ptr<TracingCategoryObserver> TracingCategoryObserver::Create() { TracingCategoryObserver* TracingCategoryObserver::instance_ = nullptr;
return std::unique_ptr<TracingCategoryObserver>(
new TracingCategoryObserverImpl());
}
TracingCategoryObserverImpl::TracingCategoryObserverImpl() {} void TracingCategoryObserver::SetUp() {
TracingCategoryObserver::instance_ = new TracingCategoryObserver();
v8::internal::V8::GetCurrentPlatform()->AddTraceStateObserver(
TracingCategoryObserver::instance_);
}
TracingCategoryObserverImpl::~TracingCategoryObserverImpl() { void TracingCategoryObserver::TearDown() {
OnTraceDisabled(); v8::internal::V8::GetCurrentPlatform()->RemoveTraceStateObserver(
TracingCategoryObserver::instance_);
delete TracingCategoryObserver::instance_;
} }
void TracingCategoryObserverImpl::OnTraceEnabled() { void TracingCategoryObserver::OnTraceEnabled() {
bool enabled = false; bool enabled = false;
TRACE_EVENT_CATEGORY_GROUP_ENABLED( TRACE_EVENT_CATEGORY_GROUP_ENABLED(
TRACE_DISABLED_BY_DEFAULT("v8.runtime_stats"), &enabled); TRACE_DISABLED_BY_DEFAULT("v8.runtime_stats"), &enabled);
...@@ -32,7 +34,7 @@ void TracingCategoryObserverImpl::OnTraceEnabled() { ...@@ -32,7 +34,7 @@ void TracingCategoryObserverImpl::OnTraceEnabled() {
} }
} }
void TracingCategoryObserverImpl::OnTraceDisabled() { void TracingCategoryObserver::OnTraceDisabled() {
v8::internal::FLAG_runtime_stats &= ~ENABLED_BY_TRACING; v8::internal::FLAG_runtime_stats &= ~ENABLED_BY_TRACING;
} }
......
...@@ -6,20 +6,30 @@ ...@@ -6,20 +6,30 @@
#define V8_TRACING_TRACING_CATEGORY_OBSERVER_H_ #define V8_TRACING_TRACING_CATEGORY_OBSERVER_H_
#include "include/v8-platform.h" #include "include/v8-platform.h"
#include "include/v8-tracing.h" #include "src/base/lazy-instance.h"
namespace v8 { namespace v8 {
namespace tracing { namespace tracing {
class TracingCategoryObserverImpl : public TracingCategoryObserver, class TracingCategoryObserver : public Platform::TraceStateObserver {
public Platform::TraceStateObserver {
public: public:
TracingCategoryObserverImpl(); enum Mode {
~TracingCategoryObserverImpl(); ENABLED_BY_NATIVE = 1 << 0,
ENABLED_BY_TRACING = 1 << 1,
};
static void SetUp();
static void TearDown();
// v8::Platform::TraceStateObserver // v8::Platform::TraceStateObserver
void OnTraceEnabled() final; void OnTraceEnabled() final;
void OnTraceDisabled() final; void OnTraceDisabled() final;
TracingCategoryObserver() {}
~TracingCategoryObserver() {}
private:
static TracingCategoryObserver* instance_;
}; };
} // namespace tracing } // namespace tracing
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#include "src/runtime-profiler.h" #include "src/runtime-profiler.h"
#include "src/snapshot/natives.h" #include "src/snapshot/natives.h"
#include "src/snapshot/snapshot.h" #include "src/snapshot/snapshot.h"
#include "src/tracing/tracing-category-observer.h"
namespace v8 { namespace v8 {
namespace internal { namespace internal {
...@@ -94,11 +94,13 @@ void V8::InitializePlatform(v8::Platform* platform) { ...@@ -94,11 +94,13 @@ void V8::InitializePlatform(v8::Platform* platform) {
CHECK(!platform_); CHECK(!platform_);
CHECK(platform); CHECK(platform);
platform_ = platform; platform_ = platform;
v8::tracing::TracingCategoryObserver::SetUp();
} }
void V8::ShutdownPlatform() { void V8::ShutdownPlatform() {
CHECK(platform_); CHECK(platform_);
v8::tracing::TracingCategoryObserver::TearDown();
platform_ = NULL; platform_ = NULL;
} }
......
...@@ -392,7 +392,6 @@ ...@@ -392,7 +392,6 @@
'../include/v8-platform.h', '../include/v8-platform.h',
'../include/v8-profiler.h', '../include/v8-profiler.h',
'../include/v8-testing.h', '../include/v8-testing.h',
'../include/v8-tracing.h',
'../include/v8-util.h', '../include/v8-util.h',
'../include/v8-version.h', '../include/v8-version.h',
'../include/v8.h', '../include/v8.h',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment