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