// // Copyright © 2020 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #pragma once #include #include #include #include #include namespace armnn { namespace profiling { struct CounterValue { uint16_t counterId; uint32_t counterValue; }; struct Timestamp { uint64_t timestamp; std::vector counterValues; }; struct CounterStatus { uint16_t m_BackendCounterId; uint16_t m_GlobalCounterId; bool m_Enabled; uint32_t m_SamplingRateInMicroseconds; }; class IRegisterBackendCounters { public: uint16_t RegisterCategory(const std::string& categoryName, const Optional& deviceUid = EmptyOptional(), const Optional& counterSetUid = EmptyOptional()); uint16_t RegisterDevice(const std::string& deviceName, uint16_t cores = 0, const Optional& parentCategoryName = EmptyOptional()); uint16_t RegisterCounterSet(const std::string& counterSetName, uint16_t count = 0, const Optional& parentCategoryName = EmptyOptional()); uint16_t RegisterCounter(const uint16_t uid, const std::string& parentCategoryName, uint16_t counterClass, uint16_t interpolation, double multiplier, const std::string& name, const std::string& description, const Optional& units = EmptyOptional(), const Optional& numberOfCores = EmptyOptional(), const Optional& deviceUid = EmptyOptional(), const Optional& counterSetUid = EmptyOptional()); }; class IBackendProfiling { protected: IBackendProfiling(const IRuntime::CreationOptions&) {} public: virtual ~IBackendProfiling() {} IRegisterBackendCounters GetCounterRegistrationInterface(uint16_t currentMaxGlobalCounterID); ISendTimelinePacket& GetSendTimelinePacket(); IProfilingGuidGenerator& GetProfilingGuidGenerator(); void ReportCounters(const std::vector& counterValues); CounterStatus GetCounterStatus(uint16_t backendCounterId); std::vector GetActiveCounters(); bool IsProfilingEnabled() const; }; } // namespace profiling } // namespace armnn