service: Add GetTraceStats() to consumer endpoint

The new API allows a consumer to obtain trace and buffer stats about the
current tracing session separately from the actual trace data. Consumers
may use this to show stats such as buffer utilization in a UI.

Also adds a few new stats to TraceBuffer.

Change-Id: I929955b2854e5b84b6d1c0ca82e750c47df77ae1
diff --git a/src/tracing/core/service_impl_unittest.cc b/src/tracing/core/service_impl_unittest.cc
index 2a23b15..1cf8ff6 100644
--- a/src/tracing/core/service_impl_unittest.cc
+++ b/src/tracing/core/service_impl_unittest.cc
@@ -1374,4 +1374,33 @@
   consumer->WaitForTracingDisabled(5000);
 }
 
+TEST_F(TracingServiceImplTest, GetTraceStats) {
+  std::unique_ptr<MockConsumer> consumer = CreateMockConsumer();
+  consumer->Connect(svc.get());
+
+  consumer->GetTraceStats();
+  consumer->WaitForTraceStats(false);
+
+  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);
+  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");
+
+  consumer->GetTraceStats();
+  consumer->WaitForTraceStats(true);
+
+  consumer->DisableTracing();
+  producer->WaitForDataSourceStop("data_source");
+  consumer->WaitForTracingDisabled();
+}
+
 }  // namespace perfetto