Add support for periodic flushes
Adds a new |fush_period_ms| field to the TraceConfig.
When set, it causes the trace service to issue periodic
flush requests to all data sources.
Bug: 73886018
Change-Id: Ie40fa83b811c8115cf27fd1034262610ca8b4a81
diff --git a/src/tracing/core/service_impl_unittest.cc b/src/tracing/core/service_impl_unittest.cc
index 77d49e5..e556aa4 100644
--- a/src/tracing/core/service_impl_unittest.cc
+++ b/src/tracing/core/service_impl_unittest.cc
@@ -563,6 +563,60 @@
Property(&protos::TestEvent::str, Eq("payload")))));
}
+TEST_F(TracingServiceImplTest, PeriodicFlush) {
+ std::unique_ptr<MockConsumer> consumer = CreateMockConsumer();
+ consumer->Connect(svc.get());
+
+ std::unique_ptr<MockProducer> producer = CreateMockProducer();
+ producer->Connect(svc.get(), "mock_producer");
+ producer->RegisterDataSource("data_source");
+
+ TraceConfig trace_config;
+ trace_config.add_buffers()->set_size_kb(128);
+ trace_config.set_flush_period_ms(1);
+ auto* ds_config = trace_config.add_data_sources()->mutable_config();
+ ds_config->set_name("data_source");
+
+ consumer->EnableTracing(trace_config);
+ producer->WaitForTracingSetup();
+ producer->WaitForDataSourceSetup("data_source");
+ producer->WaitForDataSourceStart("data_source");
+
+ std::unique_ptr<TraceWriter> writer =
+ producer->CreateTraceWriter("data_source");
+
+ const int kNumFlushes = 3;
+ auto checkpoint = task_runner.CreateCheckpoint("all_flushes_done");
+ int flushes_seen = 0;
+ EXPECT_CALL(*producer, Flush(_, _, _))
+ .WillRepeatedly(Invoke([&producer, &writer, &flushes_seen, checkpoint](
+ FlushRequestID flush_req_id,
+ const DataSourceInstanceID*, size_t) {
+ {
+ auto tp = writer->NewTracePacket();
+ char payload[32];
+ sprintf(payload, "f_%d", flushes_seen);
+ tp->set_for_testing()->set_str(payload);
+ }
+ writer->Flush();
+ producer->endpoint()->NotifyFlushComplete(flush_req_id);
+ if (++flushes_seen == kNumFlushes)
+ checkpoint();
+ }));
+ task_runner.RunUntilCheckpoint("all_flushes_done");
+
+ consumer->DisableTracing();
+ producer->WaitForDataSourceStop("data_source");
+ consumer->WaitForTracingDisabled();
+ auto trace_packets = consumer->ReadBuffers();
+ for (int i = 0; i < kNumFlushes; i++) {
+ EXPECT_THAT(trace_packets,
+ Contains(Property(&protos::TracePacket::for_testing,
+ Property(&protos::TestEvent::str,
+ Eq("f_" + std::to_string(i))))));
+ }
+}
+
// Creates a tracing session where some of the data sources set the
// |will_notify_on_stop| flag and checks that the OnTracingDisabled notification
// to the consumer is delayed until the acks are received.