1 // 2 // Copyright © 2020 Arm Ltd. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 // 5 #pragma once 6 7 #include <armnn/IRuntime.hpp> 8 #include <armnn/profiling/IProfilingGuidGenerator.hpp> 9 #include <armnn/profiling/ISendTimelinePacket.hpp> 10 #include <memory> 11 #include <vector> 12 13 namespace armnn 14 { 15 16 namespace profiling 17 { 18 19 struct CounterValue 20 { CounterValuearmnn::profiling::CounterValue21 CounterValue(uint16_t id, uint32_t value) : 22 counterId(id), counterValue(value) {} 23 uint16_t counterId; 24 uint32_t counterValue; 25 }; 26 27 struct Timestamp 28 { 29 uint64_t timestamp; 30 std::vector<CounterValue> counterValues; 31 }; 32 33 struct CounterStatus 34 { CounterStatusarmnn::profiling::CounterStatus35 CounterStatus(uint16_t backendCounterId, 36 uint16_t globalCounterId, 37 bool enabled, 38 uint32_t samplingRateInMicroseconds) 39 : m_BackendCounterId(backendCounterId), 40 m_GlobalCounterId(globalCounterId), 41 m_Enabled(enabled), 42 m_SamplingRateInMicroseconds(samplingRateInMicroseconds) {} 43 uint16_t m_BackendCounterId; 44 uint16_t m_GlobalCounterId; 45 bool m_Enabled; 46 uint32_t m_SamplingRateInMicroseconds; 47 }; 48 49 class IRegisterBackendCounters 50 { 51 public: 52 virtual void RegisterCategory(const std::string& categoryName) = 0; 53 54 virtual uint16_t RegisterDevice(const std::string& deviceName, 55 uint16_t cores = 0, 56 const Optional<std::string>& parentCategoryName = EmptyOptional()) = 0; 57 58 virtual uint16_t RegisterCounterSet(const std::string& counterSetName, 59 uint16_t count = 0, 60 const Optional<std::string>& parentCategoryName = EmptyOptional()) = 0; 61 62 virtual uint16_t RegisterCounter(const uint16_t uid, 63 const std::string& parentCategoryName, 64 uint16_t counterClass, 65 uint16_t interpolation, 66 double multiplier, 67 const std::string& name, 68 const std::string& description, 69 const Optional<std::string>& units = EmptyOptional(), 70 const Optional<uint16_t>& numberOfCores = EmptyOptional(), 71 const Optional<uint16_t>& deviceUid = EmptyOptional(), 72 const Optional<uint16_t>& counterSetUid = EmptyOptional()) = 0; 73 ~IRegisterBackendCounters()74 virtual ~IRegisterBackendCounters() {} 75 }; 76 77 class IBackendProfiling 78 { 79 public: ~IBackendProfiling()80 virtual ~IBackendProfiling() 81 {} 82 83 virtual std::unique_ptr<IRegisterBackendCounters> 84 GetCounterRegistrationInterface(uint16_t currentMaxGlobalCounterID) = 0; 85 86 virtual std::unique_ptr<ISendTimelinePacket> GetSendTimelinePacket() = 0; 87 88 virtual IProfilingGuidGenerator& GetProfilingGuidGenerator() = 0; 89 90 virtual void ReportCounters(const std::vector<Timestamp>& counterValues) = 0; 91 92 virtual CounterStatus GetCounterStatus(uint16_t backendCounterId) = 0; 93 94 virtual std::vector<CounterStatus> GetActiveCounters() = 0; 95 96 virtual bool IsProfilingEnabled() const = 0; 97 98 }; 99 100 } // namespace profiling 101 102 } // namespace armnn