diff options
Diffstat (limited to 'src/profiling/SendCounterPacket.hpp')
-rw-r--r-- | src/profiling/SendCounterPacket.hpp | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/src/profiling/SendCounterPacket.hpp b/src/profiling/SendCounterPacket.hpp index 2a2d5d4313..8dd44ecd81 100644 --- a/src/profiling/SendCounterPacket.hpp +++ b/src/profiling/SendCounterPacket.hpp @@ -7,7 +7,13 @@ #include "IBufferWrapper.hpp" #include "ISendCounterPacket.hpp" -#include "CounterDirectory.hpp" +#include "ICounterDirectory.hpp" +#include "IProfilingConnection.hpp" + +#include <atomic> +#include <mutex> +#include <thread> +#include <condition_variable> namespace armnn { @@ -25,10 +31,13 @@ public: using IndexValuePairsVector = std::vector<std::pair<uint16_t, uint32_t>>; - SendCounterPacket(IBufferWrapper& buffer) - : m_Buffer(buffer), - m_ReadyToRead(false) + SendCounterPacket(IProfilingConnection& profilingConnection, IBufferWrapper& buffer) + : m_ProfilingConnection(profilingConnection) + , m_Buffer(buffer) + , m_IsRunning(false) + , m_KeepRunning(false) {} + ~SendCounterPacket() { Stop(); } void SendStreamMetaDataPacket() override; @@ -44,7 +53,13 @@ public: static const unsigned int PIPE_MAGIC = 0x45495434; static const unsigned int MAX_METADATA_PACKET_LENGTH = 4096; + void Start(); + void Stop(); + bool IsRunning() { return m_IsRunning.load(); } + private: + void Send(); + template <typename ExceptionType> void CancelOperationAndThrow(const std::string& errorMessage) { @@ -55,8 +70,13 @@ private: throw ExceptionType(errorMessage); } + IProfilingConnection& m_ProfilingConnection; IBufferWrapper& m_Buffer; - bool m_ReadyToRead; + std::mutex m_WaitMutex; + std::condition_variable m_WaitCondition; + std::thread m_SendThread; + std::atomic<bool> m_IsRunning; + std::atomic<bool> m_KeepRunning; protected: // Helper methods, protected for testing @@ -78,4 +98,3 @@ protected: } // namespace profiling } // namespace armnn - |