blob: beb7755741915cebe3905bff0a0ff04ad9a27001 [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
15namespace armnn
16{
17
18namespace profiling
19{
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,
58 const Optional<std::string>& parentCategoryName = EmptyOptional()) = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000059
Jim Flynn97897022020-02-02 12:52:59 +000060 virtual uint16_t RegisterCounterSet(const std::string& counterSetName,
61 uint16_t count = 0,
62 const Optional<std::string>& parentCategoryName = EmptyOptional()) = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000063
Jim Flynn97897022020-02-02 12:52:59 +000064 virtual uint16_t RegisterCounter(const uint16_t uid,
65 const std::string& parentCategoryName,
66 uint16_t counterClass,
67 uint16_t interpolation,
68 double multiplier,
69 const std::string& name,
70 const std::string& description,
71 const Optional<std::string>& units = EmptyOptional(),
72 const Optional<uint16_t>& numberOfCores = EmptyOptional(),
73 const Optional<uint16_t>& deviceUid = EmptyOptional(),
74 const Optional<uint16_t>& counterSetUid = EmptyOptional()) = 0;
75
76 virtual ~IRegisterBackendCounters() {}
Colm Donelane49755b2020-01-29 15:22:43 +000077};
78
79class IBackendProfiling
80{
Colm Donelane49755b2020-01-29 15:22:43 +000081public:
82 virtual ~IBackendProfiling()
83 {}
84
Colm Donelan1aff3932020-02-05 17:48:59 +000085 virtual std::unique_ptr<IRegisterBackendCounters>
James Conroy2dcd3fe2020-02-06 18:34:52 +000086 GetCounterRegistrationInterface(uint16_t currentMaxGlobalCounterID) = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000087
Colm Donelan1aff3932020-02-05 17:48:59 +000088 virtual std::unique_ptr<ISendTimelinePacket> GetSendTimelinePacket() = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000089
Colm Donelan1aff3932020-02-05 17:48:59 +000090 virtual IProfilingGuidGenerator& GetProfilingGuidGenerator() = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000091
Colm Donelan1aff3932020-02-05 17:48:59 +000092 virtual void ReportCounters(const std::vector<Timestamp>& counterValues) = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000093
Colm Donelan1aff3932020-02-05 17:48:59 +000094 virtual CounterStatus GetCounterStatus(uint16_t backendCounterId) = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000095
Colm Donelan1aff3932020-02-05 17:48:59 +000096 virtual std::vector<CounterStatus> GetActiveCounters() = 0;
Colm Donelane49755b2020-01-29 15:22:43 +000097
Colm Donelan1aff3932020-02-05 17:48:59 +000098 virtual bool IsProfilingEnabled() const = 0;
99
Colm Donelane49755b2020-01-29 15:22:43 +0000100};
James Conroy2dcd3fe2020-02-06 18:34:52 +0000101
Colm Donelane49755b2020-01-29 15:22:43 +0000102} // namespace profiling
James Conroy2dcd3fe2020-02-06 18:34:52 +0000103
Colm Donelane49755b2020-01-29 15:22:43 +0000104} // namespace armnn