aboutsummaryrefslogtreecommitdiff
path: root/src/profiling/test/SendCounterPacketTests.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/profiling/test/SendCounterPacketTests.hpp')
-rw-r--r--src/profiling/test/SendCounterPacketTests.hpp66
1 files changed, 59 insertions, 7 deletions
diff --git a/src/profiling/test/SendCounterPacketTests.hpp b/src/profiling/test/SendCounterPacketTests.hpp
index 4d517e5829..c7fc7b84ac 100644
--- a/src/profiling/test/SendCounterPacketTests.hpp
+++ b/src/profiling/test/SendCounterPacketTests.hpp
@@ -6,6 +6,7 @@
#pragma once
#include <SendCounterPacket.hpp>
+#include <SendThread.hpp>
#include <ProfilingUtils.hpp>
#include <IProfilingConnectionFactory.hpp>
@@ -17,6 +18,11 @@
#include <boost/core/ignore_unused.hpp>
#include <boost/numeric/conversion/cast.hpp>
+#include <atomic>
+#include <condition_variable>
+#include <mutex>
+#include <thread>
+
namespace armnn
{
@@ -210,10 +216,15 @@ public:
return std::move(m_Buffer);
}
- void Commit(IPacketBufferPtr& packetBuffer, unsigned int size) override
+ void Commit(IPacketBufferPtr& packetBuffer, unsigned int size, bool notifyConsumer = true) override
{
packetBuffer->Commit(size);
m_Buffer = std::move(packetBuffer);
+
+ if (notifyConsumer)
+ {
+ FlushReadList();
+ }
}
IPacketBufferPtr GetReadableBuffer() override
@@ -233,9 +244,27 @@ public:
m_Buffer = std::move(packetBuffer);
}
+ void SetConsumer(IConsumer* consumer) override
+ {
+ if (consumer != nullptr)
+ {
+ m_Consumer = consumer;
+ }
+ }
+
+ void FlushReadList() override
+ {
+ // notify consumer that packet is ready to read
+ if (m_Consumer != nullptr)
+ {
+ m_Consumer->SetReadyToRead();
+ }
+ }
+
private:
unsigned int m_BufferSize;
IPacketBufferPtr m_Buffer;
+ IConsumer* m_Consumer = nullptr;
};
class MockStreamCounterBuffer : public IBufferManager
@@ -264,13 +293,18 @@ public:
return std::make_unique<MockPacketBuffer>(requestedSize);
}
- void Commit(IPacketBufferPtr& packetBuffer, unsigned int size) override
+ void Commit(IPacketBufferPtr& packetBuffer, unsigned int size, bool notifyConsumer = true) override
{
std::lock_guard<std::mutex> lock(m_Mutex);
packetBuffer->Commit(size);
m_BufferList.push_back(std::move(packetBuffer));
m_CommittedSize += size;
+
+ if (notifyConsumer)
+ {
+ FlushReadList();
+ }
}
void Release(IPacketBufferPtr& packetBuffer) override
@@ -302,6 +336,23 @@ public:
packetBuffer->MarkRead();
}
+ void SetConsumer(IConsumer* consumer) override
+ {
+ if (consumer != nullptr)
+ {
+ m_Consumer = consumer;
+ }
+ }
+
+ void FlushReadList() override
+ {
+ // notify consumer that packet is ready to read
+ if (m_Consumer != nullptr)
+ {
+ m_Consumer->SetReadyToRead();
+ }
+ }
+
unsigned int GetCommittedSize() const { return m_CommittedSize; }
unsigned int GetReadableSize() const { return m_ReadableSize; }
unsigned int GetReadSize() const { return m_ReadSize; }
@@ -324,6 +375,9 @@ private:
// The total size of the buffers that has already been read
unsigned int m_ReadSize;
+
+ // Consumer thread to notify packet is ready to read
+ IConsumer* m_Consumer = nullptr;
};
class MockSendCounterPacket : public ISendCounterPacket
@@ -337,7 +391,7 @@ public:
unsigned int reserved = 0;
IPacketBufferPtr buffer = m_BufferManager.Reserve(1024, reserved);
memcpy(buffer->GetWritableData(), message.c_str(), static_cast<unsigned int>(message.size()) + 1);
- m_BufferManager.Commit(buffer, reserved);
+ m_BufferManager.Commit(buffer, reserved, false);
}
void SendCounterDirectoryPacket(const ICounterDirectory& counterDirectory) override
@@ -375,8 +429,6 @@ public:
m_BufferManager.Commit(buffer, reserved);
}
- void SetReadyToRead() override {}
-
private:
IBufferManager& m_BufferManager;
};
@@ -596,8 +648,8 @@ private:
class SendCounterPacketTest : public SendCounterPacket
{
public:
- SendCounterPacketTest(ProfilingStateMachine& profilingStateMachine, IBufferManager& buffer)
- : SendCounterPacket(profilingStateMachine, buffer)
+ SendCounterPacketTest(IBufferManager& buffer)
+ : SendCounterPacket(buffer)
{}
bool CreateDeviceRecordTest(const DevicePtr& device,