blob: a04f3c1b994020cfe2d3610969e41abf85c39195 [file] [log] [blame]
Colm Donelane49755b2020-01-29 15:22:43 +00001//
2// Copyright © 2020 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5#pragma once
6
7#include <armnn/IRuntime.hpp>
Colm Donelane49755b2020-01-29 15:22:43 +00008#include <armnn/profiling/ISendTimelinePacket.hpp>
Nikhil Raj5b1bcc92021-06-08 12:31:50 +01009
10#include <common/include/IProfilingGuidGenerator.hpp>
11
Colm Donelane49755b2020-01-29 15:22:43 +000012#include <memory>
13#include <vector>
14
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000015namespace arm
Colm Donelane49755b2020-01-29 15:22:43 +000016{
17
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000018namespace pipe
Colm Donelane49755b2020-01-29 15:22:43 +000019{
20
21struct CounterValue
22{
Sadik Armagancab588a2020-02-17 11:33:31 +000023 CounterValue(uint16_t id, uint32_t value) :
24 counterId(id), counterValue(value) {}
Colm Donelane49755b2020-01-29 15:22:43 +000025 uint16_t counterId;
26 uint32_t counterValue;
27};
28
29struct Timestamp
30{
31 uint64_t timestamp;
32 std::vector<CounterValue> counterValues;
33};
34
35struct CounterStatus
36{
James Conroy2dcd3fe2020-02-06 18:34:52 +000037 CounterStatus(uint16_t backendCounterId,
38 uint16_t globalCounterId,
39 bool enabled,
40 uint32_t samplingRateInMicroseconds)
41 : m_BackendCounterId(backendCounterId),
42 m_GlobalCounterId(globalCounterId),
43 m_Enabled(enabled),
44 m_SamplingRateInMicroseconds(samplingRateInMicroseconds) {}
Colm Donelane49755b2020-01-29 15:22:43 +000045 uint16_t m_BackendCounterId;
46 uint16_t m_GlobalCounterId;
47 bool m_Enabled;
48 uint32_t m_SamplingRateInMicroseconds;
49};
50
51class IRegisterBackendCounters
52{
53public:
Sadik Armagan4c998992020-02-25 12:44:44 +000054 virtual void RegisterCategory(const std::string& categoryName) = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000055
Jim Flynn97897022020-02-02 12:52:59 +000056 virtual uint16_t RegisterDevice(const std::string& deviceName,
57 uint16_t cores = 0,
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000058 const armnn::Optional<std::string>& parentCategoryName
59 = armnn::EmptyOptional()) = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000060
Jim Flynn97897022020-02-02 12:52:59 +000061 virtual uint16_t RegisterCounterSet(const std::string& counterSetName,
62 uint16_t count = 0,
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000063 const armnn::Optional<std::string>& parentCategoryName
64 = armnn::EmptyOptional()) = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000065
Jim Flynn97897022020-02-02 12:52:59 +000066 virtual uint16_t RegisterCounter(const uint16_t uid,
67 const std::string& parentCategoryName,
68 uint16_t counterClass,
69 uint16_t interpolation,
70 double multiplier,
71 const std::string& name,
72 const std::string& description,
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000073 const armnn::Optional<std::string>& units = armnn::EmptyOptional(),
74 const armnn::Optional<uint16_t>& numberOfCores = armnn::EmptyOptional(),
75 const armnn::Optional<uint16_t>& deviceUid = armnn::EmptyOptional(),
76 const armnn::Optional<uint16_t>& counterSetUid = armnn::EmptyOptional()) = 0;
Jim Flynn97897022020-02-02 12:52:59 +000077
78 virtual ~IRegisterBackendCounters() {}
Colm Donelane49755b2020-01-29 15:22:43 +000079};
80
81class IBackendProfiling
82{
Colm Donelane49755b2020-01-29 15:22:43 +000083public:
84 virtual ~IBackendProfiling()
85 {}
86
Colm Donelan1aff3932020-02-05 17:48:59 +000087 virtual std::unique_ptr<IRegisterBackendCounters>
James Conroy2dcd3fe2020-02-06 18:34:52 +000088 GetCounterRegistrationInterface(uint16_t currentMaxGlobalCounterID) = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000089
Colm Donelan1aff3932020-02-05 17:48:59 +000090 virtual std::unique_ptr<ISendTimelinePacket> GetSendTimelinePacket() = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000091
Colm Donelan1aff3932020-02-05 17:48:59 +000092 virtual IProfilingGuidGenerator& GetProfilingGuidGenerator() = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000093
Colm Donelan1aff3932020-02-05 17:48:59 +000094 virtual void ReportCounters(const std::vector<Timestamp>& counterValues) = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000095
Colm Donelan1aff3932020-02-05 17:48:59 +000096 virtual CounterStatus GetCounterStatus(uint16_t backendCounterId) = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000097
Colm Donelan1aff3932020-02-05 17:48:59 +000098 virtual std::vector<CounterStatus> GetActiveCounters() = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000099
Colm Donelan1aff3932020-02-05 17:48:59 +0000100 virtual bool IsProfilingEnabled() const = 0;
101
Colm Donelane49755b2020-01-29 15:22:43 +0000102};
James Conroy2dcd3fe2020-02-06 18:34:52 +0000103
Cathal Corbett5aa9fd72022-02-25 15:33:28 +0000104} // namespace pipe
James Conroy2dcd3fe2020-02-06 18:34:52 +0000105
Cathal Corbett5aa9fd72022-02-25 15:33:28 +0000106} // namespace arm