IVGCVSW-4328 BufferManager running out of buffers crashes application

* Refactored SendCounterPacket classes, separated SendCounterPacket from Send thread
* Created ISendThread.hpp, IConsumer, SendThread.hpp and SendThread.cpp
* Injected IConsumer to BufferManager to notify SendThread when packet is ready to read

Signed-off-by: Sadik Armagan <sadik.armagan@arm.com>
Change-Id: I80f0bb8b8401c6bfd1611f7760217c6fe35d7ad8
diff --git a/src/profiling/BufferManager.hpp b/src/profiling/BufferManager.hpp
index 495b113..d678cd3 100644
--- a/src/profiling/BufferManager.hpp
+++ b/src/profiling/BufferManager.hpp
@@ -6,6 +6,7 @@
 #pragma once
 
 #include "IBufferManager.hpp"
+#include "IConsumer.hpp"
 
 #include <condition_variable>
 #include <mutex>
@@ -28,7 +29,7 @@
 
     void Reset();
 
-    void Commit(IPacketBufferPtr& packetBuffer, unsigned int size) override;
+    void Commit(IPacketBufferPtr& packetBuffer, unsigned int size, bool notifyConsumer = true) override;
 
     void Release(IPacketBufferPtr& packetBuffer) override;
 
@@ -36,6 +37,13 @@
 
     void MarkRead(IPacketBufferPtr& packetBuffer) override;
 
+    /// Set Consumer on the buffer manager to be notified when there is a Commit
+    /// Can only be one consumer
+    void SetConsumer(IConsumer* consumer) override;
+
+    /// Notify the Consumer buffer can be read
+    void FlushReadList() override;
+
 private:
     void Initialize();
 
@@ -55,6 +63,9 @@
 
     // Mutex for readable packet buffer list
     std::mutex m_ReadableMutex;
+
+    // Consumer thread to notify packet is ready to read
+    IConsumer* m_Consumer = nullptr;
 };
 
 } // namespace profiling