blob: 989c5e8281135e6b17d79555098c35a44f2fbf30 [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>
8#include <armnn/profiling/IProfilingGuidGenerator.hpp>
9#include <armnn/profiling/ISendTimelinePacket.hpp>
10#include <memory>
11#include <vector>
12
13namespace armnn
14{
15
16namespace profiling
17{
18
19struct CounterValue
20{
Sadik Armagancab588a2020-02-17 11:33:31 +000021 CounterValue(uint16_t id, uint32_t value) :
22 counterId(id), counterValue(value) {}
Colm Donelane49755b2020-01-29 15:22:43 +000023 uint16_t counterId;
24 uint32_t counterValue;
25};
26
27struct Timestamp
28{
29 uint64_t timestamp;
30 std::vector<CounterValue> counterValues;
31};
32
33struct CounterStatus
34{
James Conroy2dcd3fe2020-02-06 18:34:52 +000035 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) {}
Colm Donelane49755b2020-01-29 15:22:43 +000043 uint16_t m_BackendCounterId;
44 uint16_t m_GlobalCounterId;
45 bool m_Enabled;
46 uint32_t m_SamplingRateInMicroseconds;
47};
48
49class IRegisterBackendCounters
50{
51public:
Jim Flynn97897022020-02-02 12:52:59 +000052 virtual void RegisterCategory(const std::string& categoryName,
53 const Optional<uint16_t>& deviceUid = EmptyOptional(),
54 const Optional<uint16_t>& counterSetUid = EmptyOptional()) = 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