std::cout << "Sending connection acknowledgement." << std::endl;
}
std::unique_ptr<unsigned char[]> uniqueNullPtr = nullptr;
- m_PacketQueue.push(Packet(0x10000, 0, uniqueNullPtr));
+ {
+ std::lock_guard<std::mutex> lck(m_PacketAvailableMutex);
+ m_PacketQueue.push(Packet(0x10000, 0, uniqueNullPtr));
+ }
+ m_ConditionPacketAvailable.notify_one();
}
bool FileOnlyProfilingConnection::SendCounterSelectionPacket()
offset += uint16_t_size;
}
- m_PacketQueue.push(Packet(0x40000, bodySize, uniqueData));
+ {
+ std::lock_guard<std::mutex> lck(m_PacketAvailableMutex);
+ m_PacketQueue.push(Packet(0x40000, bodySize, uniqueData));
+ }
+ m_ConditionPacketAvailable.notify_one();
return true;
}
Packet FileOnlyProfilingConnection::ReadPacket(uint32_t timeout)
{
- uint16_t loopCount = 10;
- uint32_t timeoutFraction = timeout / loopCount;
- while (m_PacketQueue.empty())
+ std::unique_lock<std::mutex> lck(m_PacketAvailableMutex);
+ if (m_PacketQueue.empty())
{
- std::this_thread::sleep_for(std::chrono::milliseconds(timeoutFraction));
- --loopCount;
- if ((loopCount) == 0)
+ if(m_ConditionPacketAvailable.wait_for(lck, std::chrono::milliseconds(timeout)) == std::cv_status::timeout)
{
throw armnn::TimeoutException("Thread has timed out as per requested time limit");
}
#include "ProfilingUtils.hpp"
#include "Runtime.hpp"
+#include <condition_variable>
#include <fstream>
#include <queue>
std::vector<uint16_t> m_IdList;
std::queue<Packet> m_PacketQueue;
TargetEndianness m_Endianness;
+
+ std::mutex m_PacketAvailableMutex;
+ std::condition_variable m_ConditionPacketAvailable;
};
} // namespace profiling
profilingService.Update();
profilingService.Update();
- uint32_t timeout = 2000;
- uint32_t sleepTime = 50;
+ uint32_t timeout = 25; // Wait for a maximum of 25mSec
+ uint32_t sleepTime = 1; // in 1mSec intervals.
uint32_t timeSlept = 0;
// Give the profiling service sending thread time start executing and send the stream metadata.