diff options
Diffstat (limited to 'src/profiling/FileOnlyProfilingConnection.hpp')
-rw-r--r-- | src/profiling/FileOnlyProfilingConnection.hpp | 64 |
1 files changed, 35 insertions, 29 deletions
diff --git a/src/profiling/FileOnlyProfilingConnection.hpp b/src/profiling/FileOnlyProfilingConnection.hpp index 3776dbcbdb..b19b983ebc 100644 --- a/src/profiling/FileOnlyProfilingConnection.hpp +++ b/src/profiling/FileOnlyProfilingConnection.hpp @@ -25,43 +25,54 @@ namespace armnn namespace profiling { -enum class TargetEndianness -{ - BeWire, - LeWire -}; +// forward declaration +class FileOnlyProfilingConnection; -enum class PackageActivity +class StreamMetaDataProcessor : public ILocalPacketHandler { - StreamMetaData, - CounterDirectory, - Unknown +public: + explicit StreamMetaDataProcessor(FileOnlyProfilingConnection* fileOnlyProfilingConnection) : + m_FileOnlyProfilingConnection(fileOnlyProfilingConnection), + m_MetaDataPacketHeader(ConstructHeader(0, 0)) {}; + + std::vector<uint32_t> GetHeadersAccepted() override; + + void HandlePacket(const Packet& packet) override; + +private: + FileOnlyProfilingConnection* m_FileOnlyProfilingConnection; + uint32_t m_MetaDataPacketHeader; + + static uint32_t ToUint32(const unsigned char* data, TargetEndianness endianness); }; -class FileOnlyProfilingConnection : public IProfilingConnection +class FileOnlyProfilingConnection : public IProfilingConnection, public IInternalProfilingConnection { public: - FileOnlyProfilingConnection(const Runtime::CreationOptions::ExternalProfilingOptions& options, - const bool quietOp = true) + explicit FileOnlyProfilingConnection(const Runtime::CreationOptions::ExternalProfilingOptions& options) : m_Options(options) - , m_QuietOp(quietOp) - , m_Endianness(TargetEndianness::LeWire) // Set a sensible default. WaitForStreamMeta will set a real value. + , m_Endianness(TargetEndianness::LeWire) // Set a sensible default. + // StreamMetaDataProcessor will set a real value. , m_IsRunning(false) , m_KeepRunning(false) , m_Timeout(1000) { - for (ILocalPacketHandlerSharedPtr localPacketHandler : options.m_LocalPacketHandlers) + // add the StreamMetaDataProcessor + auto streamMetaDataProcessor = std::make_shared<StreamMetaDataProcessor>(this); + AddLocalPacketHandler(streamMetaDataProcessor); + // and any additional ones added by the users + for (const ILocalPacketHandlerSharedPtr& localPacketHandler : options.m_LocalPacketHandlers) { AddLocalPacketHandler(localPacketHandler); } - if (!options.m_LocalPacketHandlers.empty()) + if (!m_PacketHandlers.empty()) { StartProcessingThread(); } // NOTE: could add timeout to the external profiling options }; - ~FileOnlyProfilingConnection(); + ~FileOnlyProfilingConnection() override; bool IsOpen() const override; @@ -73,30 +84,25 @@ public: // Sending a packet back to ArmNN. Packet ReadPacket(uint32_t timeout) override; + void SetEndianess(const TargetEndianness& endianness) override //IInternalProfilingConnection + { + m_Endianness = endianness; + } + + void ReturnPacket(Packet& packet) override; //IInternalProfilingConnection + private: void AddLocalPacketHandler(ILocalPacketHandlerSharedPtr localPacketHandler); void StartProcessingThread(); void ClearReadableList(); void DispatchPacketToHandlers(const Packet& packet); - bool WaitForStreamMeta(const unsigned char* buffer, uint32_t length); - - uint32_t ToUint32(const unsigned char* data, TargetEndianness endianness); - - void SendConnectionAck(); - - bool SendCounterSelectionPacket(); - - PackageActivity GetPackageActivity(const Packet& packet, uint32_t headerAsWords[2]); - void Fail(const std::string& errorMessage); void ForwardPacketToHandlers(Packet& packet); void ServiceLocalHandlers(); Runtime::CreationOptions::ExternalProfilingOptions m_Options; - bool m_QuietOp; - std::vector<uint16_t> m_IdList; std::queue<Packet> m_PacketQueue; TargetEndianness m_Endianness; |