Commit bf17d526 authored by Stephen Nusko's avatar Stephen Nusko Committed by Commit Bot

Manually roll perfetto clean up to expose SMB in the ProducerEndpoint.

There was a lot of different uses of getting the SharedMemoryArbiter
this unifies them all and makes it consistent.

Bug: 1007310
Change-Id: I0a6aba5f739723b46261cb6e0ec174d07ddc2897
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2026569Reviewed-by: default avatarStephen Nusko <nuskos@chromium.org>
Reviewed-by: default avatarEric Seckler <eseckler@chromium.org>
Commit-Queue: Stephen Nusko <nuskos@chromium.org>
Auto-Submit: Stephen Nusko <nuskos@chromium.org>
Cr-Commit-Position: refs/heads/master@{#736796}
parent cf8110d0
......@@ -1293,7 +1293,7 @@ deps = {
},
'src/third_party/perfetto':
Var('android_git') + '/platform/external/perfetto.git' + '@' + 'c6f9fe7ca38a88a371d5144096d9e777eb37a92e',
Var('android_git') + '/platform/external/perfetto.git' + '@' + 'f5303c91c16a76a783621d6b669024111a848eb5',
'src/third_party/perl': {
'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
......
......@@ -86,10 +86,11 @@ void ProducerHost::OnDisconnect() {
void ProducerHost::OnTracingSetup() {
if (is_in_process_) {
DCHECK(producer_endpoint_->MaybeSharedMemoryArbiter());
PerfettoTracedProcess::Get()
->producer_client()
->set_in_process_shmem_arbiter(
producer_endpoint_->GetInProcessShmemArbiter());
producer_endpoint_->MaybeSharedMemoryArbiter());
return;
}
......
......@@ -324,10 +324,6 @@ void AndroidSystemProducer::CommitData(
service_->CommitData(commit, std::move(callback));
}
perfetto::SharedMemoryArbiter* AndroidSystemProducer::GetSharedMemoryArbiter() {
return shared_memory_arbiter_.get();
}
perfetto::SharedMemory* AndroidSystemProducer::shared_memory() const {
return shared_memory_;
}
......@@ -341,7 +337,8 @@ void AndroidSystemProducer::NotifyFlushComplete(perfetto::FlushRequestID id) {
DCHECK_NE(pending_replies_for_latest_flush_.second, 0u);
if (--pending_replies_for_latest_flush_.second == 0) {
shared_memory_arbiter_->NotifyFlushComplete(id);
DCHECK(MaybeSharedMemoryArbiter());
MaybeSharedMemoryArbiter()->NotifyFlushComplete(id);
}
}
......@@ -388,10 +385,8 @@ size_t AndroidSystemProducer::shared_buffer_page_size_kb() const {
}
perfetto::SharedMemoryArbiter*
AndroidSystemProducer::GetInProcessShmemArbiter() {
// Never called by SharedMemoryArbiter/TraceWriter.
NOTREACHED();
return GetSharedMemoryArbiter();
AndroidSystemProducer::MaybeSharedMemoryArbiter() {
return service_->MaybeSharedMemoryArbiter();
}
void AndroidSystemProducer::ActivateTriggers(
......
......@@ -97,7 +97,6 @@ class COMPONENT_EXPORT(TRACING_CPP) AndroidSystemProducer
// ready for consumption.
void CommitData(const perfetto::CommitDataRequest& commit,
CommitDataCallback callback) override;
perfetto::SharedMemoryArbiter* GetSharedMemoryArbiter() override;
// Used by the DataSource implementations to create TraceWriters
// for writing their protobufs, and respond to flushes.
......@@ -113,7 +112,7 @@ class COMPONENT_EXPORT(TRACING_CPP) AndroidSystemProducer
void NotifyDataSourceStarted(perfetto::DataSourceInstanceID) override;
void NotifyDataSourceStopped(perfetto::DataSourceInstanceID) override;
size_t shared_buffer_page_size_kb() const override;
perfetto::SharedMemoryArbiter* GetInProcessShmemArbiter() override;
perfetto::SharedMemoryArbiter* MaybeSharedMemoryArbiter() override;
void ActivateTriggers(const std::vector<std::string>&) override;
protected:
......
......@@ -42,10 +42,7 @@ perfetto::SharedMemory* DummyProducer::shared_memory() const {
size_t DummyProducer::shared_buffer_page_size_kb() const {
return 0;
}
perfetto::SharedMemoryArbiter* DummyProducer::GetSharedMemoryArbiter() {
return nullptr;
}
perfetto::SharedMemoryArbiter* DummyProducer::GetInProcessShmemArbiter() {
perfetto::SharedMemoryArbiter* DummyProducer::MaybeSharedMemoryArbiter() {
return nullptr;
}
void DummyProducer::NotifyFlushComplete(perfetto::FlushRequestID) {}
......
......@@ -40,8 +40,7 @@ class COMPONENT_EXPORT(TRACING_CPP) DummyProducer : public SystemProducer {
CommitDataCallback callback) override;
perfetto::SharedMemory* shared_memory() const override;
size_t shared_buffer_page_size_kb() const override;
perfetto::SharedMemoryArbiter* GetSharedMemoryArbiter() override;
perfetto::SharedMemoryArbiter* GetInProcessShmemArbiter() override;
perfetto::SharedMemoryArbiter* MaybeSharedMemoryArbiter() override;
void NotifyFlushComplete(perfetto::FlushRequestID) override;
void NotifyDataSourceStarted(perfetto::DataSourceInstanceID) override;
void NotifyDataSourceStopped(perfetto::DataSourceInstanceID) override;
......
......@@ -20,21 +20,21 @@ PerfettoProducer::~PerfettoProducer() {}
void PerfettoProducer::BindStartupTraceWriterRegistry(
std::unique_ptr<perfetto::StartupTraceWriterRegistry> registry,
perfetto::BufferID target_buffer) {
DCHECK(GetSharedMemoryArbiter());
return GetSharedMemoryArbiter()->BindStartupTraceWriterRegistry(
DCHECK(MaybeSharedMemoryArbiter());
return MaybeSharedMemoryArbiter()->BindStartupTraceWriterRegistry(
std::move(registry), target_buffer);
}
std::unique_ptr<perfetto::TraceWriter> PerfettoProducer::CreateTraceWriter(
perfetto::BufferID target_buffer,
perfetto::BufferExhaustedPolicy buffer_exhausted_policy) {
DCHECK(GetSharedMemoryArbiter());
DCHECK(MaybeSharedMemoryArbiter());
// Chromium uses BufferExhaustedPolicy::kDrop to avoid stalling trace writers
// when the chunks in the SMB are exhausted. Stalling could otherwise lead to
// deadlocks in chromium, because a stalled mojo IPC thread could prevent
// CommitRequest messages from reaching the perfetto service.
buffer_exhausted_policy = perfetto::BufferExhaustedPolicy::kDrop;
return GetSharedMemoryArbiter()->CreateTraceWriter(target_buffer,
return MaybeSharedMemoryArbiter()->CreateTraceWriter(target_buffer,
buffer_exhausted_policy);
}
......
......@@ -65,10 +65,6 @@ class COMPONENT_EXPORT(TRACING_CPP) PerfettoProducer
std::unique_ptr<PerfettoProducer> perfetto_producer);
protected:
// Returns the SMA of the SharedMemory from the perfetto service or nullptr if
// not initialized (no trace has ever been started).
virtual perfetto::SharedMemoryArbiter* GetSharedMemoryArbiter() = 0;
PerfettoTaskRunner* task_runner();
private:
......
......@@ -127,7 +127,7 @@ void ProducerClient::NewDataSourceAdded(
producer_host_->RegisterDataSource(std::move(new_registration));
}
perfetto::SharedMemoryArbiter* ProducerClient::GetSharedMemoryArbiter() {
perfetto::SharedMemoryArbiter* ProducerClient::MaybeSharedMemoryArbiter() {
return in_process_arbiter_ ? in_process_arbiter_
: shared_memory_arbiter_.get();
}
......@@ -300,11 +300,6 @@ size_t ProducerClient::shared_buffer_page_size_kb() const {
return 0;
}
perfetto::SharedMemoryArbiter* ProducerClient::GetInProcessShmemArbiter() {
NOTREACHED();
return nullptr;
}
void ProducerClient::NotifyFlushComplete(perfetto::FlushRequestID id) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
if (pending_replies_for_latest_flush_.first != id) {
......@@ -314,7 +309,7 @@ void ProducerClient::NotifyFlushComplete(perfetto::FlushRequestID id) {
DCHECK_NE(pending_replies_for_latest_flush_.second, 0u);
if (--pending_replies_for_latest_flush_.second == 0) {
GetSharedMemoryArbiter()->NotifyFlushComplete(id);
MaybeSharedMemoryArbiter()->NotifyFlushComplete(id);
}
}
......
......@@ -88,16 +88,13 @@ class COMPONENT_EXPORT(TRACING_CPP) ProducerClient
void NotifyDataSourceStarted(perfetto::DataSourceInstanceID) override;
void ActivateTriggers(const std::vector<std::string>&) override;
size_t shared_buffer_page_size_kb() const override;
perfetto::SharedMemoryArbiter* GetInProcessShmemArbiter() override;
perfetto::SharedMemoryArbiter* MaybeSharedMemoryArbiter() override;
void BindClientAndHostPipesForTesting(
mojo::PendingReceiver<mojom::ProducerClient>,
mojo::PendingRemote<mojom::ProducerHost>);
void ResetSequenceForTesting();
protected:
perfetto::SharedMemoryArbiter* GetSharedMemoryArbiter() override;
private:
friend class base::NoDestructor<ProducerClient>;
......
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