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 = {
},
'src/third_party/perfetto':
Var('android_git') + '/platform/external/perfetto.git' + '@' + '4cd11945c5a1810252d00d9f91147f22872ddd4b',
Var('android_git') + '/platform/external/perfetto.git' + '@' + 'df4403112ffa9c8489a83240a28bd270de823870',
'src/third_party/perl': {
'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
......
......@@ -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
// tracing data via ConsumerHost::DisableTracingAndEmitJson().
return;
}
void DisableTracing(
......
......@@ -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
// ConsumerHost::DisableTracingAndEmitJson().
if (!use_proto_format_)
return;
if (!tracing_succeeded) {
OnTracingSessionFailed();
return;
}
DCHECK(agent_label_.empty());
mojo::ScopedDataPipeProducerHandle producer_handle;
......
......@@ -131,7 +131,8 @@ PerfettoFileTracer::~PerfettoFileTracer() = default;
void PerfettoFileTracer::OnTracingEnabled() {}
void PerfettoFileTracer::OnTracingDisabled() {
void PerfettoFileTracer::OnTracingDisabled(bool tracing_succeeded) {
DCHECK(tracing_succeeded);
has_been_disabled_ = true;
}
......
......@@ -35,7 +35,7 @@ class PerfettoFileTracer : public tracing::mojom::TracingSessionClient {
// tracing::mojom::TracingSessionClient implementation:
void OnTracingEnabled() override;
void OnTracingDisabled() override;
void OnTracingDisabled(bool tracing_succeeded) override;
bool is_finished_for_testing() const { return !background_drainer_; }
......
......@@ -626,7 +626,7 @@ void TracingControllerImpl::OnTracingEnabled() {
std::move(start_tracing_callback_).Run();
}
void TracingControllerImpl::OnTracingDisabled() {}
void TracingControllerImpl::OnTracingDisabled(bool) {}
void TracingControllerImpl::OnTracingFailed() {
CompleteFlush();
......
......@@ -77,7 +77,7 @@ class TracingControllerImpl : public TracingController,
// tracing::mojom::TracingSessionClient implementation:
void OnTracingEnabled() override;
void OnTracingDisabled() override;
void OnTracingDisabled(bool tracing_succeeded) override;
void OnTracingFailed();
......
......@@ -348,7 +348,7 @@ void ConsumerHost::TracingSession::DisableTracing() {
host_->consumer_endpoint()->DisableTracing();
}
void ConsumerHost::TracingSession::OnTracingDisabled() {
void ConsumerHost::TracingSession::OnTracingDisabled(const std::string& error) {
DCHECK(tracing_session_client_);
if (enable_tracing_ack_timer_.IsRunning()) {
......@@ -356,7 +356,8 @@ void ConsumerHost::TracingSession::OnTracingDisabled() {
}
DCHECK(!pending_enable_tracing_ack_pids_);
tracing_session_client_->OnTracingDisabled();
tracing_session_client_->OnTracingDisabled(
/*tracing_succeeded=*/error.empty());
if (trace_processor_) {
host_->consumer_endpoint()->ReadBuffers();
......@@ -680,10 +681,10 @@ void ConsumerHost::OnConnect() {}
void ConsumerHost::OnDisconnect() {}
void ConsumerHost::OnTracingDisabled() {
void ConsumerHost::OnTracingDisabled(const std::string& error) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
if (tracing_session_) {
tracing_session_->OnTracingDisabled();
tracing_session_->OnTracingDisabled(error);
}
}
......
......@@ -54,7 +54,7 @@ class ConsumerHost : public perfetto::Consumer, public mojom::ConsumerHost {
void OnPerfettoEvents(const perfetto::ObservableEvents&);
void OnTraceData(std::vector<perfetto::TracePacket> packets, bool has_more);
void OnTraceStats(bool success, const perfetto::TraceStats&);
void OnTracingDisabled();
void OnTracingDisabled(const std::string& error);
void OnConsumerClientDisconnected();
void Flush(uint32_t timeout, base::OnceCallback<void(bool)> callback);
......@@ -145,7 +145,7 @@ class ConsumerHost : public perfetto::Consumer, public mojom::ConsumerHost {
// and to send finished protobufs over.
void OnConnect() override;
void OnDisconnect() override;
void OnTracingDisabled() override;
void OnTracingDisabled(const std::string& error) override;
void OnTraceData(std::vector<perfetto::TracePacket> packets,
bool has_more) override;
void OnObservableEvents(const perfetto::ObservableEvents&) override;
......
......@@ -105,7 +105,7 @@ class ThreadedPerfettoService : public mojom::TracingSessionClient {
tracing_enabled_ = true;
}
void OnTracingDisabled() override {}
void OnTracingDisabled(bool) override {}
void CreateProducer(const std::string& data_source_name,
size_t num_packets,
......@@ -747,7 +747,7 @@ class MockConsumerHost : public mojom::TracingSessionClient {
// mojom::TracingSessionClient implementation:
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(); }
......
......@@ -253,7 +253,7 @@ void MockConsumer::OnConnect() {
StartTracing();
}
void MockConsumer::OnDisconnect() {}
void MockConsumer::OnTracingDisabled() {}
void MockConsumer::OnTracingDisabled(const std::string& error) {}
void MockConsumer::OnTraceData(std::vector<perfetto::TracePacket> packets,
bool has_more) {
......
......@@ -144,7 +144,7 @@ class MockConsumer : public perfetto::Consumer {
// perfetto::Consumer implementation
void OnConnect() override;
void OnDisconnect() override;
void OnTracingDisabled() override;
void OnTracingDisabled(const std::string& error) override;
void OnTraceData(std::vector<perfetto::TracePacket> packets,
bool has_more) override;
......
......@@ -42,6 +42,8 @@ constexpr size_t kDefaultSMBPageSizeBytes = 32 * 1024;
// TODO(crbug.com/839071): Figure out a good buffer size.
constexpr size_t kDefaultSMBSizeBytes = 4 * 1024 * 1024;
constexpr char kErrorTracingFailed[] = "Tracing failed";
} // namespace
// Implements Perfetto's ProducerEndpoint interface on top of the
......@@ -378,6 +380,7 @@ class ConsumerEndpoint : public perfetto::ConsumerEndpoint,
void StartTracing() override {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
tracing_failed_ = false;
consumer_host_->EnableTracing(
tracing_session_host_.BindNewPipeAndPassReceiver(),
tracing_session_client_.BindNewPipeAndPassRemote(), trace_config_);
......@@ -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_);
// TODO(skyostil): Wire up full data source state. For now Perfetto just
// needs to know all data sources have stopped.
......@@ -531,7 +534,8 @@ class ConsumerEndpoint : public perfetto::ConsumerEndpoint,
perfetto::ObservableEvents::DATA_SOURCE_INSTANCE_STATE_STOPPED);
consumer_->OnObservableEvents(events);
}
consumer_->OnTracingDisabled();
consumer_->OnTracingDisabled(
tracing_succeeded && !tracing_failed_ ? "" : kErrorTracingFailed);
}
// mojo::DataPipeDrainer::Client implementation:
......@@ -594,7 +598,7 @@ class ConsumerEndpoint : public perfetto::ConsumerEndpoint,
void OnTracingFailed() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
// TODO(skyostil): Inform the crew.
tracing_failed_ = true;
tracing_session_host_.reset();
tracing_session_client_.reset();
drainer_.reset();
......@@ -624,6 +628,7 @@ class ConsumerEndpoint : public perfetto::ConsumerEndpoint,
perfetto::TraceConfig trace_config_;
std::unique_ptr<TracePacketTokenizer> tokenizer_;
bool tracing_failed_ = false;
bool read_buffers_complete_ = false;
bool trace_data_complete_ = false;
uint32_t observed_events_mask_ = 0;
......
......@@ -293,5 +293,5 @@ interface TracingSessionClient {
// Called when tracing is disabled; initiated either by a call to
// TracingSessionHost::DisableTracing or by the service itself if a timeout is
// specified in the tracing config.
OnTracingDisabled();
OnTracingDisabled(bool tracing_succeeded);
};
......@@ -160,7 +160,7 @@ class TestTracingClient : public mojom::TracingSessionClient {
// tracing::mojom::TracingSessionClient implementation:
void OnTracingEnabled() override {}
void OnTracingDisabled() override {
void OnTracingDisabled(bool) override {
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