service: Implement producer and data source unregistration

Bug: 73806120
Change-Id: If3ae078340b4f0d212d6624ca8a20b9665b6de2d
diff --git a/src/tracing/core/service_impl.h b/src/tracing/core/service_impl.h
index cb1ab16..d4b4947 100644
--- a/src/tracing/core/service_impl.h
+++ b/src/tracing/core/service_impl.h
@@ -123,6 +123,7 @@
   void RegisterDataSource(ProducerID,
                           DataSourceID,
                           const DataSourceDescriptor&);
+  void UnregisterDataSource(ProducerID, DataSourceID);
   void CopyProducerPageIntoLogBuffer(ProducerID,
                                      BufferID,
                                      const uint8_t*,
@@ -155,6 +156,12 @@
     DataSourceDescriptor descriptor;
   };
 
+  // Represents an active data source for a tracing session.
+  struct DataSourceInstance {
+    DataSourceInstanceID instance_id;
+    DataSourceID data_source_id;
+  };
+
   struct TraceBuffer {
     TraceBuffer();
     ~TraceBuffer();
@@ -208,7 +215,7 @@
 
     // List of data source instances that have been enabled on the various
     // producers for this tracing session.
-    std::multimap<ProducerID, DataSourceInstanceID> data_source_instances;
+    std::multimap<ProducerID, DataSourceInstance> data_source_instances;
 
     // Maps a per-trace-session buffer index into the corresponding global
     // BufferID (shared namespace amongst all consumers). This vector has as
@@ -219,10 +226,9 @@
   ServiceImpl(const ServiceImpl&) = delete;
   ServiceImpl& operator=(const ServiceImpl&) = delete;
 
-  void CreateDataSourceInstanceForProducer(
-      const TraceConfig::DataSource& cfg_data_source,
-      ProducerEndpointImpl* producer,
-      TracingSession* tracing_session);
+  void CreateDataSourceInstance(const TraceConfig::DataSource&,
+                                const RegisteredDataSource&,
+                                TracingSession*);
 
   // Returns a pointer to the |tracing_sessions_| entry or nullptr if the
   // session doesn't exists.