Commit 178e46f5 authored by Eric Seckler's avatar Eric Seckler Committed by Commit Bot

perfetto: Make ProducerClient a singleton

So that we can access the process-wide client from other tracing agents.

Bug: 900603
Change-Id: Ie157ecc6c5e59e449c8e8182d3a2b31ea8b1bd9e
Reviewed-on: https://chromium-review.googlesource.com/c/1335588Reviewed-by: default avatarSami Kyöstilä <skyostil@chromium.org>
Reviewed-by: default avataroysteine <oysteine@chromium.org>
Commit-Queue: Eric Seckler <eseckler@chromium.org>
Cr-Commit-Position: refs/heads/master@{#607995}
parent 0c8b4575
......@@ -47,6 +47,12 @@ void ProducerClient::DataSourceBase::StartTracingWithID(
StartTracing(producer_client, data_source_config);
}
// static
ProducerClient* ProducerClient::Get() {
static base::NoDestructor<ProducerClient> producer_client;
return producer_client.get();
}
ProducerClient::ProducerClient() : weak_ptr_factory_(this) {
DETACH_FROM_SEQUENCE(sequence_checker_);
}
......
......@@ -70,7 +70,9 @@ class COMPONENT_EXPORT(TRACING_CPP) ProducerClient
std::string name_;
};
ProducerClient();
// Returns the process-wide instance of the ProducerClient.
static ProducerClient* Get();
~ProducerClient() override;
static void DeleteSoonForTesting(std::unique_ptr<ProducerClient>);
......@@ -125,7 +127,13 @@ class COMPONENT_EXPORT(TRACING_CPP) ProducerClient
static void ResetTaskRunnerForTesting();
protected:
// protected for testing.
ProducerClient();
private:
friend class base::NoDestructor<ProducerClient>;
void CommitDataOnSequence(mojom::CommitDataRequestPtr request);
void AddDataSourceOnSequence(DataSourceBase*);
void RegisterDataSourceWithHost(DataSourceBase* data_source);
......
......@@ -46,16 +46,12 @@ namespace tracing {
namespace {
ProducerClient* GetProducerClient() {
static base::NoDestructor<ProducerClient> producer_client;
return producer_client.get();
}
void InitializeProducerClient(service_manager::Connector* connector) {
mojom::PerfettoServicePtr perfetto_service;
connector->BindInterface(mojom::kServiceName, &perfetto_service);
GetProducerClient()->CreateMojoMessagepipes(base::BindOnce(
ProducerClient* client = ProducerClient::Get();
client->CreateMojoMessagepipes(base::BindOnce(
[](mojom::PerfettoServicePtr perfetto_service,
mojom::ProducerClientPtr producer_client_pipe,
mojom::ProducerHostRequest producer_host_pipe) {
......@@ -64,7 +60,7 @@ void InitializeProducerClient(service_manager::Connector* connector) {
},
std::move(perfetto_service)));
GetProducerClient()->AddDataSource(TraceEventDataSource::GetInstance());
client->AddDataSource(TraceEventDataSource::GetInstance());
}
void AddPerfettoMetadataGeneratorFunction(
......@@ -73,7 +69,7 @@ void AddPerfettoMetadataGeneratorFunction(
// call.
static TraceEventMetadataSource* metadata_source = []() {
static base::NoDestructor<TraceEventMetadataSource> instance;
GetProducerClient()->AddDataSource(instance.get());
ProducerClient::Get()->AddDataSource(instance.get());
return instance.get();
}();
......
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