Change SHM to be handled per producer

The size of the shm and the page size can now be specified per producer,
through the config file.
The shared memory is now created at the same time as the first data source,
instead of when the connection is first established.
As a side effect, the SharedMemoryABI had to be refactored to allow an
default constructor.

Bug:74098471
Bug:69708583
Change-Id: I1a75d81d91c4a7a531bb01c2b6224550e760eab2
diff --git a/src/tracing/core/trace_writer_impl_unittest.cc b/src/tracing/core/trace_writer_impl_unittest.cc
index c5b5b01..5acf403 100644
--- a/src/tracing/core/trace_writer_impl_unittest.cc
+++ b/src/tracing/core/trace_writer_impl_unittest.cc
@@ -37,6 +37,7 @@
   void UnregisterDataSource(DataSourceID) override {}
   void CommitData(const CommitDataRequest&, CommitDataCallback) override {}
   SharedMemory* shared_memory() const override { return nullptr; }
+  size_t shared_buffer_page_size_kb() const override { return 0; }
   std::unique_ptr<TraceWriter> CreateTraceWriter(BufferID) override {
     return nullptr;
   }