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") {
"include/v8-platform.h",
"include/v8-profiler.h",
"include/v8-testing.h",
"include/v8-tracing.h",
"include/v8-util.h",
"include/v8-version.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 @@
#include "include/libplatform/libplatform.h"
#include "include/libplatform/v8-tracing.h"
#include "include/v8-tracing.h"
#include "src/api.h"
#include "src/base/cpu.h"
#include "src/base/debug/stack_trace.h"
......@@ -153,7 +152,6 @@ class PredictablePlatform : public Platform {
v8::Platform* g_platform = NULL;
std::unique_ptr<tracing::TracingCategoryObserver> g_tracing_category_observer;
static Local<Value> Throw(Isolate* isolate, const char* message) {
return isolate->ThrowException(
......@@ -2823,6 +2821,21 @@ int Shell::Main(int argc, char* argv[]) {
? new PredictablePlatform()
: 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::Initialize();
if (options.natives_blob || options.snapshot_blob) {
......@@ -2857,6 +2870,7 @@ int Shell::Main(int argc, char* argv[]) {
create_params.create_histogram_callback = CreateHistogram;
create_params.add_histogram_sample_callback = AddHistogramSample;
}
Isolate* isolate = Isolate::New(create_params);
{
Isolate::Scope scope(isolate);
......@@ -2864,14 +2878,6 @@ int Shell::Main(int argc, char* argv[]) {
PerIsolateData data(isolate);
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;
if (options.trace_config) {
int size = 0;
......@@ -2884,14 +2890,6 @@ int Shell::Main(int argc, char* argv[]) {
trace_config =
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);
}
......@@ -2953,9 +2951,6 @@ int Shell::Main(int argc, char* argv[]) {
isolate->Dispose();
V8::Dispose();
V8::ShutdownPlatform();
g_platform->RemoveTraceStateObserver(
reinterpret_cast<Platform::TraceStateObserver*>(
g_tracing_category_observer.get()));
delete g_platform;
return result;
......
......@@ -4,7 +4,6 @@
#include "src/tracing/tracing-category-observer.h"
#include "include/v8.h"
#include "src/flags.h"
#include "src/tracing/trace-event.h"
#include "src/v8.h"
......@@ -12,18 +11,21 @@
namespace v8 {
namespace tracing {
std::unique_ptr<TracingCategoryObserver> TracingCategoryObserver::Create() {
return std::unique_ptr<TracingCategoryObserver>(
new TracingCategoryObserverImpl());
}
TracingCategoryObserver* TracingCategoryObserver::instance_ = nullptr;
TracingCategoryObserverImpl::TracingCategoryObserverImpl() {}
void TracingCategoryObserver::SetUp() {
TracingCategoryObserver::instance_ = new TracingCategoryObserver();
v8::internal::V8::GetCurrentPlatform()->AddTraceStateObserver(
TracingCategoryObserver::instance_);
}
TracingCategoryObserverImpl::~TracingCategoryObserverImpl() {
OnTraceDisabled();
void TracingCategoryObserver::TearDown() {
v8::internal::V8::GetCurrentPlatform()->RemoveTraceStateObserver(
TracingCategoryObserver::instance_);
delete TracingCategoryObserver::instance_;
}
void TracingCategoryObserverImpl::OnTraceEnabled() {
void TracingCategoryObserver::OnTraceEnabled() {
bool enabled = false;
TRACE_EVENT_CATEGORY_GROUP_ENABLED(
TRACE_DISABLED_BY_DEFAULT("v8.runtime_stats"), &enabled);
......@@ -32,7 +34,7 @@ void TracingCategoryObserverImpl::OnTraceEnabled() {
}
}
void TracingCategoryObserverImpl::OnTraceDisabled() {
void TracingCategoryObserver::OnTraceDisabled() {
v8::internal::FLAG_runtime_stats &= ~ENABLED_BY_TRACING;
}
......
......@@ -6,20 +6,30 @@
#define V8_TRACING_TRACING_CATEGORY_OBSERVER_H_
#include "include/v8-platform.h"
#include "include/v8-tracing.h"
#include "src/base/lazy-instance.h"
namespace v8 {
namespace tracing {
class TracingCategoryObserverImpl : public TracingCategoryObserver,
public Platform::TraceStateObserver {
class TracingCategoryObserver : public Platform::TraceStateObserver {
public:
TracingCategoryObserverImpl();
~TracingCategoryObserverImpl();
enum Mode {
ENABLED_BY_NATIVE = 1 << 0,
ENABLED_BY_TRACING = 1 << 1,
};
static void SetUp();
static void TearDown();
// v8::Platform::TraceStateObserver
void OnTraceEnabled() final;
void OnTraceDisabled() final;
TracingCategoryObserver() {}
~TracingCategoryObserver() {}
private:
static TracingCategoryObserver* instance_;
};
} // namespace tracing
......
......@@ -20,7 +20,7 @@
#include "src/runtime-profiler.h"
#include "src/snapshot/natives.h"
#include "src/snapshot/snapshot.h"
#include "src/tracing/tracing-category-observer.h"
namespace v8 {
namespace internal {
......@@ -94,11 +94,13 @@ void V8::InitializePlatform(v8::Platform* platform) {
CHECK(!platform_);
CHECK(platform);
platform_ = platform;
v8::tracing::TracingCategoryObserver::SetUp();
}
void V8::ShutdownPlatform() {
CHECK(platform_);
v8::tracing::TracingCategoryObserver::TearDown();
platform_ = NULL;
}
......
......@@ -392,7 +392,6 @@
'../include/v8-platform.h',
'../include/v8-profiler.h',
'../include/v8-testing.h',
'../include/v8-tracing.h',
'../include/v8-util.h',
'../include/v8-version.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