Commit 3dbbe43c authored by Sami Kyostila's avatar Sami Kyostila Committed by Commit Bot

services/tracing: Roll Perfetto and update to new OnTracingDisabled() API

Roll in a newer revision of Perfetto and update the mojo tracing service
to match the new error status added to OnTracingDisabled().

Change-Id: I9e1e679919417f53a88da212a70f05cf4909333a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2517941
Commit-Queue: Kinuko Yasuda <kinuko@chromium.org>
Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Reviewed-by: default avatarLeonard Grey <lgrey@chromium.org>
Reviewed-by: default avatarStephen Nusko <nuskos@chromium.org>
Auto-Submit: Sami Kyöstilä <skyostil@chromium.org>
Cr-Commit-Position: refs/heads/master@{#824361}
parent eacb6bff
...@@ -1265,7 +1265,7 @@ deps = { ...@@ -1265,7 +1265,7 @@ deps = {
}, },
'src/third_party/perfetto': 'src/third_party/perfetto':
Var('android_git') + '/platform/external/perfetto.git' + '@' + '4cd11945c5a1810252d00d9f91147f22872ddd4b', Var('android_git') + '/platform/external/perfetto.git' + '@' + 'df4403112ffa9c8489a83240a28bd270de823870',
'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',
......
...@@ -127,10 +127,9 @@ class TracingAgent::PerfettoTracingSession ...@@ -127,10 +127,9 @@ class TracingAgent::PerfettoTracingSession
} }
} }
void OnTracingDisabled() override { void OnTracingDisabled(bool) override {
// Since we're converting the tracing data to JSON, we will receive the // Since we're converting the tracing data to JSON, we will receive the
// tracing data via ConsumerHost::DisableTracingAndEmitJson(). // tracing data via ConsumerHost::DisableTracingAndEmitJson().
return;
} }
void DisableTracing( void DisableTracing(
......
...@@ -385,11 +385,15 @@ class TracingHandler::PerfettoTracingSession ...@@ -385,11 +385,15 @@ class TracingHandler::PerfettoTracingSession
} }
} }
void OnTracingDisabled() override { void OnTracingDisabled(bool tracing_succeeded) override {
// If we're converting to JSON, we will receive the data via // If we're converting to JSON, we will receive the data via
// ConsumerHost::DisableTracingAndEmitJson(). // ConsumerHost::DisableTracingAndEmitJson().
if (!use_proto_format_) if (!use_proto_format_)
return; return;
if (!tracing_succeeded) {
OnTracingSessionFailed();
return;
}
DCHECK(agent_label_.empty()); DCHECK(agent_label_.empty());
mojo::ScopedDataPipeProducerHandle producer_handle; mojo::ScopedDataPipeProducerHandle producer_handle;
......
...@@ -131,7 +131,8 @@ PerfettoFileTracer::~PerfettoFileTracer() = default; ...@@ -131,7 +131,8 @@ PerfettoFileTracer::~PerfettoFileTracer() = default;
void PerfettoFileTracer::OnTracingEnabled() {} void PerfettoFileTracer::OnTracingEnabled() {}
void PerfettoFileTracer::OnTracingDisabled() { void PerfettoFileTracer::OnTracingDisabled(bool tracing_succeeded) {
DCHECK(tracing_succeeded);
has_been_disabled_ = true; has_been_disabled_ = true;
} }
......
...@@ -35,7 +35,7 @@ class PerfettoFileTracer : public tracing::mojom::TracingSessionClient { ...@@ -35,7 +35,7 @@ class PerfettoFileTracer : public tracing::mojom::TracingSessionClient {
// tracing::mojom::TracingSessionClient implementation: // tracing::mojom::TracingSessionClient implementation:
void OnTracingEnabled() override; void OnTracingEnabled() override;
void OnTracingDisabled() override; void OnTracingDisabled(bool tracing_succeeded) override;
bool is_finished_for_testing() const { return !background_drainer_; } bool is_finished_for_testing() const { return !background_drainer_; }
......
...@@ -626,7 +626,7 @@ void TracingControllerImpl::OnTracingEnabled() { ...@@ -626,7 +626,7 @@ void TracingControllerImpl::OnTracingEnabled() {
std::move(start_tracing_callback_).Run(); std::move(start_tracing_callback_).Run();
} }
void TracingControllerImpl::OnTracingDisabled() {} void TracingControllerImpl::OnTracingDisabled(bool) {}
void TracingControllerImpl::OnTracingFailed() { void TracingControllerImpl::OnTracingFailed() {
CompleteFlush(); CompleteFlush();
......
...@@ -77,7 +77,7 @@ class TracingControllerImpl : public TracingController, ...@@ -77,7 +77,7 @@ class TracingControllerImpl : public TracingController,
// tracing::mojom::TracingSessionClient implementation: // tracing::mojom::TracingSessionClient implementation:
void OnTracingEnabled() override; void OnTracingEnabled() override;
void OnTracingDisabled() override; void OnTracingDisabled(bool tracing_succeeded) override;
void OnTracingFailed(); void OnTracingFailed();
......
...@@ -348,7 +348,7 @@ void ConsumerHost::TracingSession::DisableTracing() { ...@@ -348,7 +348,7 @@ void ConsumerHost::TracingSession::DisableTracing() {
host_->consumer_endpoint()->DisableTracing(); host_->consumer_endpoint()->DisableTracing();
} }
void ConsumerHost::TracingSession::OnTracingDisabled() { void ConsumerHost::TracingSession::OnTracingDisabled(const std::string& error) {
DCHECK(tracing_session_client_); DCHECK(tracing_session_client_);
if (enable_tracing_ack_timer_.IsRunning()) { if (enable_tracing_ack_timer_.IsRunning()) {
...@@ -356,7 +356,8 @@ void ConsumerHost::TracingSession::OnTracingDisabled() { ...@@ -356,7 +356,8 @@ void ConsumerHost::TracingSession::OnTracingDisabled() {
} }
DCHECK(!pending_enable_tracing_ack_pids_); DCHECK(!pending_enable_tracing_ack_pids_);
tracing_session_client_->OnTracingDisabled(); tracing_session_client_->OnTracingDisabled(
/*tracing_succeeded=*/error.empty());
if (trace_processor_) { if (trace_processor_) {
host_->consumer_endpoint()->ReadBuffers(); host_->consumer_endpoint()->ReadBuffers();
...@@ -680,10 +681,10 @@ void ConsumerHost::OnConnect() {} ...@@ -680,10 +681,10 @@ void ConsumerHost::OnConnect() {}
void ConsumerHost::OnDisconnect() {} void ConsumerHost::OnDisconnect() {}
void ConsumerHost::OnTracingDisabled() { void ConsumerHost::OnTracingDisabled(const std::string& error) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
if (tracing_session_) { if (tracing_session_) {
tracing_session_->OnTracingDisabled(); tracing_session_->OnTracingDisabled(error);
} }
} }
......
...@@ -54,7 +54,7 @@ class ConsumerHost : public perfetto::Consumer, public mojom::ConsumerHost { ...@@ -54,7 +54,7 @@ class ConsumerHost : public perfetto::Consumer, public mojom::ConsumerHost {
void OnPerfettoEvents(const perfetto::ObservableEvents&); void OnPerfettoEvents(const perfetto::ObservableEvents&);
void OnTraceData(std::vector<perfetto::TracePacket> packets, bool has_more); void OnTraceData(std::vector<perfetto::TracePacket> packets, bool has_more);
void OnTraceStats(bool success, const perfetto::TraceStats&); void OnTraceStats(bool success, const perfetto::TraceStats&);
void OnTracingDisabled(); void OnTracingDisabled(const std::string& error);
void OnConsumerClientDisconnected(); void OnConsumerClientDisconnected();
void Flush(uint32_t timeout, base::OnceCallback<void(bool)> callback); void Flush(uint32_t timeout, base::OnceCallback<void(bool)> callback);
...@@ -145,7 +145,7 @@ class ConsumerHost : public perfetto::Consumer, public mojom::ConsumerHost { ...@@ -145,7 +145,7 @@ class ConsumerHost : public perfetto::Consumer, public mojom::ConsumerHost {
// and to send finished protobufs over. // and to send finished protobufs over.
void OnConnect() override; void OnConnect() override;
void OnDisconnect() override; void OnDisconnect() override;
void OnTracingDisabled() override; void OnTracingDisabled(const std::string& error) override;
void OnTraceData(std::vector<perfetto::TracePacket> packets, void OnTraceData(std::vector<perfetto::TracePacket> packets,
bool has_more) override; bool has_more) override;
void OnObservableEvents(const perfetto::ObservableEvents&) override; void OnObservableEvents(const perfetto::ObservableEvents&) override;
......
...@@ -105,7 +105,7 @@ class ThreadedPerfettoService : public mojom::TracingSessionClient { ...@@ -105,7 +105,7 @@ class ThreadedPerfettoService : public mojom::TracingSessionClient {
tracing_enabled_ = true; tracing_enabled_ = true;
} }
void OnTracingDisabled() override {} void OnTracingDisabled(bool) override {}
void CreateProducer(const std::string& data_source_name, void CreateProducer(const std::string& data_source_name,
size_t num_packets, size_t num_packets,
...@@ -747,7 +747,7 @@ class MockConsumerHost : public mojom::TracingSessionClient { ...@@ -747,7 +747,7 @@ class MockConsumerHost : public mojom::TracingSessionClient {
// mojom::TracingSessionClient implementation: // mojom::TracingSessionClient implementation:
void OnTracingEnabled() override { wait_for_tracing_enabled_.Quit(); } void OnTracingEnabled() override { wait_for_tracing_enabled_.Quit(); }
void OnTracingDisabled() override { wait_for_tracing_disabled_.Quit(); } void OnTracingDisabled(bool) override { wait_for_tracing_disabled_.Quit(); }
void WaitForConnectionLost() { wait_for_connection_lost_.Run(); } void WaitForConnectionLost() { wait_for_connection_lost_.Run(); }
......
...@@ -253,7 +253,7 @@ void MockConsumer::OnConnect() { ...@@ -253,7 +253,7 @@ void MockConsumer::OnConnect() {
StartTracing(); StartTracing();
} }
void MockConsumer::OnDisconnect() {} void MockConsumer::OnDisconnect() {}
void MockConsumer::OnTracingDisabled() {} void MockConsumer::OnTracingDisabled(const std::string& error) {}
void MockConsumer::OnTraceData(std::vector<perfetto::TracePacket> packets, void MockConsumer::OnTraceData(std::vector<perfetto::TracePacket> packets,
bool has_more) { bool has_more) {
......
...@@ -144,7 +144,7 @@ class MockConsumer : public perfetto::Consumer { ...@@ -144,7 +144,7 @@ class MockConsumer : public perfetto::Consumer {
// perfetto::Consumer implementation // perfetto::Consumer implementation
void OnConnect() override; void OnConnect() override;
void OnDisconnect() override; void OnDisconnect() override;
void OnTracingDisabled() override; void OnTracingDisabled(const std::string& error) override;
void OnTraceData(std::vector<perfetto::TracePacket> packets, void OnTraceData(std::vector<perfetto::TracePacket> packets,
bool has_more) override; bool has_more) override;
......
...@@ -42,6 +42,8 @@ constexpr size_t kDefaultSMBPageSizeBytes = 32 * 1024; ...@@ -42,6 +42,8 @@ constexpr size_t kDefaultSMBPageSizeBytes = 32 * 1024;
// TODO(crbug.com/839071): Figure out a good buffer size. // TODO(crbug.com/839071): Figure out a good buffer size.
constexpr size_t kDefaultSMBSizeBytes = 4 * 1024 * 1024; constexpr size_t kDefaultSMBSizeBytes = 4 * 1024 * 1024;
constexpr char kErrorTracingFailed[] = "Tracing failed";
} // namespace } // namespace
// Implements Perfetto's ProducerEndpoint interface on top of the // Implements Perfetto's ProducerEndpoint interface on top of the
...@@ -378,6 +380,7 @@ class ConsumerEndpoint : public perfetto::ConsumerEndpoint, ...@@ -378,6 +380,7 @@ class ConsumerEndpoint : public perfetto::ConsumerEndpoint,
void StartTracing() override { void StartTracing() override {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
tracing_failed_ = false;
consumer_host_->EnableTracing( consumer_host_->EnableTracing(
tracing_session_host_.BindNewPipeAndPassReceiver(), tracing_session_host_.BindNewPipeAndPassReceiver(),
tracing_session_client_.BindNewPipeAndPassRemote(), trace_config_); tracing_session_client_.BindNewPipeAndPassRemote(), trace_config_);
...@@ -520,7 +523,7 @@ class ConsumerEndpoint : public perfetto::ConsumerEndpoint, ...@@ -520,7 +523,7 @@ class ConsumerEndpoint : public perfetto::ConsumerEndpoint,
} }
} }
void OnTracingDisabled() override { void OnTracingDisabled(bool tracing_succeeded) override {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
// TODO(skyostil): Wire up full data source state. For now Perfetto just // TODO(skyostil): Wire up full data source state. For now Perfetto just
// needs to know all data sources have stopped. // needs to know all data sources have stopped.
...@@ -531,7 +534,8 @@ class ConsumerEndpoint : public perfetto::ConsumerEndpoint, ...@@ -531,7 +534,8 @@ class ConsumerEndpoint : public perfetto::ConsumerEndpoint,
perfetto::ObservableEvents::DATA_SOURCE_INSTANCE_STATE_STOPPED); perfetto::ObservableEvents::DATA_SOURCE_INSTANCE_STATE_STOPPED);
consumer_->OnObservableEvents(events); consumer_->OnObservableEvents(events);
} }
consumer_->OnTracingDisabled(); consumer_->OnTracingDisabled(
tracing_succeeded && !tracing_failed_ ? "" : kErrorTracingFailed);
} }
// mojo::DataPipeDrainer::Client implementation: // mojo::DataPipeDrainer::Client implementation:
...@@ -594,7 +598,7 @@ class ConsumerEndpoint : public perfetto::ConsumerEndpoint, ...@@ -594,7 +598,7 @@ class ConsumerEndpoint : public perfetto::ConsumerEndpoint,
void OnTracingFailed() { void OnTracingFailed() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
// TODO(skyostil): Inform the crew. tracing_failed_ = true;
tracing_session_host_.reset(); tracing_session_host_.reset();
tracing_session_client_.reset(); tracing_session_client_.reset();
drainer_.reset(); drainer_.reset();
...@@ -624,6 +628,7 @@ class ConsumerEndpoint : public perfetto::ConsumerEndpoint, ...@@ -624,6 +628,7 @@ class ConsumerEndpoint : public perfetto::ConsumerEndpoint,
perfetto::TraceConfig trace_config_; perfetto::TraceConfig trace_config_;
std::unique_ptr<TracePacketTokenizer> tokenizer_; std::unique_ptr<TracePacketTokenizer> tokenizer_;
bool tracing_failed_ = false;
bool read_buffers_complete_ = false; bool read_buffers_complete_ = false;
bool trace_data_complete_ = false; bool trace_data_complete_ = false;
uint32_t observed_events_mask_ = 0; uint32_t observed_events_mask_ = 0;
......
...@@ -293,5 +293,5 @@ interface TracingSessionClient { ...@@ -293,5 +293,5 @@ interface TracingSessionClient {
// Called when tracing is disabled; initiated either by a call to // Called when tracing is disabled; initiated either by a call to
// TracingSessionHost::DisableTracing or by the service itself if a timeout is // TracingSessionHost::DisableTracing or by the service itself if a timeout is
// specified in the tracing config. // specified in the tracing config.
OnTracingDisabled(); OnTracingDisabled(bool tracing_succeeded);
}; };
...@@ -160,7 +160,7 @@ class TestTracingClient : public mojom::TracingSessionClient { ...@@ -160,7 +160,7 @@ class TestTracingClient : public mojom::TracingSessionClient {
// tracing::mojom::TracingSessionClient implementation: // tracing::mojom::TracingSessionClient implementation:
void OnTracingEnabled() override {} void OnTracingEnabled() override {}
void OnTracingDisabled() override { void OnTracingDisabled(bool) override {
std::move(tracing_disabled_callback_).Run(); std::move(tracing_disabled_callback_).Run();
} }
......
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