// // 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 { CounterStatus(uint16_t backendCounterId, uint16_t globalCounterId, bool enabled, uint32_t samplingRateInMicroseconds) : m_BackendCounterId(backendCounterId), m_GlobalCounterId(globalCounterId), m_Enabled(enabled), m_SamplingRateInMicroseconds(samplingRateInMicroseconds) {} uint16_t m_BackendCounterId; uint16_t m_GlobalCounterId; bool m_Enabled; uint32_t m_SamplingRateInMicroseconds; }; class IRegisterBackendCounters { public: virtual void RegisterCategory(const std::string& categoryName, const Optional& deviceUid = EmptyOptional(), const Optional& counterSetUid = EmptyOptional()) = 0; virtual uint16_t RegisterDevice(const std::string& deviceName, uint16_t cores = 0, const Optional& parentCategoryName = EmptyOptional()) = 0; virtual uint16_t RegisterCounterSet(const std::string& counterSetName, uint16_t count = 0, const Optional& parentCategoryName = EmptyOptional()) = 0; virtual 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()) = 0; virtual ~IRegisterBackendCounters() {} }; class IBackendProfiling { public: virtual ~IBackendProfiling() {} virtual std::unique_ptr GetCounterRegistrationInterface(uint16_t currentMaxGlobalCounterID) = 0; virtual std::unique_ptr GetSendTimelinePacket() = 0; virtual IProfilingGuidGenerator& GetProfilingGuidGenerator() = 0; virtual void ReportCounters(const std::vector& counterValues) = 0; virtual CounterStatus GetCounterStatus(uint16_t backendCounterId) = 0; virtual std::vector GetActiveCounters() = 0; virtual bool IsProfilingEnabled() const = 0; }; } // namespace profiling } // namespace armnn